2016-07-25 27 views
0

Ich habe den folgenden Code:Apache PIG - Get nur Datum von Timestamp

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'); 

Ich möchte die Dateien nach Datum und die Regeln aufzuspalten, die ich in Split-Anweisung legt es mir Fehler gibt .. .

Wie kann ich TimeStamp (verwendet für transf-Anweisung) in Date umwandeln, um die Vergleiche zu machen?

Vielen Dank!

Antwort

1

Nachdem Sie das Datetime-Objekt von ToDate abgerufen haben, verwenden Sie GetYear(), GetMonth(), GetDay() für das Datetime-Objekt, und verwenden Sie CONCAT, um nur das Datum zu erstellen.

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 Guss der getYear, getMonth, getDay wie dieser (chararray) GetYear (Zeitstempel) .Der Klammern könnten leicht ausgeschaltet werden. –