分组集中使用大小写的语法

时间:2017-05-25 02:06:50

标签: syntax hive case-when grouping-sets

有问题的Hive查询摘录如下:

group by
  case
    when inte.subId is not null then 'int'
    else 'ext'
  end,
  taskType,
  result
grouping sets(
  (
    case
      when inte.subId is not null then 'int'
      else 'ext'
    end,  -- line 36
    taskType,
    result
  ),  -- line 39
  (
    taskType,
    result
  )
)

日志表明第36和39行有一些语法错误:

FAILED: ParseException line 36:7 missing ) at ',' near ')'
line 39:3 missing EOF at ',' near ')'

有什么想法吗? 如果您需要我的更多信息,请随时发表评论。

1 个答案:

答案 0 :(得分:0)

好的,这是@GordonLinoff在评论中提出的解决方案。基本上,我们的想法是使用子查询,其中选择新列Category作为

case 
  when inte.subId is not null then 'int'
  else 'ext'
end as Category

然后,在外部主查询中,组部分只是

group by Category, Type, Result
grouping sets(
    (Category, Type, Result),
    (Type, Result)
)

至于为什么问题中的语法错误,我们不确定。可能case无法在grouping sets内使用。