當您需要將上游節點任務的查詢或輸出結果提供給下游節點使用時,可通過賦值節點實現。賦值節點支持ODPS SQL、SHELL和Python三種賦值語言,將節點最后一條查詢或輸出結果自動賦值給節點自帶的輸出參數(outputs),便于賦值節點的下游節點引用。您可結合節點上下文配置,參考本文使用賦值節點。
注意事項
賦值節點功能說明
賦值節點參數傳遞只支持傳遞給一層子節點,不支持跨節點傳遞。
賦值節點只能將最后一條查詢或輸出結果通過自帶輸出參數傳遞給下游。
賦值節點的Python賦值語言使用的Python版本為Python 2.0。
賦值節點代碼中不支持添加注釋,添加注釋可能導致運行結果有誤。
賦值節點版本及賦值參數說明
為避免下游節點無法獲取賦值節點的結果集,賦值節點及其下游節點配置完成后,請統一運行節點所在的業務流程。
本實驗中的,您可通過ETL工作流模板快速體驗本案例賦值節點參數的傳遞能力。
僅空間管理員角色可導入ETL模板至目標工作空間,為賬號授權空間管理員角色詳情請參見空間級模塊權限管控。
導入ETL工作流模板,詳情請參見導入ETL工作流模板。
ETL工作流模板快捷入口,請點擊賦值節點應用。
原理介紹
在DataWorks中,節點上下文參數可實現節點參數的上下游傳遞,賦值節點在此基礎上,可將賦值節點最后一條查詢結果傳遞給自帶的輸出參數(outputs),若下游節點依賴了賦值節點,則下游節點可通過添加輸入參數的方式,在節點代碼中獲取賦值節點輸出參數(outputs)的結果集(即上游賦值節點的查詢結果)。
賦值節點自帶的輸出參數(outputs)不可修改,outputs取值由賦值節點最后一條查詢或輸出結果決定。
賦值節點下游獲取賦值節點結果集(outputs)時,需要先直接依賴賦值節點(即賦值節點為下游節點的一層父節點),并在節點輸入參數處添加賦值節點結果集。您可自定義賦值節點結果集在下游節點的參數名稱,例如上圖中命名為sql_inputs。
不同賦值語言的賦值節點,其結果集格式存在差異。賦值節點下游獲取賦值節點結果集outputs時,需要根據outputs具體情況,以${參數名}的格式,使用一維數組或二維數組的方式在代碼中獲取賦值節點傳遞的結果集、或結果集中的指定數據。
賦值節點使用流程
配置賦值節點:定義outputs結果集。此階段您需要選擇賦值語言,以及確定最后一條查詢或輸出結果。
配置上下游依賴:獲取賦值節點結果集的下游節點需提前依賴該賦值節點。
下游引用賦值節點結果集:下游節點可通過
方式獲取賦值節點結果集,并通過${參數名}的方式在代碼中獲取賦值節點結果集。若要獲取結果集中的指定數據,您需根據賦值節點的賦值語言,通過一維數組或二維數組的方式獲取。調試運行任務:您可運行業務流程,查看引用結果是否符合預期。
測試獲取的賦值節點結果集:下游節點引用賦值節點結果集后,您可提交下游節點及賦值節點至開發環境運維中心測試引用結果是否正確。
賦值節點創建入口
進入數據開發頁面。
登錄DataWorks控制臺,切換至目標地域后,單擊左側導航欄的 ,在下拉框中選擇對應工作空間后單擊進入數據開發。
進入節點創建入口。
在數據開發頁面基于具體業務流程創建節點,并根據界面指引配置節點的名稱、路徑等基本信息。創建入口如下圖。
本示例中新建3個不同語言的賦值節點(Python、ODPS SQL和SHELL),節點名稱分別為fuzhi_python、fuzhi_sql、fuzhi_shell。
使用賦值節點時,不同賦值語言,其賦值參數(outputs)輸出格式存在差異,詳情請參見賦值節點輸出格式。
此外,您可根據實際需要配置各節點調度配置中的基礎屬性、時間屬性、資源屬性,詳情可參見配置基礎屬性、時間屬性配置說明、配置資源屬性。
賦值節點輸出格式
賦值節點支持ODPS SQL、SHELL和Python三種賦值語言,使用不同賦值語言時,賦值節點的參數(outputs)輸出格式不同,下游節點需要根據outputs的具體情況,以${參數名}的格式,使用一維數組或二維數組的方式在代碼中獲取賦值節點傳遞的結果集、或結果集中的指定數據。
賦值語言 | outputs參數取值 | outputs參數格式 | outputs參數大小限制 |
ODPS SQL | 最后一行SELECT語句的輸出作為賦值參數,添加為賦值節點的本節點輸出參數,供其他節點引用。 | 將輸出結果作為一個二維數組傳遞至下游。 | 傳遞值最大為2MB。如果賦值語句的輸出結果超過該限制,賦值節點會運行失敗。 |
SHELL | 最后一行ECHO語句的數據,添加為賦值節點的本節點輸出參數,供其他節點引用。 | 將輸出結果基于逗號(,)分割為一維數組。 | |
Python | 最后一行PRINT語句的輸出,添加為賦值節點的本節點輸出參數,供其他節點引用。 | 將輸出結果基于逗號(,)分割為一維數組。 |
下游獲取賦值節點結果集:應用示例一
本示例中,直接通過拉線,將start節點作為所有賦值節點的上游節點,down_compare節點作為所有賦值節點的下游節點,其中down_compare節點為Shell節點,以${參數名}的格式,使用一維數組或二維數組的方式,通過Shell節點分別輸出上游賦值語言分別為ODPS SQL(fuzhi_sql)、Python(fuzhi_python)、SHELL(fuzhi_shell)的結果集與結果集中的指定數據。
賦值節點(fuzhi_python、fuzhi_sql、fuzhi_shell):自帶輸出參數outputs。
下游節點(down_compare):下游節點設置賦值節點依賴關系后,將待引用的賦值參數添加為
,參數名可自定義。
具體過程請參照下文。
ODPS SQL賦值語言
以下以配置賦值語言為ODPS_SQL的賦值節點,并在down_compare節點中引用賦值參數為例,為您示意如何操作。
配置上游賦值節點。
在相應的業務流程下,雙擊打開賦值語言為ODPS SQL的賦值節點fuzhi_sql。
在代碼編輯頁面,選擇賦值語言為ODPS_SQL,寫入賦值代碼。
示例如下。
select * from xc_dpe_e2.xc_rpt_user_info_d where dt='20191008' limit 10;
單擊頁面右側的調度配置,查看節點上下文中的本節點輸出參數。
賦值節點將代碼的查詢結果作為節點輸出,賦值給賦值節點自帶的輸出參數outputs。
本示例賦值節點的查詢結果如下。則此查詢結果作為一個二維數組,賦值給本節點輸出參數中的outputs參數。
配置下游節點。
雙擊打開下游Shell節點down_compare。
在代碼開發頁面編寫代碼。
示例如下。
echo '${sql_inputs}'; echo '取上游sql節點輸出第1行數據'${sql_inputs[0]}; echo '取上游sql節點輸出第2行數據'${sql_inputs[1]}; echo '取上游sql節點輸出第1行第2個字段'${sql_inputs[0][1]}; echo '取上游sql節點輸出第2行第3個字段'${sql_inputs[1][2]};
單擊頁面右側的調度配置,配置節點上下文中的本節點輸入參數。
將fuzhi_sql節點的outputs參數添加為本節點輸入參數,并命名為sql_inputs。
示例返回的引用結果如下。
Python賦值語言
以下以配置賦值語言為Python的賦值節點,并在down_compare節點中引用賦值參數為例,為您示意如何操作。
配置上游賦值節點。
在相應的業務流程下,雙擊打開賦值語言為Python的上游節點fuzhi_python。
在代碼編輯頁面,選擇賦值語言為Python,寫入賦值代碼。
例如:
print "a,b,c";
單擊頁面右側的調度配置,查看節點上下文中的本節點輸出參數。
賦值節點將代碼的查詢結果作為節點輸出,賦值給賦值節點自帶的輸出參數outputs。本示例的查詢結果為a,b,c。
賦值語言為Python時,查詢結果將基于逗號(,)分割為一維數組,賦值給本節點輸出參數中的outputs參數。
配置下游節點。
雙擊打開下游Shell節點down_compare。
在代碼開發頁面編寫代碼。
例如:
echo '這是上游python節點的輸出'${python_inputs}; echo '取上游python節點輸出的第1個數據'${python_inputs[0]}; echo '取上游python節點輸出的第2個數據'${python_inputs[1]};
單擊頁面右側的調度配置,配置節點上下文中的本節點輸入參數。
將fuzhi_python節點的outputs參數添加為本節點輸入參數,并命名為python_inputs。
示例返回的引用結果如下。
SHELL賦值語言
以下以配置賦值語言為SHELL的賦值節點,并在down_compare節點中引用賦值參數為例,為您示意如何操作。
配置上游賦值節點。
在相應的業務流程下,雙擊打開賦值語言為SHELL的上游節點fuzhi_shell。
在代碼編輯頁面,選擇賦值語言為SHELL,寫入賦值代碼。
例如:
echo "hello,world";
單擊頁面右側的調度配置,查看節點上下文中的本節點輸出參數。
賦值節點將代碼的查詢結果作為節點輸出,賦值給賦值節點自帶的輸出參數outputs。本示例的查詢結果為hello,world。
賦值語言為SHELL時,查詢結果將基于逗號(,)分割為一維數組,賦值給本節點輸出參數中的outputs參數。
配置下游節點。
雙擊打開下游Shell節點down_compare。
在代碼開發頁面編寫代碼。
例如:
echo '這是上游shell節點的輸出'${shell_inputs}; echo '取上游shell節點輸出的第1個數據'${shell_inputs[0]}; echo '取上游shell節點輸出的第2個數據'${shell_inputs[1]};
單擊頁面右側的調度配置,配置節點上下文中的本節點輸入參數。
將fuzhi_shell節點的outputs參數添加為本節點輸入參數,并命名為shell_inputs。
示例返回的引用結果如下。
下游獲取賦值節點結果集:應用示例二
不同語言的賦值參數(output)使用示例如下。
賦值語言 | outputs取值示例 | 賦值節點調度配置 | 下游節點調度配置 | 下游節點取值方式 | 下游節點返回結果 |
ODPS SQL | 示例查看fuzhi_tb表。
|
配置節點上下文,詳情請參見配置節點上下文。 | 以上游賦值節點使用的賦值語言為ODPS SQL示例。 | 不同類型的下游節點取值如下:
| Hello |
SHELL | 示例語句為: | Data | |||
Python | 示例語句為: | Works! |
調試運行任務
下游獲取賦值節點結果集后,您可雙擊業務流程名稱,在業務流程編輯頁面單擊工具欄的圖標,運行業務流程,查看引用結果是否正確。
若賦值節點的下游是遍歷節點(for-each節點)或循環節點(do-while節點),則您需前往運維中心執行相應任務,查看引用結果。
賦值節點結合遍歷節點或循環節點使用的最佳實踐,請參見配置使用for-each節點、配置使用do-while節點。
測試獲取的賦值節點結果集
下游節點引用賦值節點結果集后,您可將下游節點及賦值節點提交至開發環境,并進入開發環境運維中心執行補數據操作,測試下游節點獲取的賦值節點結果集數據是否正確。