2015-06-25 28 views
-2

這是我的要求如何在當前時間添加天數?

A = Load 'number' using PigStorage(',') as (id:chararray,name:chararray,join_date:chararray) 
B = FOREACH A GENERATE (join_date is NULL ?AddDuration(CurrentTime(),1000):join_date); 
dump b; 

如何實現這一目標?

+0

的第二個參數是AddDuration持續時間字符串,傳遞的持續時間字符串而不是1000將有所幫助。檢查一個片段的答案。 –

回答

3

根據API:AddDuration(datetime,duration); datetime:日期時間對象。持續時間:ISO 8601格式的持續時間字符串。

我們必須傳遞ISO 8601格式的持續時間字符串作爲第二個參數。

價:

  1. http://pig.apache.org/docs/r0.12.0/func.html#add-duration

  2. https://en.wikipedia.org/wiki/ISO_8601

對於用例所討論共享:

輸入:請注意,在日期欄的第一個值爲空或空格ÿ

() 
(20150625) 

豬腳本:

date_test = LOAD '/Users/muralirao/learning/pig/a.csv' USING PigStorage('\t') AS (join_date:chararray); 
default_date_plus_2_days = FOREACH date_test GENERATE ((join_date IS NULL) ? AddDuration(CurrentTime(),'P2D') : ToDate(join_date,'yyyyMMdd')) AS join_date; 
display = FOREACH default_date_plus_2_days GENERATE ToString(join_date,'yyyyMMdd') as display_date; 
DUMP display; 

N.B:這裏AddDuration第二個參數是 'P2D' 即2天。檢查代表持續時間對象的ISO_8601標準。

輸出:DUMP顯示

(20150627) 
(20150625)