PIG中的CASE声明

时间:2018-01-29 14:29:12

标签: hadoop apache-pig

我试图根据几个条件从'geocode'中提取'vertex_code':

localhost:8080/actuator/metrics 

现在,获取的'code'值必须与'geocode'值(前缀)连接,并再次与末尾的00连接(后缀)以形成'vertex_code'

例如:SUBSTRING(geocode,0,2) ----> Code 00-51 ----> 01 70 ----> 03 61-78 ----> 04 Else ----> 00

如果geocode = 44556677介于SUBSTRING(geocode,0,2)之间,那么00-51

因此vertex_code = 014455667700

以下是我的剧本:

code=01

我收到以下错误:

  

2018-01-29 09:00:40,645 [main] ERROR org.apache.pig.tools.grunt.Grunt -   错误1039 :(名称:等于类型:null Uid:null)Equal中不兼容的类型   操作员左手边:chararray右手边:int

非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

您必须将其强制转换为int然后进行比较

newitem = FOREACH item GENERATE load_id, record_type,
(CASE 
 WHEN ((int)SUBSTRING(geocode,0,2) <= 51  THEN CONCAT('01',CONCAT(geocode,'00'))
 WHEN ((int)SUBSTRING(geocode,0,2) = 70 THEN CONCAT('03',CONCAT(geocode,'00'))
 WHEN ((int)SUBSTRING(geocode,0,2) >= 61 and ((int)SUBSTRING(geocode,0,2) <=78 THEN CONCAT('04',CONCAT(geocode,'00'))
 ELSE CONCAT('00',CONCAT(geocode,'00'))
 END) AS vertex_code;

DUMP newitem;