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值)

2.下遊使用for-each節點,for-each節點實際業務節點為sql節點:
for-each節點需要引用上遊指派節點的傳出值(配置如下):
3.業務邏輯部分:建立新分區表并寫入對應資料,循環三次寫入三個分區:
--列印出實際接收到的資料
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節點循環次數由一維數組的元素個數控制。
釋出運作任務,看下實際結果:
指派節點:
for-each内部節點:(資料已被替換)
DataWorks百問百答曆史記錄
請點選這裡檢視>>更多DataWorks技術和産品資訊,歡迎加入
【DataWorks釘釘交流群】