[Alteryx]データベースへのロード前後に独自処理を追加してみた
はじめに
こんにちは、yokatsukiです。今回はAlteryxについての話題です。
Alteryxでデータ加工を行った後、データベースへ格納する操作はよく行われると思いますが、その処理の前後で何かもう一手間加えたい、という事が起きがちです。例えば以下の様なシチュエーションです。
- ロード前に不要なデータを削除(or 変更)しておきたい
- データロード後、特定のストアドプログラムを実行して、ロード後のデータを関連テーブルに反映させたい
今回はこれら要望を叶える機能について紹介します。
機能概要
上述の機能は、Alteryxのデータ出力定義Output Dataツールで設定します。
Output Dataツールには、Pre Create SQL StatementとおよびPost Create SQL Statementというオプション設定項目がありますので、そこにSQL文やプロシージャを直接記述する事ができます。
試してみた
説明の為の簡単なサンプルを作成しました。ストーリーはCSVファイルをOracleデータベースに格納する前後に、何らかの処理を加える、というものです。
入力の設定
データ入力の定義Input Dataツールを新規ワークフロー(画面右側白い領域)に配置し、そこにCSVファイルの場所と名前を設定します。
入力CSVファイルは、<Alteryxインストールフォルダ>¥Sample¥SampleData¥以下にあるサンプルファイルCSVGeocode_example.csvを使用します。
出力の設定
出力は冒頭に説明したOutput Dataツールを使用します。ツールをワークフローに配置し、Oracleデータベースへのホスト/ユーザ(パスワード)/出力テーブル等の接続設定を行います。
今回Oracleデータベースとの接続は、OCIを使用しました。AlteryxをインストールしているPCにOracle Clientをインストールし、Oracle Net Serviceの設定を行った上で以下画像からのウィザードで設定できます。参考にしてください。
テーブル名の設定に注意!! テーブル名は大文字で設定しましょう。小文字で設定してしまうとテーブル名にダブルクォーテーションが追加され、検索の際にSELECT * FROM "test";のように厄介なことになります。
オプションの設定
さて、Output Dataツールの設定ができると、Optionsメニューで各種挙動に関する細かな設定が可能です。例えば下図は、テーブル出力の際にテーブルおよびその中のデータをどう扱うかを指定することができます。
Pre Create SQL Statementオプション
今回の本題がこちらです。Pre Create SQL Statementの中にSQL文を書くことで、データロード前の処理を自由に設定できます。複数のSQL文は、セミコロンで区切ることで順次実行させることも可能です。
Post Create SQL Statementオプション
同じく、Post Create SQL StatementにSQL文を記述して、データロード後の処理を記述することができます。画像の例では、PL/SQLのストアド・プロシージャを呼び出しています。
ストアドプログラム設定の注意点!!
- EXECUTE文ではなくCALL文を使う
- EXECUTEを使うとORA-00900エラー(SQL文が無効)発生
- 引数なしプロシージャでも括弧を忘れずに
- 括弧を忘れるとORA-06576エラー(ファンクション名またはプロシージャ名が無効)発生
実行結果
実行に成功すると、以下のダイアログが表示されます。 SQL Developer等のデータベースクライアントツールで、目的のテーブルにデータが格納されているか確認してください。
まとめ
Alteryxで、データベースのデータロード前後に追加処理を加える方法について紹介しました。覚えておきたい機能ですね。
次回は、データベースアクセスが強化された、Alteryx 9.5の新機能について触れたいと思っています。それでは、また。