開發與維運

DataWorks百問百答27:for-each節點sql樣例如何使用?

for-each節點作用:可實現將業務邏輯循環執行數次,並且將相關重要參數根鬚業務需求進行替換的功能。
限制:

  • DataWorks標準版及以上版本,才可以使用for-each節點功能。
  • for-each節點最多可以循環128次,一旦超過便會報錯。

詳細介紹參見鏈接:https://help.aliyun.com/document_detail/137529.html?spm=a2c4g.11174283.6.779.5d822b65wrPtVr

下面講下for-each節點使用sql業務替換執行的案例情況:(不僅侷限於sql、shell,其他類型節點亦支持替換,請根據業務場景進行評選替換、延伸等{sql->shell->分支節點等等})

業務場景:因業務需要,重新整合2020年1月1號、2號、3號的業務數據,重新歸納到一張新報表的三個天分區中。分區已經確定為 2020-01-01,2020-01-02,2020-01-03三個分區。(順序執行循環三次依次寫入對應分區)
執行流程:
1.上游使用賦值節點傳出三個分區值,賦值語言選擇shell,直接輸出這三個分區值(下游for-each節點接入參數會以以為數組形式接收改echo值)

1-529.png

2.下游使用for-each節點,for-each節點實際業務節點為sql節點:

2-529.png

for-each節點需要引用上游賦值節點的傳出值(配置如下):
3-529.png

3.業務邏輯部分:創建新分區表並寫入對應數據,循環三次寫入三個分區:

4-529.png

--打印出實際接收到的數據
SELECT '${dag.loopDataArray[${dag.offset}]}'
;
--建分區表
CREATE TABLE IF NOT EXISTS yewubaobiao_2020
(
id BIGINT
,name STRING
,other STRING
)
PARTITIONED BY
(
dt STRING
)
;
--篩選數據(請根據實際業務邏輯編寫sql)
INSERT OVERWRITE TABLE yewubaobiao_2020 PARTITION(dt='${dag.loopDataArray[${dag.offset}]}')
SELECT id
,name
,other
FROM wpw_table1
WHERE dt = '${dag.loopDataArray[${dag.offset}]}'
;

解釋說明:
示例中用到了兩個系統參數。

  • ${dag.loopDataArray}:輸入的數據集。(即上游賦值節點輸入下來的一維數據形式值)
  • ${dag.offset}:偏移量。(從0開始,這裡剛好可以用作一維數組的index下標)

for-each節點支持的系統參數可在對應文檔中查找。

**循環次數是有什麼控制的?
這裡for-each節點循環次數由一維數組的元素個數控制。

發佈運行任務,看下實際結果:
賦值節點:

5-529.png

for-each內部節點:(數據已被替換)

6-529.png

DataWorks百問百答歷史記錄 請點擊這裡查看>>

更多DataWorks技術和產品信息,歡迎加入【DataWorks釘釘交流群】

Leave a Reply

Your email address will not be published. Required fields are marked *