job中執行每行,job執行

來源:互聯網
上載者:User

job中執行每行,job執行


job中執行每行

 有時,我們需要job或轉換執行多次,且每次傳入的參數都不同。假如你正在做資料移轉的工作,需要匯入每天的舊資料,則需要一個job根據指定的日期匯入資料,該日期被指定作為參數,如果我們需要匯入從一個起始日期到昨天所有的舊資料,手工運行job是痛苦的也是錯誤的做法,kettle是可以首先計算正確的日期然後根據每個日期運行匯入job。
 在主job中,首先運行返回日期轉換(每個日期作為一行),實際匯入資料的job放在轉換的後面執行,並且根據轉換的結果執行每一行,job可以被設定從一個結果欄位中擷取參數。
 

產生日期
 這個轉換負責產生只有一個日期欄位的資料行,“set start date ”步驟產生10000行資料流(根據實際情況估算行數,測試時可以設定小點),包括一個日期類型常量欄位。“calc days”步驟插入一個序列到資料流中,為了在“calc date”步驟可以計算連續的日期;其後的步驟去除掉其他的輔助欄位,然後增加昨天的日期到資料流中;接著是一個比較功能的步驟,判斷每行的中日期是否早於今天,如果進入“discard”步驟,否則進入“copy rows to result”步驟。

 
主job
 主job中執行產生日期轉換之後,是子job,負責執行每個輸入日期,該job必須要明確設定去執行每個輸入行,即設定“execute for every input row”複選框選中。同時需要傳入一個計算日期,通過“date”參數,所以“copy previous results to parameters?”也需要選中。最後參數必須從輸入行中映射,參數名和輸入欄位都命名為“date”。
 
 

子job
 子job接收每行的“date”日期參數並運行,樣本中簡單使用date參數記錄日誌然後完成。
 

下載
 這裡下載本樣本,主job運行子job,針對從2010-01-01到昨天的所有行。需要指出的是,本樣本的技術並不適合所有的場合,特別“迴圈直到條件為真”(不確定次數),這時可能用到這篇文章的方法去實現迴圈。


在oracle中想設定一個job 每天早上8點開始執行,每小時執行一次,晚上10點結束?

declare
job1 number(4);
begin
sys.dbms_job.submit(job => job1,
what => 'declare s1 varchar2(200); s2 varchar2(200); begin
if to_number(to_char(sysdate,''hh24'') between 8 and 22) then p_test.usp_test_jobincs(s1,s2); end if; end;',
next_date => sysdate,
interval => 'sysdate+1/24');
commit;
end;
/
 
在oracle中怎定義一個job,每天晚上8點執行一次?

Interval => TRUNC(sysdate) + 1 +20/24
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.