【问题标题】:CASE statement in PIGPIG 中的 CASE 语句
【发布时间】: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


【解决方案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;

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 2023-04-07
    • 1970-01-01
    • 2016-08-22
    • 2013-09-24
    • 2021-04-02
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多