Alteryx 2019.1 新機能 : Pythonツールのストレージ選択とSpatial対応

こんにちは、小澤です。

現地時間2019/02/13にAlteryx 2019.1がリリースされました。 今回は、Alteryx Designer 2019.1新機能のうち、PythonツールとAlteryxの間をやり取りするストレージフォーマットの話をしたいと思います。

Pythonツールとのデータの受け渡し

Alteryxのワークフロー内でPythonツールを使った場合、どのようにデータの受け渡しをしているのかという話をまず書いておきます。

まずはここで、Run Commandツールの動きをおさらいしておきましょう

  1. ツールが受け取るデータを一時的なファイルとして出力
  2. Run Commandツールの引数としてそのファイルを受け取る
  3. 処理結果を一時的なファイルとして出力
  4. そのファイルの中身をツールの出力して渡す

という流れになっています。

実は、RツールやPythonツールも似たような動きをしています。 内部的に処理されるものなので、表向きにはこのファイルを指定したりResultsに出力されるものではありませんが、 Engine.TempFilePathから辿ったりすると、実際に出力されるファイルを確認することも可能です。

今回の新機能では、このPythonプログラムがAlteryx.read, Altery.write関数を使ってやり取りする際の一時ファイルとしてSqlite形式か、YXDB形式かを選択できるようになったものとなります。

実際の指定方法と動き

では、このSqliteかYXDBかの選択を行う方法を見てみましょう。 これは非常に簡単に切り替えることが可能です。

PythonツールをInteractiveモードに設定した状態で、上部メニューから Alteryx > Sqlite override にチェックが入っている状態(デフォルトはこちら)にすると一時ファイルはSqliteのファイルとして出力されます。 一方チェックが入っていない状態にするとYXDBファイルとなります。

2018.4までは、Sqliteのみとなっていましたが、2019.1からYXDBが選択可能になった、という形になっています。

YXDBにすることによってSqliteと比較して以下のような違いがあります。

項目 Sqlite YXDB
Spatial Object byte列として読み込まれる JSON形式と相互変換される
列数の制限 2000列まで 制限なし
Nullを含むデータ PandasのDataFrameに変換する際にパフォーマンスに影響を及ぼす可能性あり

Spatial Objectを実際に読み込むと以下のようになります。

これは、SelectツールなどでSpatialObjを文字列に変換した際と同様の値になっています。 また、SelectツールでSpatialObjに変換可能なデータをPythonツールで扱う際には以下のように型を指定することでSpatialObjとして出力されます。

columns = {'SpatialObj' : {'type' : 'SpatialObj'}}
Alteryx.write(df, 1, columns=columns)

これらの相互変換は自動的に行われますが、その分オーバーヘッドも発生する点にはご注意ください。

おわりに

今回は、Alteryx 2019.1の新機能のうち、PythonツールでのStrage選択について解説しました。 Sqlite, YXDB双方にそれぞれメリット・デメリットはありますので、必要に応じて使い分けてみてください。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400