2016-11-29 37 views
0

我想要CONCAT在我的豬列如果某些條件得到匹配,我使用下面的代碼,但它是拋出錯誤。Concat檢查豬的條件後

CODE:

STOCK_A = LOAD '/user/cloudera/pati1.hl7' USING PigStorage('|'); 
data = FILTER STOCK_A BY ($0 matches '.*OBR.*' or $0 matches '.*OBX.*'); 
MSH_DATA = FOREACH data GENERATE ($0=='OBR' ? CONCAT('OBR',CurrentTime(),$1) : ($0=='OBX' ? CONCAT('OBR',CurrentTime(),$1))) AS Uid; , $1 AS id, $5 AS result, $3 AS resultname; 
Dump MSH_DATA; 

ERROR:

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 13, column 122> mismatched input ')' expecting COLON 

回答

1

來源:CONCAT兩種元素的數據類型必須是相同的,無論是chararray或ByteArray。

首先,您正在嘗試不同的datatype.Cast田裏chararray.Second的CONCAT領域,你bincond語法是incorrect.Since您已經過濾記錄值OBR和OBX,你不用檢查$0 == 'OBX'第三,當$0 == 'OBX'的值再次與當前時間連接的OBR與if部分相同。第四,有一個';'在Uid之後這是不正確的。

MSH_DATA = FOREACH data GENERATE ($0 == 'OBR' ? CONCAT('OBR',ToString(CurrentTime(), 'yyyy-MM-dd\'T\'HH:mm:ssz'),(chararray)$1) : CONCAT('OBX',ToString(CurrentTime(), 'yyyy-MM-dd\'T\'HH:mm:ssz'),(chararray)$1)) AS Uid, $1 AS id, $5 AS result, $3 AS resultname; 
+0

感謝您的詳細解釋,它幫助了很多。我嘗試了,但我得到錯誤'ERROR org.apache.pig.tools.grunt.Grunt - 錯誤1052: <第3行,第62列>無法將日期時間轉換爲chararray' – animal

+0

請upvote問題,如果你喜歡它。 – animal

+0

@animal我已經編輯了答案。您將不得不使用ToString()來投射日期時間對象。根據您的要求使用正確的日期時間格式。 –