大數據

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釘釘交流群】

Leave a Reply

Your email address will not be published. Required fields are marked *