REFERENCE
開発者リファレンス
認証、API、SDK、Flow Agent のプロセッサ、パラメータ解決のリファレンスです。
SQL
データベースに対して SQL を実行し、結果を変数に格納して後続ノードで使えるようにします。パラメータ化クエリに対応。
SQL processor は、プロジェクトに設定済みのデータソース経由でデータベースに接続し、SQL を実行して、結果を配列として指定した変数に格納します。後続のノードはその変数から結果を読めます。
クエリには $1、$2 のようなプレースホルダを書けます。実際の値は SQL Type Arguments で別に設定するので、値を SQL 文字列に連結する必要はありません。
プロパティ
ノードのプロパティパネルです。
Data Source、SQL、ResultFieldの 3 つは必須で、未入力のうちは赤枠で表示されます。Data Source(必須)
接続先のデータベースを、プロジェクトに作成済みのデータソースから選びます。隣の Add から新規作成に直接移動できます。データソースは Settings → Data Source で作成し、PostgreSQL、MySQL、Microsoft SQL Server、Oracle、Trino、Athena、SAP HANA、Salesforce、NetSuite に対応しています。
SQL(必須)
実行するクエリで、コードエディタに書きます。パラメータを使う場合は
$1、$2のプレースホルダを置き、値は下の SQL Type Arguments で設定します。ResultField(必須)
結果を格納する変数名です。既定は
result。結果は常に配列で、1 行しかない場合も配列です。SQL Type Arguments
SQL のプレースホルダに入る実際の値です。この領域は最初は空で、緑の
+で 1 組追加します。1 組はTypeとValueのペアです。Typeはドロップダウンで、選択肢は 4 つです。Valueはエディタで、既定は Expression モードです。左上のfxで値の取得方法を切り替えられます。詳しくは Expression の紹介 を参照してください。引数は追加した順に対応します。1 組目が
$1、2 組目が$2、以下同様です。実際の例
ある店舗で在庫が少ない商品を取り出します。
$1は店舗コード(文字列)、$2は取得件数(整数)で、2 つの引数がそれぞれ違うTypeを使います。入力後のパネル:
項目 値 Data Source Retail DW (RDS)SQL SELECT sku, sku_name, on_hand, safety_stock FROM retail_dw.pos_store_inventory WHERE store_id = $1 ORDER BY on_hand ASC LIMIT $2ResultField low_stock引数 1 Type String、ValueS-001引数 2 Type Integer、Value5実行すると
low_stockには次の 5 行が入ります。sku sku_name on_hand safety_stock SKU-8801 聯名鈦保溫瓶 500ml 6 40 SKU-1227 經典陶瓷馬克杯 350ml 森綠 16 12 SKU-1241 矽膠料理鏟 二入 象牙白 19 12 SKU-1000 方格筆記本 A6 黑 20 16 SKU-1067 不鏽鋼瀝水籃 16cm 象牙白 21 12 後続ノードは
low_stockでこの配列を受け取ります。たとえば Router でlow_stock.length > 0を判定し、補充通知を出すかどうかを分岐できます。CRD を直接書く場合
キャンバスでの設定は、Workflow CRD では config key の並びとして保存されます。
Data Source、SQL、ResultFieldはそれぞれ 1 つの key、SQL Type Arguments は 1 組につき 2 つの key で、番号は 1 から始まります。- name: dataConnector
value: retail-dw-rds
- name: sql
value: |
SELECT sku, sku_name, on_hand, safety_stock
FROM retail_dw.pos_store_inventory
WHERE store_id = $1
ORDER BY on_hand ASC
LIMIT $2
- name: resultField
value: low_stock
- name: sql.args.1.type
value: string
- name: sql.args.1.value
value: S-001
- name: sql.args.2.type
value: integer
- name: sql.args.2.value
value: "5"引数の数に上限はありませんが、番号は連番でなければならず、各番号に
typeとvalueの両方が必要です。プロセッサは 1 から順に探し、番号の抜け、あるいはtype/valueの欠落に当たった時点で止まります。それ以降の引数はエラーにならず捨てられます。1 と 3 で書けば 3 組目は存在しないのと同じです。読み取り専用で、書き込みはできない
実行前に、プラットフォームは SQL を parse して読み取り専用クエリかどうかを確認します。読み取り専用でなければ実行されず、
SQL query is not a read-only queryとして Failure に進みます。そのため
UPDATE、INSERT、DELETEはこの processor では動きません。この制限を外すスイッチ(allowWrite)はプロパティパネルになく、ワークフロー作成者が設定するものではありません。プラットフォーム側の設定です。同じ設定群にテーブルの許可リスト(allowedTables)もあり、設定されている場合はリスト外のテーブルに触れるクエリがSQL query references unauthorized tablesとして Failure に進みます。注意事項
- この processor はページングも件数制限もしません。SQL が返した行数がそのまま変数に入ります。大きなテーブルでは自分で
LIMITを付けてください。 - 引数の
Typeの選び間違いは保存時には弾かれません。実行時に Failure になります。 - データベースに IP 制限がある場合は、Asgard プラットフォームの送信元 IP を許可リストに追加してください。VPN ホワイトリスト IP を参照。
- この processor はページングも件数制限もしません。SQL が返した行数がそのまま変数に入ります。大きなテーブルでは自分で