天天看點

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

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

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

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

for-each節點需要引用上遊指派節點的傳出值(配置如下):

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

3.業務邏輯部分:建立新分區表并寫入對應資料,循環三次寫入三個分區:

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

--列印出實際接收到的資料

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節點循環次數由一維數組的元素個數控制。

釋出運作任務,看下實際結果:

指派節點:

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

for-each内部節點:(資料已被替換)

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

DataWorks百問百答曆史記錄

請點選這裡檢視>>

更多DataWorks技術和産品資訊,歡迎加入

【DataWorks釘釘交流群】