2016-07-25 146 views
0

僅獲得日期我有下面的代碼:阿帕奇豬 - 從時間戳

Data = load '/user/cloudera/' using PigStorage('\t') 
as 
( ID:chararray, 
    Time_Interval:chararray, 
    Code:chararray); 

transf = foreach Source_Data generate (int) ID, 
            ToString(ToDate((long) Time_Interval), 'yyyy-MM-dd hh:ss:mm') as TimeStamp, 
         (int) Code; 

SPLIT transf INTO  Src25 IF (ToString(TimeStamp, 'yyyy-MM-dd')=='2016-07-25'), 
         Src26 IF (ToString(TimeStamp, 'yyyy-MM-dd')=='2016-07-26'); 


STORE Src25 INTO '/user/cloudera/2016-07-25' using PigStorage('\t'); 
STORE Src26 INTO '/user/cloudera/2016-07-26' using PigStorage('\t'); 

我想分裂按日期的文件和我在斯普利特聲明我把它給了我錯誤的規則.. 。

如何在Date中轉換TimeStamp(用於轉換語句)來創建比較?

非常感謝!

回答

1

從ToDate獲得datetime對象後,在datetime對象上使用GetYear(),GetMonth(),GetDay()並使用CONCAT構造僅日期。

transf = foreach Source_Data generate 
        (int) ID, 
        ToString(ToDate((long) Time_Interval), 'yyyy-MM-dd hh:ss:mm') as TimeStamp, 
        (int) Code; 

transf_new = foreach transf generate 
        ID, 
        TimeStamp, 
        CONCAT(CONCAT(CONCAT(GetYear(TimeStamp),'-')),(CONCAT(GetMonth(TimeStamp),'-')),GetDay(TimeStamp)) AS Day,-- Note:Brackets might be slightly off but it should be like 'yyyy-MM-dd' format 
        Code; 

-- Now use the new Day column to split the data 
SPLIT transf_new INTO  Src25 IF (Day =='2016-07-25'), 
          Src26 IF (Day =='2016-07-26'); 
+0

@SaCvP施放getyear,getmonth,getday像這樣(chararray)GetYear(TimeStamp)。括號可能稍微偏離。 –