【发布时间】:2018-01-29 14:29:12
【问题描述】:
我正在尝试根据几个条件从“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 [主要] 错误 org.apache.pig.tools.grunt.Grunt - ERROR 1039:(名称:Equal 类型:null Uid:null)Equal 中的不兼容类型 运算符左侧:chararray 右侧:int
非常感谢您的帮助。
【问题讨论】:
-
你为什么要把concat函数放在引号里?
-
尝试了以下方法: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;相同的错误:错误 org.apache.pig.tools.grunt.Grunt - 错误 1039:(名称:相等类型:null Uid:null)相等运算符左侧的不兼容类型:chararray 右侧:int
-
删除 concat 的引号不起作用
-
比较正确,但
00-51字面意思是减法,不是“两个值之间”的简写 -
如何指定“值之间”?在 00 到 51 之间?
标签: hadoop apache-pig