天天看點

DataWorks百問百答17:如何排查周期任務取不到資料(産出資料為空)的問題?

首先我們需要知道節點依賴和業務邏輯之間是什麼關系,其實任務依賴關系(排程關系)和業務邏輯并沒有确切性的關聯,業務依賴(即抽數/寫數表之間的邏輯)并不等于任務依賴之間的關系。

舉個栗子:A任務産出A表,B任務産出B表,A、B同級,C任務依賴A、B的表資料産出C表,但是任務依賴關系上C可以不依賴A而隻依賴B,這樣C任務仍然能夠取得符合業務邏輯的資料并對表C進行寫入資料。

下面分析下幾種容易取不到源表資料的情況:

①分區&參數的影響:

比如說我有A、B兩個小時任務。

A任務業務邏輯樣例:

create table if not exists A(id bigint,name string)partitioned by(dt string,hh string);

insert overwrite table A partition(dt='${bidate}',hh='${hh}') select * from S where

dt='${bizdate}';

其中S表為初始資料表(即底表);

B表的業務邏輯樣例:

create table if not exists B(id bigint,name string)partitioned by(dt string,hh string);

insert overwrite table B partition (dt='${bidate}',hh='${hh}') select * from A where

dt='${bizdate}' and hh='${hh}';

當A任務的參數中hh這個參數前推了一個小時,實際hh值變成了hh='$[hh24-1],而B任務的hh參數不變,hh='$[hh24]'這種形式,那麼一定會找不到A表對應的分區而導緻inputs資料為空,進而B表沒有寫入資料.

②沒有嚴格的依賴關系而直接取源表的某一個還沒有産出資料的分區導緻沒有資料:

比如說,A、B兩個小時表作為C表的資料來源端,但是C并沒有嚴格依賴A、B兩個任務(即C任務沒有依賴A、B隻在業務上對A、B取數)。當A表任務産出ds='20200421',hh='10'的這個二級分區的時間是 10點30分,而C任務執行并取A表的ds='20200421',hh='10'這個分區的時間是10點10分,那麼,就會導緻C任務執行時取不到具體的A表對應分區資料而輸入為空。

③sql邏輯問題導緻輸入為空

在A、B做join關聯後并将資料寫入到C表,不符合sql邏輯的條件篩選,沒有select出符合條件的資料.

DataWorks百問百答曆史記錄

請點選這裡檢視>>

更多DataWorks技術和産品資訊,歡迎加入

【DataWorks釘釘交流群】