全部產品
Search
文件中心

DataWorks:賦值節點

更新時間:Jun 19, 2024

當您需要將上遊節點任務的查詢或輸出結果提供給下遊節點使用時,可通過賦值節點實現。賦值節點支援ODPS SQL、SHELL和Python三種賦值語言,將節點最後一條查詢或輸出結果自動賦值給節點內建的輸出參數(outputs),便於賦值節點的下遊節點引用。您可結合節點上下文配置,參考本文使用賦值節點。

注意事項

  • 賦值節點功能說明

    • 賦值節點參數傳遞只支援傳遞給一層子節點,不支援跨節點傳遞。

    • 賦值節點只能將最後一條查詢或輸出結果通過內建輸出參數傳遞給下遊。

    • 賦值節點的Python賦值語言使用的Python版本為Python 2.0。

    • 賦值節點代碼中不支援添加註釋,添加註釋可能導致運行結果有誤。

  • 賦值節點版本及賦值參數說明

    • 部分節點可通過節點上下文中的賦值參數,達到與賦值節點相同的目的(例如,EMR Hive、EMR Spark SQL、ODPS Script、Hologres SQL、AnalyticDB for PostgreSQL和MySQL節點),賦值參數的使用與賦值節點一致,添加賦值參數的操作,詳情請參見配置節點上下文

    • 僅標準版及以上版本的DataWorks,才可使用賦值節點,以及在上述節點中使用賦值參數功能。購買DataWorks,請參見購買指引

  • 為避免下遊節點無法擷取賦值節點的結果集,賦值節點及其下遊節點配置完成後,請統一運行節點所在的商務程序。

    • 調試運行任務,請參見調試運行任務

    • 下遊節點引用賦值節點結果集後,您可提交下遊節點及賦值節點至開發環境營運中心,測試引用結果是否正確。詳情請參見測試賦值節點結果集

      說明

      依賴賦值節點的下遊節點均可擷取賦值節點的查詢結果(即結果集),無節點類型限制。本文主要以ODPS SQL 節點、以及Shell節點為例,為您介紹下遊節點如何擷取賦值節點的輸出結果。

  • 本實驗中的,您可通過ETL工作流程範本快速體驗本案例賦值節點參數的傳遞能力。

原理介紹

在DataWorks中,節點上下文參數可實現節點參數的上下遊傳遞,賦值節點在此基礎上,可將賦值節點最後一條查詢結果傳遞給內建的輸出參數(outputs),若下遊節點依賴了賦值節點,則下遊節點可通過添加輸入參數的方式,在節點代碼中擷取賦值節點輸出參數(outputs)的結果集(即上遊賦值節點的查詢結果)。image.png

  • 賦值節點內建的輸出參數(outputs)不可修改,outputs取值由賦值節點最後一條查詢或輸出結果決定。

  • 賦值節點下遊擷取賦值節點結果集(outputs)時,需要先直接依賴賦值節點(即賦值節點為下遊節點的一層父節點),並在節點輸入參數處添加賦值節點結果集。您可自訂賦值節點結果集在下遊節點的參數名稱,例如上圖中命名為sql_inputs。

  • 不同賦值語言的賦值節點,其結果集格式存在差異。賦值節點下遊擷取賦值節點結果集outputs時,需要根據outputs具體情況,以${參數名}的格式,使用一維數組二維數組的方式在代碼中擷取賦值節點傳遞的結果集、或結果集中的指定資料。

賦值節點使用流程

  1. 配置賦值節點:定義outputs結果集。此階段您需要選擇賦值語言,以及確定最後一條查詢或輸出結果。

  2. 配置上下遊依賴:擷取賦值節點結果集的下遊節點需提前依賴該賦值節點。

  3. 下遊引用賦值節點結果集:下遊節點可通過節點上下文 > 添加節點輸入參數方式擷取賦值節點結果集,並通過${參數名}的方式在代碼中擷取賦值節點結果集。若要擷取結果集中的指定資料,您需根據賦值節點的賦值語言,通過一維數組或二維數組的方式擷取。

  4. 調試運行任務:您可運行商務程序,查看引用結果是否符合預期。

  5. 測試擷取的賦值節點結果集:下遊節點引用賦值節點結果集後,您可提交下遊節點及賦值節點至開發環境營運中心測試引用結果是否正確。

賦值節點建立入口

  1. 進入資料開發頁面。

    登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的資料建模與開發 > 資料開發,在下拉框中選擇對應工作空間後單擊進入資料開發

  2. 進入節點建立入口。

    在資料開發頁面基於具體商務程序建立節點,並根據介面指引配置節點的名稱、路徑等基本資料。建立入口如下圖。

    本樣本中建立3個不同語言的賦值節點(Python、ODPS SQL和SHELL),節點名稱分別為fuzhi_python、fuzhi_sql、fuzhi_shell。

    image.png

    使用賦值節點時,不同賦值語言,其賦值參數(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節點中引用賦值參數為例,為您示意如何操作。

  1. 配置上遊賦值節點。

    1. 在相應的商務程序下,雙擊開啟賦值語言為ODPS SQL的賦值節點fuzhi_sql

    2. 在代碼編輯頁面,選擇賦值語言為ODPS_SQL,寫入賦值代碼。

      樣本如下。

      select * from xc_dpe_e2.xc_rpt_user_info_d  where dt='20191008' limit 10;  
    3. 單擊頁面右側的調度配置,查看節點上下文中的本節點輸出參數

      賦值節點將代碼的查詢結果作為節點輸出,賦值給賦值節點內建的輸出參數outputs

      上遊節點

  2. 配置下遊節點。

    1. 雙擊開啟下遊Shell節點down_compare

    2. 在代碼開發頁面編寫代碼。

      樣本如下。

      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]};
    3. 單擊頁面右側的調度配置,配置節點上下文中的本節點輸入參數

      將fuzhi_sql節點的outputs參數添加為本節點輸入參數,並命名為sql_inputs

  3. 調試運行任務

