在 Pig 中检查条件后连接

Concat after checking condition in Pig

我正在尝试 CONCAT 我的猪中的一个列,如果某个条件与我正在使用下面的代码相匹配,但它会抛出错误。

代码:

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

错误:

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

来源:CONCAT : 两个元素的数据类型必须相同,要么是chararray,要么是bytearray。

首先,您正在尝试将不同 datatype.Cast 字段的字段连接到 chararray.Second,您的 bincond 语法是 incorrect.Since 您已经过滤了值 OBR 和 OBX 的记录,您不需要检查 [=11=] == 'OBX'。第三,当 [=11=] == 'OBX' 的值再次连接 OBR 与与 if part.Fourth 相同的当前时间时,有一个 ';'在不正确的 Uid 之后。

MSH_DATA = FOREACH data GENERATE ([=10=] == 'OBR' ? CONCAT('OBR',ToString(CurrentTime(), 'yyyy-MM-dd\'T\'HH:mm:ssz'),(chararray)) : CONCAT('OBX',ToString(CurrentTime(), 'yyyy-MM-dd\'T\'HH:mm:ssz'),(chararray))) AS Uid,  AS id,  AS result,  AS resultname;