全部產品
Search
文件中心

DataWorks:賦值節點

更新時間:Jan 05, 2026

當您需要將上遊節點任務的查詢或輸出結果提供給下遊節點使用時,可通過賦值節點實現。賦值節點(即上遊節點)支援 ODPS SQLPython 2Shell三種語言,會自動將最後一條查詢或輸出結果賦值給節點內建的輸出參數(outputs),下遊節點可以通過引用該參數來擷取賦值節點的輸出結果。

適用範圍

  • 版本限制:僅支援 DataWorks 標準版及以上版本。

  • 許可權限制:RAM 帳號需被添加至對應工作空間,並具備相應開發許可權。

核心概念:參數的傳遞與引用

賦值節點的核心是參數傳遞,負責將上遊節點產生的資料傳遞給下遊節點。

  • 上遊賦值節點:負責產生資料。它會將最後一條輸出或查詢結果自動賦值給一個名為 outputs節點輸出參數

  • 下遊業務節點:負責接收和使用資料。通過在下遊節點的調度配置 > 節點上下文中添加一個本節點輸入參數(例如,sql_inputs),並讓它引用上遊節點的 outputs 參數,就可以在代碼中使用這些資料。

傳遞參數格式說明

賦值語言

傳遞參數範圍

傳遞參數格式

ODPS SQL

擷取最後一行 SELECT 語句的輸出。

將輸出結果作為一個二維數組傳遞至下遊。

Python 2

擷取最後一行 print 語句的輸出。

將輸出結果轉化成字串基於逗號,)分割為一維數組

Shell

擷取最後一行 echo 語句的輸出。

操作步驟

下面以將 ODPS SQL 賦值節點的結果傳遞給 Shell 節點為例,介紹通用的操作流程。

  1. 建立並配置上遊賦值節點

    1. 登入 DataWorks 控制台,在左側導覽列單擊資料開發與營運 > 資料開發,進入資料開發頁面。

    2. 在商務程序中,建立並編輯一個賦值節點。在代碼編輯頁面,選擇賦值語言為 ODPS_SQL,並編寫代碼以產生需要傳遞給下遊的結果。

      select * from xc_dpe_e2.xc_rpt_user_info_d where dt='20191008' limit 10;
    3. (可選)單擊頁面右側的調度配置,在節點上下文中可以查看到,系統已自動為該節點建立了名為 outputs本節點輸出參數

  2. 配置下遊 Shell 節點

    說明

    僅以Shell節點為例,支援任意節點作為下遊節點。

    1. 建立 Shell 節點,並將其設定為賦值節點的下遊(即在工作流程中從賦值節點拉線串連到 Shell 節點)。

    2. 在 Shell 節點的編輯頁面,單擊右側的調度配置,選擇節點上下文頁簽。

    3. 本節點輸入參數地區,單擊添加參數

    4. 在彈出的對話方塊中,選擇上遊賦值節點的輸出參數 outputs,並為當前節點的輸入參數自訂一個參數名稱(例如:sql_inputs)。

      配置完成後,下遊節點會自動與上遊賦值節點建立依賴關係。
    5. 完成參數配置後,即可在下遊 Shell 節點的代碼中通過 ${sql_inputs} 的格式來使用上遊傳遞過來的值。

      echo '${sql_inputs}';
      echo '取上遊sql節點輸出第1行資料'${sql_inputs[0]};
      echo '取上遊sql節點輸出第1行第2個欄位'${sql_inputs[0][1]};
      工作原理說明:請注意,您在代碼中使用的 ${...} 變數訪問文法(包括數組索引)是由 DataWorks 在任務執行前進行預先處理和靜態替換的。例如,${sql_inputs[0][1]} 會被 DataWorks 引擎直接替換為從上遊節點擷取到的具體值,然後才將最終的指令碼提交給 Shell 執行。這並非標準 Shell 的數組操作方式。
  3. 運行驗證

    雙擊商務程序名稱,在商務程序編輯頁面單擊工具列的運行表徵圖,運行商務程序,查看引用結果是否正確。您也可以將節點提交至開發環境後,進入開發環境營運中心執行補資料操作,測試回合結果。

說明

DataWorks提供ETL工作流程範本(賦值節點應用)供您快速體驗賦值節點能力,詳情請參見ETL工作流程快速體驗

