在 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;
我正在尝试 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;