Python賦值語言

以下以配置賦值語言為Python的賦值節點,並在down_compare節點中引用賦值參數為例,為您示意如何操作。

  1. 配置上遊賦值節點。

    1. 在相應的商務程序下,雙擊開啟賦值語言為Python的上遊節點fuzhi_python

    2. 在代碼編輯頁面,選擇賦值語言為Python,寫入賦值代碼。

      例如:

      print "a,b,c";
    3. 單擊頁面右側的調度配置,查看節點上下文中的本節點輸出參數

      賦值節點將代碼的查詢結果作為節點輸出,賦值給賦值節點內建的輸出參數outputs。本樣本的查詢結果為a,b,cPython

      賦值語言為Python時,查詢結果將基於逗號(,)分割為一維數組,賦值給本節點輸出參數中的outputs參數。

  2. 配置下遊節點。

    1. 雙擊開啟下遊Shell節點down_compare

    2. 在代碼開發頁面編寫代碼。

      例如:

      echo '這是上遊python節點的輸出'${python_inputs};
      echo '取上遊python節點輸出的第1個資料'${python_inputs[0]};
      echo '取上遊python節點輸出的第2個資料'${python_inputs[1]};
    3. 單擊頁面右側的調度配置,配置節點上下文中的本節點輸入參數

      將fuzhi_python節點的outputs參數添加為本節點輸入參數,並命名為python_inputs

  3. 調試運行任務

SHELL賦值語言

以下以配置賦值語言為SHELL的賦值節點,並在down_compare節點中引用賦值參數為例,為您示意如何操作。

  1. 配置上遊賦值節點。

    1. 在相應的商務程序下,雙擊開啟賦值語言為SHELL的上遊節點fuzhi_shell

    2. 在代碼編輯頁面,選擇賦值語言為SHELL,寫入賦值代碼。

      例如:

      echo "hello,world";
    3. 單擊頁面右側的調度配置,查看節點上下文中的本節點輸出參數

      賦值節點將代碼的查詢結果作為節點輸出,賦值給賦值節點內建的輸出參數outputs。本樣本的查詢結果為hello,worldSHELL

      賦值語言為SHELL時,查詢結果將基於逗號(,)分割為一維數組,賦值給本節點輸出參數中的outputs參數。

  2. 配置下遊節點。

    1. 雙擊開啟下遊Shell節點down_compare

    2. 在代碼開發頁面編寫代碼。

      例如:

      echo '這是上遊shell節點的輸出'${shell_inputs};
      echo '取上遊shell節點輸出的第1個資料'${shell_inputs[0]};
      echo '取上遊shell節點輸出的第2個資料'${shell_inputs[1]};
    3. 單擊頁面右側的調度配置,配置節點上下文中的本節點輸入參數

      將fuzhi_shell節點的outputs參數添加為本節點輸入參數,並命名為shell_inputs

  3. 調試運行任務

下遊擷取賦值節點結果集:應用樣本二

不同語言的賦值參數(output)使用樣本如下。

賦值語言

outputs取值樣本

賦值節點調度配置

下遊節點調度配置

下遊節點取值方式

下遊節點返回結果

ODPS SQL

樣本查看fuzhi_tb表。

  • 查詢代碼:SELECT * FROM fuzhi_tb;

  • 顯示結果。運行結果

  1. 賦值節點的調度配置 > 節點上下文預設產生一個本節點輸出參數ouputsoutput

  2. 在節點編輯頁面,單擊提交表徵圖提交節點。

配置節點上下文,詳情請參見配置節點上下文

以上遊賦值節點使用的賦值語言為ODPS SQL樣本。

  1. 配置下遊節點依賴上遊賦值節點。調度依賴樣本配置節點調度依賴,詳情請參見配置同周期調度依賴

  2. 節點上下文添加本節點輸入參數,參數命名為inputs_odps_sql節點上下文樣本配置節點上下文,詳情請參見配置節點上下文

不同類型的下遊節點取值如下:

  • ODPS SQL:select '${inputs_odps_sql[0][0]}';

  • SHELL:echo '${inputs_shell[0]}';

  • Pyodps3:print ('${inputs_python[0]}');

Hello

SHELL

樣本語句為:echo 'Data','我是賦值節點2賦值語言shell';

Data

Python

樣本語句為:print "Works!,我是賦值節點3賦值語言是python";

Works!

調試運行任務

下遊擷取賦值節點結果集後,您可雙擊商務程序名稱,在商務程序編輯頁面單擊工具列的image表徵圖,運行商務程序,查看引用結果是否正確。

說明

測試擷取的賦值節點結果集

下遊節點引用賦值節點結果集後,您可將下遊節點及賦值節點提交至開發環境,並進入開發環境營運中心執行補資料操作,測試下遊節點擷取的賦值節點結果集資料是否正確。