注意事項

  • 傳遞層級:賦值節點參數只能傳遞給直接下遊的一層子節點,不支援跨層級的節點傳遞。

  • 傳遞大小限制:傳遞值最大為 2MB。如果指派陳述式的輸出結果超過該限制,賦值節點會運行失敗。

  • 文法限制

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

    • ODPS SQL 模式下暫不支援 with 文法

使用樣本:分語言詳解

不同語言的賦值節點,其輸出結果(outputs)的資料格式和下遊節點的引用方式略有不同。下面以Shell節點為下遊節點,分別舉例說明。

樣本一:傳遞 ODPS SQL 查詢結果

SQL 的查詢結果會作為一個二維數組傳遞給下遊。

  • 上遊節點(賦值節點-ODPS SQL)配置

    假設 SQL 代碼如下,查詢返回多行多列的資料:

    select * from xc_dpe_e2.xc_rpt_user_info_d where dt='20191008' limit 2;
  • 下遊節點(Shell 節點)配置

    在 Shell 節點中添加名為 sql_inputs 的輸入參數,並引用上遊 SQL 節點的 outputs。然後可以使用如下代碼讀取資料:

    # 直接輸出整個二維數組
    echo "整個結果集: ${sql_inputs}";
    
    # 輸出第一行資料(一個一維數組)
    echo "第一行: ${sql_inputs[0]}";
    
    # 輸出第一行第二個欄位的值
    echo "第一行第二個欄位: ${sql_inputs[0][1]}";
  • 預期輸出結果

    DataWorks 將直接解析參數,並做靜態替換,運行輸出(具體值取決於您的表資料):

    整個結果集: value1_1,value1_2
    value2_1,value2_2
    第一行: value1_1,value1_2
    第一行第二個欄位: value1_2

樣本二:傳遞 Python 2 輸出結果

Python 2的 print 語句輸出結果會基於逗號(,)分割,並作為一個一維數組傳遞給下遊。

  • 上遊節點(賦值節點-Python 2)配置

    Python 2代碼如下:

    print "a,b,c";
  • 下遊節點(Shell 節點)配置

    在 Shell 節點中添加名為 python_inputs 的輸入參數,並引用上遊賦值節點的 outputs。然後可以使用如下代碼讀取資料:

    # 直接輸出整個一維數組
    echo "整個結果集: ${python_inputs}";
    
    # 按索引輸出數組中的元素
    echo "第一個元素: ${python_inputs[0]}";
    echo "第二個元素: ${python_inputs[1]}";
  • 預期輸出結果

    DataWorks 將直接解析參數,並做靜態替換,運行輸出如下:

    整個結果集: "a","b","c"
    第一個元素: a
    第二個元素: b

樣本三:傳遞 Shell 輸出結果

Shell 的 echo 語句輸出結果會基於逗號(,)分割,並作為一個一維數組傳遞給下遊。

  • 上遊節點(賦值節點-Shell)配置

    Shell 代碼如下:

    echo "hello,world";
  • 下遊節點(Shell 節點)配置

    在 Shell 節點中添加名為 Shell_inputs 的輸入參數,並引用上遊 Shell 節點的 outputs。然後可以使用如下代碼讀取資料:

    # 直接輸出整個一維數組
    echo "整個結果集: ${Shell_inputs}";
    
    # 按索引輸出數組中的元素
    echo "第一個元素: ${Shell_inputs[0]}";
    echo "第二個元素: ${Shell_inputs[1]}";
  • 預期輸出結果

    DataWorks 將直接解析參數,並做靜態替換,運行輸出如下:

    整個結果集: "hello","world"
    第一個元素: hello
    第二個元素: world

進階應用程式

與迴圈節點配合使用

當下遊是遍曆節點(for-each)或迴圈節點(do-while)時,賦值節點可以為其提供迴圈的初始值或遍曆列表。詳情請參見for-each節點do-while節點

在其他節點類型中使用賦值參數

部分節點(如 EMR HiveEMR Spark SQLODPS ScriptHologres SQLAnalyticDB for PostgreSQLClick House SQLMySQL 節點等)自身支援在節點上下文中開啟賦值參數功能,實現與賦值節點相同的效果。