配置for-each節(jié)點(diǎn)
DataWorks為您提供遍歷節(jié)點(diǎn)(for-each節(jié)點(diǎn)),您可以通過(guò)for-each節(jié)點(diǎn)來(lái)循環(huán)遍歷賦值節(jié)點(diǎn)傳遞的結(jié)果集。同時(shí)您也可以重新編排for-each節(jié)點(diǎn)內(nèi)部的業(yè)務(wù)流程。本文以一個(gè)具體示例,通過(guò)for-each節(jié)點(diǎn)2次循環(huán)遍歷賦值節(jié)點(diǎn)輸出結(jié)果,并在每次循環(huán)遍歷時(shí)打印當(dāng)前循環(huán)次數(shù),為您介紹for-each節(jié)點(diǎn)的邏輯原理與操作流程。
前提條件
在配置節(jié)點(diǎn)前,請(qǐng)先了解相關(guān)介紹,避免任務(wù)配置過(guò)程出錯(cuò)。詳情請(qǐng)參見(jiàn)for-each節(jié)點(diǎn)邏輯原理介紹。
操作流程
使用遍歷節(jié)點(diǎn)時(shí),通常與賦值節(jié)點(diǎn)一起使用,操作流程如下所示。
設(shè)置節(jié)點(diǎn)依賴關(guān)系
for-each遍歷節(jié)點(diǎn)需要依賴賦值節(jié)點(diǎn)。配置詳情可參考文檔:創(chuàng)建和配置業(yè)務(wù)流程。
賦值結(jié)果集
賦值節(jié)點(diǎn)自帶的節(jié)點(diǎn)上下文輸出參數(shù)outputs,需作為for-each遍歷節(jié)點(diǎn)的節(jié)點(diǎn)上下文輸入?yún)?shù)。配置詳情可參考文檔:配置賦值節(jié)點(diǎn)。
遍歷節(jié)點(diǎn)的內(nèi)部節(jié)點(diǎn)獲取參數(shù)
根據(jù)業(yè)務(wù)需求自定義for-each遍歷節(jié)點(diǎn)的內(nèi)部業(yè)務(wù)流程,并在內(nèi)部流程的節(jié)點(diǎn)中通過(guò)內(nèi)置變量來(lái)獲取所需參數(shù)值,運(yùn)行循環(huán)遍歷任務(wù)。內(nèi)置變量的詳情請(qǐng)參見(jiàn)內(nèi)置變量,配置詳情請(qǐng)參見(jiàn)配置for-each節(jié)點(diǎn)。
遍歷節(jié)點(diǎn)不支持在DataStudio測(cè)試
請(qǐng)進(jìn)入運(yùn)維中心操作,需要右鍵查看內(nèi)部節(jié)點(diǎn)來(lái)查看詳細(xì)執(zhí)行過(guò)程。詳情請(qǐng)參見(jiàn)測(cè)試并查看測(cè)試結(jié)果。
說(shuō)明在運(yùn)維中心執(zhí)行任務(wù)時(shí),選擇補(bǔ)數(shù)據(jù)功能,并同時(shí)選中執(zhí)行賦值節(jié)點(diǎn)與遍歷節(jié)點(diǎn),單獨(dú)運(yùn)行遍歷節(jié)點(diǎn)將無(wú)法獲取到賦值節(jié)點(diǎn)傳遞的值。
創(chuàng)建和配置業(yè)務(wù)流程
您需要?jiǎng)?chuàng)建一個(gè)上游為賦值節(jié)點(diǎn),下游為for-each節(jié)點(diǎn)的業(yè)務(wù)流程:
進(jìn)入數(shù)據(jù)開(kāi)發(fā)頁(yè)面。
登錄DataWorks控制臺(tái),切換至目標(biāo)地域后,單擊左側(cè)導(dǎo)航欄的 ,在下拉框中選擇對(duì)應(yīng)工作空間后單擊進(jìn)入數(shù)據(jù)開(kāi)發(fā)。
創(chuàng)建for-each節(jié)點(diǎn)。
鼠標(biāo)懸停至圖標(biāo),單擊
。您也可以找到相應(yīng)的業(yè)務(wù)流程,右鍵單擊通用,選擇
。在新建節(jié)點(diǎn)對(duì)話框中,輸入節(jié)點(diǎn)名稱、路徑等信息。
單擊確認(rèn)。
創(chuàng)建賦值節(jié)點(diǎn)。
雙擊業(yè)務(wù)流程,進(jìn)入業(yè)務(wù)流程的編輯頁(yè)面,單擊+新建節(jié)點(diǎn),將
拖拽至右側(cè)的編輯區(qū)域。賦值節(jié)點(diǎn)的介紹請(qǐng)參見(jiàn)賦值節(jié)點(diǎn)。
在新建節(jié)點(diǎn)對(duì)話框中,輸入節(jié)點(diǎn)名稱、路徑(默認(rèn)在當(dāng)前業(yè)務(wù)流程目錄下)。
單擊確認(rèn)。
通過(guò)拖拽連線,設(shè)置賦值節(jié)點(diǎn)為for-each節(jié)點(diǎn)的上游節(jié)點(diǎn)。
配置賦值節(jié)點(diǎn)
雙擊賦值節(jié)點(diǎn)名稱,進(jìn)入節(jié)點(diǎn)的編輯頁(yè)面。
從請(qǐng)選擇賦值語(yǔ)言列表中,選中SHELL。
在節(jié)點(diǎn)編輯頁(yè)面,輸入以下語(yǔ)句。
echo 'this is name,ok';
單擊節(jié)點(diǎn)編輯頁(yè)面右側(cè)的調(diào)度配置,在
區(qū)域查看默認(rèn)輸出的outputs參數(shù)。單擊工具欄中的圖標(biāo),保存賦值節(jié)點(diǎn)。
單擊工具欄中的圖標(biāo),提交賦值節(jié)點(diǎn)。
提交時(shí)需在提交對(duì)話框中輸入變更描述,并根據(jù)需要選擇是否在節(jié)點(diǎn)提交后執(zhí)行代碼評(píng)審。
重要您需要設(shè)置節(jié)點(diǎn)的重跑屬性和依賴的上游節(jié)點(diǎn),才可以提交節(jié)點(diǎn)。
代碼評(píng)審可對(duì)任務(wù)的代碼質(zhì)量進(jìn)行把控,防止由于任務(wù)代碼有誤,未經(jīng)審核直接發(fā)布上線后出現(xiàn)任務(wù)報(bào)錯(cuò)。如進(jìn)行代碼評(píng)審,則提交的節(jié)點(diǎn)代碼必須通過(guò)評(píng)審人員的審核才可發(fā)布,詳情請(qǐng)參見(jiàn)代碼評(píng)審。
如您使用的是標(biāo)準(zhǔn)模式的工作空間,任務(wù)提交成功后,需單擊節(jié)點(diǎn)編輯頁(yè)面右上方的發(fā)布,將該任務(wù)發(fā)布至生產(chǎn)環(huán)境執(zhí)行,操作請(qǐng)參見(jiàn)發(fā)布任務(wù)。
配置for-each節(jié)點(diǎn)
雙擊for-each節(jié)點(diǎn),進(jìn)入節(jié)點(diǎn)編輯頁(yè)面,默認(rèn)包含start、shell和end三個(gè)節(jié)點(diǎn)。
您可根據(jù)需求,替換Shell節(jié)點(diǎn)為其他節(jié)點(diǎn):
如需使用Shell節(jié)點(diǎn),則直接配置Shell節(jié)點(diǎn)即可。
如果您需要使用其它類型的節(jié)點(diǎn),請(qǐng)先刪除默認(rèn)的Shell節(jié)點(diǎn),再創(chuàng)建其他類型節(jié)點(diǎn)。
本文示例使用Shell節(jié)點(diǎn)。
編輯Shell節(jié)點(diǎn)。
雙擊Shell節(jié)點(diǎn),進(jìn)入節(jié)點(diǎn)編輯頁(yè)面。
輸入以下代碼。
echo ${dag.loopTimes} ----打印循環(huán)的次數(shù)。
說(shuō)明for-each節(jié)點(diǎn)的start節(jié)點(diǎn)和end節(jié)點(diǎn)的邏輯是固定的,不可以編輯。
Shell節(jié)點(diǎn)中的代碼修改后請(qǐng)務(wù)必保存,提交時(shí)不會(huì)進(jìn)行提示。如果未保存,最新的代碼不能及時(shí)更新。
for-each節(jié)點(diǎn)支持以下四種環(huán)境變量:
${dag.foreach.current}:當(dāng)前遍歷到的數(shù)據(jù)行。
${dag.loopDataArray}:輸入的數(shù)據(jù)集。
${dag.offset}:偏移量。
${dag.loopTimes}:當(dāng)前循環(huán)次數(shù),值為${dag.offset}+1。
變量詳情請(qǐng)參見(jiàn)內(nèi)置變量和內(nèi)置變量取值案例。
配置for-each節(jié)點(diǎn)。
在for-each節(jié)點(diǎn)的編輯頁(yè)面,單擊右側(cè)的調(diào)度配置。
在
區(qū)域,單擊默認(rèn)參數(shù)名loopDataArray后的編輯。從取值來(lái)源列表中,選擇上游賦值節(jié)點(diǎn)的outputs參數(shù),單擊保存。
說(shuō)明您在調(diào)度配置中添加上游賦值節(jié)點(diǎn)的依賴關(guān)系后,請(qǐng)手動(dòng)添加取值來(lái)源。如果未添加取值來(lái)源,提交節(jié)點(diǎn)時(shí)會(huì)報(bào)錯(cuò)。
單擊工具欄的圖標(biāo),保存for-each節(jié)點(diǎn)。
單擊工具欄的圖標(biāo),提交for-each節(jié)點(diǎn)。
重要您需要設(shè)置節(jié)點(diǎn)的重跑屬性和依賴的上游節(jié)點(diǎn),才可以提交節(jié)點(diǎn)。
在提交對(duì)話框中,選中需要提交的節(jié)點(diǎn),單擊確定。
如果您使用的是標(biāo)準(zhǔn)模式的工作空間,提交成功后,請(qǐng)單擊右上方的發(fā)布。具體操作請(qǐng)參見(jiàn)發(fā)布任務(wù)。
測(cè)試并查看測(cè)試結(jié)果
單擊頁(yè)面右上方的運(yùn)維,進(jìn)入運(yùn)維中心。
在左側(cè)導(dǎo)航欄,單擊
。選中相應(yīng)的節(jié)點(diǎn),在右側(cè)的DAG圖中,右鍵單擊賦值節(jié)點(diǎn),選中
。刷新補(bǔ)數(shù)據(jù)實(shí)例頁(yè)面,待補(bǔ)數(shù)據(jù)實(shí)例運(yùn)行成功后,單擊實(shí)例后的DAG圖。
右鍵單擊賦值節(jié)點(diǎn),選中查看運(yùn)行日志,確認(rèn)賦值結(jié)果。
在補(bǔ)數(shù)據(jù)實(shí)例頁(yè)面,右鍵單擊遍歷節(jié)點(diǎn),選中查看內(nèi)部節(jié)點(diǎn)。
在內(nèi)部節(jié)點(diǎn)頁(yè)面,單擊左側(cè)的第1次,并右鍵單擊Shell節(jié)點(diǎn),選中查看運(yùn)行日志。
在運(yùn)行日志頁(yè)面,查看第1次循環(huán)時(shí),Shell節(jié)點(diǎn)的日志。
以同樣的方式,查看第2次循環(huán)時(shí),Shell節(jié)點(diǎn)的日志。