[Alteryx]データベースへのロード前後に独自処理を追加してみた

2015.07.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、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を使用します。

alteryx-add-sql-01

出力の設定

出力は冒頭に説明したOutput Dataツールを使用します。ツールをワークフローに配置し、Oracleデータベースへのホスト/ユーザ(パスワード)/出力テーブル等の接続設定を行います。

alteryx-add-sql-02

今回Oracleデータベースとの接続は、OCIを使用しました。AlteryxをインストールしているPCにOracle Clientをインストールし、Oracle Net Serviceの設定を行った上で以下画像からのウィザードで設定できます。参考にしてください。

alteryx-add-sql-03

テーブル名の設定に注意!! テーブル名は大文字で設定しましょう。小文字で設定してしまうとテーブル名にダブルクォーテーションが追加され、検索の際にSELECT * FROM "test";のように厄介なことになります。

オプションの設定

さて、Output Dataツールの設定ができると、Optionsメニューで各種挙動に関する細かな設定が可能です。例えば下図は、テーブル出力の際にテーブルおよびその中のデータをどう扱うかを指定することができます。

alteryx-add-sql-04

Pre Create SQL Statementオプション

今回の本題がこちらです。Pre Create SQL Statementの中にSQL文を書くことで、データロード前の処理を自由に設定できます。複数のSQL文は、セミコロンで区切ることで順次実行させることも可能です。

alteryx-add-sql-05

Post Create SQL Statementオプション

同じく、Post Create SQL StatementにSQL文を記述して、データロード後の処理を記述することができます。画像の例では、PL/SQLのストアド・プロシージャを呼び出しています。

alteryx-add-sql-06

ストアドプログラム設定の注意点!!

  • EXECUTE文ではなくCALL文を使う
    • EXECUTEを使うとORA-00900エラー(SQL文が無効)発生
  • 引数なしプロシージャでも括弧を忘れずに
    • 括弧を忘れるとORA-06576エラー(ファンクション名またはプロシージャ名が無効)発生

実行結果

実行に成功すると、以下のダイアログが表示されます。 SQL Developer等のデータベースクライアントツールで、目的のテーブルにデータが格納されているか確認してください。

alteryx-add-sql-07

まとめ

Alteryxで、データベースのデータロード前後に追加処理を加える方法について紹介しました。覚えておきたい機能ですね。

次回は、データベースアクセスが強化された、Alteryx 9.5の新機能について触れたいと思っています。それでは、また。