はじめに
Lookup Tableで特定の条件にマッチするレコードを絞り込み出力したい場合、通常はSearch entriesアクションを利用します。
Search entriesでは、文字列を部分一致させて結果を絞り込み出力することが可能です。
Search entriesの問題点
Lookup TablesのSearch entriesアクションはあくまでも簡易的な検索(絞り込み)しか行うことができません。また、全てのカラムが文字列型として扱われます。これにより、以下のような制限が発生します。
- 文字列の部分一致のみによる結果の絞り込みしか対応しておらず、詳細な条件指定ができない
- 前方一致・後方一致ができない
- not が指定できない
- distinct ができない
- and/or指定ができない(単一キーワードの部分一致しか対応していない)
- Lookup Tablesは全てのカラムが文字列型であるため、数値や日付を範囲とする条件指定ができない
Lookup Tables上のデータをSQLで絞り込む
以下のようなレシピを実装することで、Lookup Tables上のデータをSQLで絞り込むことが可能となります。
それぞれのステップについては、以下で説明します。
Step 2
Lookup TablesのGet all entries
アクションを使用して、Lookup Tablesの全レコードを取得します。
Step 3
Variables by Workatoを追加し、Create list
アクションを使用して、Lookup Tablesの全レコードをセットします。
Variables by Workatoの Create list アクションを使用する理由
Variables by WorkatoのCreate list
アクションを使用する理由は次の通りです。
1.Lookup Tablesから取得したデータの構造を、2次元のデータ構造(行と列のデータ構造)へ変換
後続の手順に登場するSQL Collectionへは、2次元のデータ構造でデータを渡す必要があります。
Lookup Tablesの出力スキーマは以下のようになっています。の各データは entry
というハッシュに格納され、各値は entry
以下に格納されています。見てわかる通り2次元のデータ構造とはなっておらず、そのままSQL Collectionで処理することができません。
以上によりデータ構造の変換のため、Variables by WorkatoのCreate listを使用しています。
2.各フィールドのデータ型を変換
Lookup Tablesの各フィールドのデータ型はテキスト型となっています。このままですと、例えば数値や日付を範囲とする条件指定(レコードの絞り込み)ができません。
Variables by WorkatoのCreate listにおいて各フィールドの型を設定のうえ、値(データピル)を各フィールドにセットすることで、セットされた値をデータ型に合わせて変換(キャスト)することができます。
Step 4
SQL Collection by Workatoを追加し、Create List
アクションを使用して、Step3で作成したリストをList soruceへセットします。
Step 5
SQL Collection by Workatoを追加し、Query Lists
アクションを使用して、Step4で作成したリストに対するSQLクエリと出力スキーマ(Output list schemaスキーマ)を定義します。
おわりに
以上の手順でレシピの実装を進めていくことで、Lookup Tables上のデータをSQLを用いて絞り込むことが可能となります。
なお、今回はSQLを用いた絞り込み方法としてSQL Collection by Workatoを紹介しましたが、絞り込み以外の用途にも活用可能です。例えば、SQLを用いたデータの変換や重複排除にも対応可能です。SQLはSQLiteに準拠しており、標準的なSQL文やSQLiteに準拠したSQL文を使用して様々なデータ処理の実現が可能です。