當您需要將上遊節點任務的查詢或輸出結果提供給下遊節點使用時,可通過賦值節點實現。賦值節點支援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。
配置下遊節點。
雙擊開啟下遊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節點。
測試擷取的賦值節點結果集
下遊節點引用賦值節點結果集後,您可將下遊節點及賦值節點提交至開發環境,並進入開發環境營運中心執行補資料操作,測試下遊節點擷取的賦值節點結果集資料是否正確。