全部產品
Search
文件中心

DataWorks:調度參數

更新時間:Jun 19, 2024

本文為您介紹調度參數的相關問題。

調度參數往前取一個小時,如何處理跨天參數替換的問題

  • 問題描述

    表分區格式day=yyyymmdd,hour=hh24,執行時小時會取上個小時的資料,使用$[yyyymmdd] $[hh24-1/24]參數可以滿足,但0點時會變成當天的23點,該情況如何處理?

  • 解決辦法

    您可修改參數的計算公式,將datetime設定為$[yyyymmdd-1/24]hour的計算公式仍然是$[hh24-1/24]

    配置說明
    • 代碼中設定day=datetime, hour={hour},
    • 節點配置參數賦值datetime=[yyyymmdd-1/24],hour=[hh24-1/24]
    即時情境
    • 如果一個執行個體的定時時間為2021-7-21 00:00:00,減1小時便是昨天,則$[yyyymmdd-1/24]的值為20210720$[hh24-1/24]的值為23
    • 如果一個執行個體的定時時間為2021-7-21 01:00:00,減1小時還是今天,則$[yyyymmdd-1/24]的值為20210721$[hh24-1/24]的值為00

如何處理表的分區格式年月日時分秒間帶空格情況:pt=yyyy-mm-dd hh24:mi:ss

重要 調度參數賦值不支援帶空格。
您可使用兩個自訂變數進行賦值,具體如下:
  • 年月日:參數datetime=$[yyyy-mm-dd]
  • 時分秒:參數hour=$[hh24:mi:ss]
分別擷取日期和時間後,在代碼中使用空格拼接為pt=${datetime} ${hour}調度配置

節點定時時間為每天20:00,節點內參數取值為定時時間($cyctime或者$[yyyymmddhh24miss]),由於上遊節點執行異常導致當前節點第二天0:00才調起,此時參數取值是20:00還是0:00?

執行個體的定時時間可以理解為預期狀態下執行個體已耗用時間,定時時間與執行個體實際已耗用時間可能存在差異(任務實際運行時,可能會因為等待資源等原因導致實際已耗用時間與定時時間不一致)。執行個體定時時間是絕對的,不會隨著執行個體的已耗用時間而改變。

調度參數中取的是執行個體的定時時間,節點調度參數的替換值在執行個體產生時就已經替換,不會隨著執行個體實際已耗用時間的改變而改變,因此,您無需顧慮調度參數取值是否會變動。定時時間定時調度時間

如何配置ODPS Spark節點中的時間參數?

您在建立ODPS Spark節點時,需在編輯頁面配置節點使用的參數,系統會按照配置順序執行。

配置代碼中變數後,需單擊編輯頁面右側的調度配置,在參數面板為上述變數賦值,調度參數使用詳情請參見:調度參數支援的格式spark任務配置

如何對不便於進行二次處理調度參數傳回值的節點進行取值?

部分節點(例如,離線同步節點)配置了調度參數後,調度參數的傳回值不能直接使用,需要進行轉換等二次處理。該類節點,您可以配置賦值節點為該節點的上遊,使用賦值節點先引用調度參數並對參數返回結果進行轉換處理,再通過節點上下文功能,將最終的參數結果傳遞給下遊的目標節點。

直接使用MaxCompute日期函數取值和通過調度參數取值有什麼區別?

  • 直接使用MaxCompute日期函數取值,其返回結果是執行計算任務的機器所顯示的時間。當在不同時間執行同一個執行個體時,返回時間會改變。
  • 通過調度參數取值,其返回結果是基於定時時間進行計算的。無論何時執行同一個執行個體,返回時間均不會改變。

如何在資料開發測試調度參數?

由於調度參數僅經過調度系統才能被自動替換,因此,如果您需通過資料開發測試調度參數在調度系統的替換情況,可選擇開發環境煙霧測試 (Smoke Test)。
說明 由於Data Integration任務沒有開發環境測試功能,所以如果您需測試該類任務調度參數替換情況,建議建立一個SQL節點,使用開發環境煙霧測試 (Smoke Test)先單獨測試調度參數,測試符合預期後,再在Data Integration節點中使用。

