PIG 中的 CASE 语句
CASE statement in PIG
我正在尝试根据以下几个条件从 'geocode' 中提取 'vertex_code':
SUBSTRING(geocode,0,2) ----> Code
00-51 ----> 01
70 ----> 03
61-78 ----> 04
Else ----> 00
现在必须将获得的 'code' 值与 'geocode' 值(前缀)连接起来,并再次与末尾的 00(后缀)连接以形成 'vertex_code'
例如:geocode = 44556677
如果SUBSTRING(geocode,0,2)
介于00-51
之间,则code=01
因此 vertex_code = 014455667700
下面是我的脚本:
item = load '/user/item.txt' USING PigStorage('|') AS (load_id:chararray, record_type:chararray, geocode:chararray);
newitem = FOREACH item GENERATE load_id, record_type,
(CASE (SUBSTRING(geocode,0,2))
WHEN 00-51 THEN 'CONCAT(01,CONCAT(geocode,00))'
WHEN 70 THEN 'CONCAT(03,CONCAT(geocode,00))'
WHEN 61-78 THEN 'CONCAT(04,CONCAT(geocode,00))'
ELSE 'CONCAT(00,CONCAT(geocode,00))'
END) AS vertex_code;
DUMP newitem;
我收到以下错误:
2018-01-29 09:00:40,645 [main] ERROR org.apache.pig.tools.grunt.Grunt -
ERROR 1039: (Name: Equal Type: null Uid: null)incompatible types in Equal
Operator left hand side:chararray right hand side:int
非常感谢帮助。
你必须将它转换为 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;
我正在尝试根据以下几个条件从 'geocode' 中提取 'vertex_code':
SUBSTRING(geocode,0,2) ----> Code
00-51 ----> 01
70 ----> 03
61-78 ----> 04
Else ----> 00
现在必须将获得的 'code' 值与 'geocode' 值(前缀)连接起来,并再次与末尾的 00(后缀)连接以形成 'vertex_code'
例如:geocode = 44556677
如果SUBSTRING(geocode,0,2)
介于00-51
之间,则code=01
因此 vertex_code = 014455667700
下面是我的脚本:
item = load '/user/item.txt' USING PigStorage('|') AS (load_id:chararray, record_type:chararray, geocode:chararray);
newitem = FOREACH item GENERATE load_id, record_type,
(CASE (SUBSTRING(geocode,0,2))
WHEN 00-51 THEN 'CONCAT(01,CONCAT(geocode,00))'
WHEN 70 THEN 'CONCAT(03,CONCAT(geocode,00))'
WHEN 61-78 THEN 'CONCAT(04,CONCAT(geocode,00))'
ELSE 'CONCAT(00,CONCAT(geocode,00))'
END) AS vertex_code;
DUMP newitem;
我收到以下错误:
2018-01-29 09:00:40,645 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1039: (Name: Equal Type: null Uid: null)incompatible types in Equal Operator left hand side:chararray right hand side:int
非常感谢帮助。
你必须将它转换为 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;