跳至主要内容

REFERENCE

開發者參考

認證、API、SDK、Flow Agent 處理節點與參數取值的完整參考。

SQL

對資料庫執行一段 SQL,把結果存成變數給後面的節點用。支援參數化查詢。

SQL processor 用你在專案裡設定好的資料來源連上資料庫,執行一段 SQL,把結果以陣列存進指定的變數,後面的節點就能取用。

查詢語句可以帶 $1、$2 這樣的參數佔位符,實際的值另外在 SQL Type Arguments 裡設定,不用把值串進 SQL 字串裡。

  1. 屬性​

    節點的屬性面板長這樣。Data Source、SQL、ResultField 三個是必填,未填時欄位會顯示紅框:

    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。結果一律是陣列,就算只有一列也是。

    SQL Type Arguments​

    對應 SQL 裡佔位符的實際值。這一區預設是空的,按綠色 + 加一組,每組是一個 Type 加一個 Value:

    按下 + 之後長出一組參數,上面是 Type 下拉,下面是 Value 編輯器

    Type 是下拉選單,四個選項:

    Type 下拉展開,選項是 String、Integer、Number、Boolean

    Value 是編輯器,預設是 Expression 模式,可以用左上角的 fx 切換取值方式,詳見 Expression 介紹。

    參數的順序就是加入的順序:第一組對應 $1,第二組對應 $2,依此類推。

  2. 一個實際的例子​

    查某間門市庫存最低的幾個品項。$1 是門市代號(字串),$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 裡是這五列:

    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 各對應一個 key;SQL Type Arguments 那一區則是每組參數兩個 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 都要寫。Processor 從 1 往上找,一碰到缺號、或某一號少了 type 或 value,就停在那裡,後面的參數全部被丟掉,而且不會報錯。跳號寫成 1、3 的話,第 3 組等於沒有。

  4. 連接關係​

    Success​

    查詢成功時走這條。結果存進 ResultField 指定的變數,後面的節點可以直接用。

    Failure​

    查詢失敗時走這條,錯誤資訊會放在 prevError。連線失敗、SQL 語法錯誤、參數型別對不上都會走到這裡,建議一定要接。

  5. 只能查,不能寫​

    執行之前,平台會先把你的 SQL 拿去 parse 一次,確認它是唯讀查詢。不是唯讀就不執行,直接走 Failure,錯誤訊息是 SQL query is not a read-only query。

    所以 UPDATE、INSERT、DELETE 這類語句在這個 processor 上是跑不動的。放寬這個限制的開關(allowWrite)不在屬性面板上,也不是流程作者能自己打開的,由平台端設定。同一組設定裡還有一個資料表白名單(allowedTables),設了之後查詢碰到清單外的表會走 Failure,訊息是 SQL query references unauthorized tables。

  6. 注意事項​

    • 這個 processor 不做分頁,也不限制回傳筆數,SQL 回幾列就存幾列進變數。大表記得自己加 LIMIT。
    • 參數的 Type 選錯不會在存檔時被擋下來,會在執行時變成 Failure。
    • 資料庫如果有 IP 限制,要把 Asgard 平台的來源 IP 加進允許清單,詳見 VPN 白名單 IP。

準備好開始了嗎?

想知道 Asgard 怎麼用在你的團隊?跟我們聊聊。

聯絡我們