FAILED: ODPS-0130161:[1,84] Parse exception - invalid token '$'

報錯原因:調度參數未賦值或賦值出現異常。

解決辦法
  1. 檢查是否有給調度參數賦值。
  2. 檢查配置的調度參數是否符合要求(詳情請參見調度參數支援的格式)。
重要 修改參數配置後需提交發布,發布後請在生產營運中心周期任務的屬性面板查看參數是否是最新的配置。
賦值異常

params format error,please check your params(key=values)

解決辦法:
  1. 檢查是否為變數賦值。
  2. 檢查調度參數是否有多餘空格。
  3. 節點名稱中,點(.)和中文不能一起使用。
樣本:time①=②$[yyyymmdd③hh24:mi:ss]time1=$[yyyymmdd]④time2=$[hh24:mi:ss] (①②③④為空白格所在位置)。
  • 調度參數的等號(=)兩端不可以加空格,即樣本中的①②處。
  • 調度參數賦值中不支援空格,即樣本中的③處。
  • 兩個調度參數間用一個空格分隔,即樣本中的④處。

運行,進階運行和開發環境煙霧測試 (Smoke Test)賦值邏輯有什麼區別

操作描述
運行第一次運行後,您需手動為該變數賦值常量,第一次賦值會被記錄。如果對代碼進行修改,該變數依舊使用第一次運行時的賦值。
進階運行進階運行時,您需手動為當前代碼中的變數進行賦值常量,如果修改了代碼中的變數,請使用進階運行給變數重新賦值常量。
說明 如果要修改任務執行資源組,請使用進階運行
開發環境執行煙霧測試 (Smoke Test)通過手動選擇業務日期類比節點自動調度的情境,擷取當前業務日期下調度參數的替換值。
替換調度參數

如何查看生產環境調度參數替換情況?

如果您在資料開發修改了調度參數並且提交發布,請在生產營運中心周期任務屬性面板檢查調度參數是否符合預期,如果不符合預期,請檢查任務發布,發布包介面,是否發布產生功。在周期執行個體屬性面板查看單個執行個體調度參數替換情況。
重要 單個執行個體不管是否已經運行過,執行個體的執行參數會即時更新為生產周期任務最新的參數配置。
周期任務
即時情境:
  • 節點A當天周期執行個體A1調度參數time1取值為$bizdate,當天執行個體已執行成功,代碼中參數取值即為bizdate業務時間(具體值)。
  • 在當天某一時間點調度參數time1取值由$bizdate改為$cyctime,那麼當天執行個體執行參數此時會顯示為cyctime定時時間(具體值)。
  • 當前執行個體重跑,會用最新的參數配置:即time1=$cyctime
  • 如果要看調度參數變更前的執行個體使用的調度參數替換情況,請在日誌中查看,詳情參考常見問題:如何在日誌中查看調度參數替換情況如何通過日誌查看當前執行個體執行時調度參數替換情況?
調度參數替換情況

如何通過日誌查看當前執行個體執行時調度參數替換情況?

在代碼中找到SKYNET_PARAVALUE字樣。日誌查看調度情況

如何定義調度參數的時區?

夏令時支援現轉執行個體引擎和參數分區計算,在進入和退出夏令時當天能正確運行。以美國西部時間為例,說明如下:
  • 進入夏令時會產生23個執行個體,當天03:00往前位移10分鐘的結果是01:50。進入夏令時當天定時時間2點的任務會空跑。
  • 退出夏令時會產生24個執行個體,當天03:00往前位移10分鐘的結果是02:50。

進入夏令時當天的日、周和月調度節點,如果設定的已耗用時間正好是被跳過的時間段,則當天產生的執行個體已耗用時間會是當天的0點整。

節點中調度參數已配置且提交發布,但傳回值始終無變化。

您需排查調度參數是否被同名商務程序參數覆蓋。排查操作,詳情請參見使用流程參數

當排查到存在同名商務程序參數時,如無需使用該商務程序參數,則可將其刪除;如需保留該商務程序參數,則需修改節點調度參數的名稱。