2013-05-25 87 views
4

在豬,我有一個聲明,基本上附加日期到我的生成值。在生成語句格式化日期

Data = FOREACH Input GENERATE (CurrentTime()),FLATTEN(group), COUNT(guid)oas Cnt; 

該輸出給出了ISO8601中的日期2013-05-25T09:01:38.914-04:00

我該如何做到這一點"YYYY-MM-DD"

回答

13

您有幾種選擇:

與豬的功能將它轉換:
如:

A = load ... 
B = foreach A { 
    currTime = CurrentTime(); 
    year = (chararray)GetYear(currTime); 
    month = (chararray)GetMonth(currTime); 
    day = (chararray)GetDay(currTime); 
    generate CONCAT(CONCAT(CONCAT(year, '-'), CONCAT(month, '-')),day) as myDate; 
} 

或通行的日期腳本作爲參數:

pig -f script.pig -param CURR_DATE=`date +%Y-%m-%d` 

或者用腳本聲明:

%declare CURR_DATE `date +%Y-%m-%d`; 

然後在腳本中將該變量稱爲'$CURR_DATE'

您也可以創建一個修改的 CurrentTime UDF,其中您將DateTime對象轉換爲Joda-Time庫的適當格式。

最簡單的就是在腳本的開頭聲明日期。

+0

嘿洛蘭德,謝謝你的回覆。事實上,我已經嘗試過將日期作爲參數方法。但今天的最終產出顯示了1983年,而不是2013-05-25。任何想法爲什麼?同樣的輸出參數可以正常工作,同時將其分配給存儲文件的名稱。例如:STORE Output INTO'Outputs $ CURR_DATE正常工作,並顯示爲Output2013-05-25。 – JohnMeek

+0

這是因爲如果你做減法:2013-5-25你會得到1983.這就是爲什麼我使用引號(''$ CURR_DATE''),所以它將被作爲chararray而不是int來處理。 –

+0

woks perfect.thanks。 – JohnMeek