メインコンテンツまでスキップ

REFERENCE

開発者リファレンス

認証、API、SDK、Flow Agent のプロセッサ、パラメータ解決のリファレンスです。

SQL

データベースに対して SQL を実行し、結果を変数に格納して後続ノードで使えるようにします。パラメータ化クエリに対応。

SQL processor は、プロジェクトに設定済みのデータソース経由でデータベースに接続し、SQL を実行して、結果を配列として指定した変数に格納します。後続のノードはその変数から結果を読めます。

クエリには $1、$2 のようなプレースホルダを書けます。実際の値は SQL Type Arguments で別に設定するので、値を SQL 文字列に連結する必要はありません。

  1. プロパティ​

    ノードのプロパティパネルです。Data Source、SQL、ResultField の 3 つは必須で、未入力のうちは赤枠で表示されます。

    SQL ノードのプロパティパネル。Data Source、SQL、ResultField がまだ赤枠の状態

    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 のペアです。

    + を押すと引数が 1 組現れ、上に Type のドロップダウン、下に Value のエディタが表示される

    Type はドロップダウンで、選択肢は 4 つです。

    Type のドロップダウンが開き、String、Integer、Number、Boolean が並んでいる

    Value はエディタで、既定は Expression モードです。左上の fx で値の取得方法を切り替えられます。詳しくは Expression の紹介 を参照してください。

    引数は追加した順に対応します。1 組目が $1、2 組目が $2、以下同様です。

  2. 実際の例​

    ある店舗で在庫が少ない商品を取り出します。$1 は店舗コード(文字列)、$2 は取得件数(整数)で、2 つの引数がそれぞれ違う Type を使います。

    入力後のパネル:

    入力後のパネル。Data Source は Retail DW (RDS)、SQL エディタにクエリ、ResultField は low_stock
    項目値
    Data SourceRetail DW (RDS)
    SQLSELECT sku, sku_name, on_hand, safety_stock FROM retail_dw.pos_store_inventory WHERE store_id = $1 ORDER BY on_hand ASC LIMIT $2
    ResultFieldlow_stock
    引数 1Type String、Value S-001
    引数 2Type Integer、Value 5

    実行すると low_stock には次の 5 行が入ります。

    skusku_nameon_handsafety_stock
    SKU-8801聯名鈦保溫瓶 500ml640
    SKU-1227經典陶瓷馬克杯 350ml 森綠1612
    SKU-1241矽膠料理鏟 二入 象牙白1912
    SKU-1000方格筆記本 A6 黑2016
    SKU-1067不鏽鋼瀝水籃 16cm 象牙白2112

    後続ノードは low_stock でこの配列を受け取ります。たとえば Router で low_stock.length > 0 を判定し、補充通知を出すかどうかを分岐できます。

  3. 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 組目は存在しないのと同じです。

  4. 接続関係​

    Success​

    クエリが成功したときに進みます。結果は ResultField で指定した変数に格納され、後続ノードからそのまま使えます。

    Failure​

    クエリが失敗したときに進み、詳細は prevError に入ります。接続失敗、SQL の構文エラー、引数の型不一致はいずれもここに来るので、この分岐は繋いでおくことを勧めます。

  5. 読み取り専用で、書き込みはできない​

    実行前に、プラットフォームは SQL を parse して読み取り専用クエリかどうかを確認します。読み取り専用でなければ実行されず、SQL query is not a read-only query として Failure に進みます。

    そのため UPDATE、INSERT、DELETE はこの processor では動きません。この制限を外すスイッチ(allowWrite)はプロパティパネルになく、ワークフロー作成者が設定するものではありません。プラットフォーム側の設定です。同じ設定群にテーブルの許可リスト(allowedTables)もあり、設定されている場合はリスト外のテーブルに触れるクエリが SQL query references unauthorized tables として Failure に進みます。

  6. 注意事項​

    • この processor はページングも件数制限もしません。SQL が返した行数がそのまま変数に入ります。大きなテーブルでは自分で LIMIT を付けてください。
    • 引数の Type の選び間違いは保存時には弾かれません。実行時に Failure になります。
    • データベースに IP 制限がある場合は、Asgard プラットフォームの送信元 IP を許可リストに追加してください。VPN ホワイトリスト IP を参照。

始める準備はできましたか?

Asgard をチームでどう活用できるか、お気軽にご相談ください。

お問い合わせ