hive插入覆盖表,其中包含内部子查询列数作为结果

时间:2017-06-23 15:14:40

标签: hadoop hive hql yarn

您好我在源表“状态表”下面

date            status    name
2017-06-22      true      1.tar
2017-06-22      true      2.tar
2017-06-22      false     3.tar
2017-06-22      true      4.tar
2017-06-22      false     5.tar
2017-06-21      false     6.tar
2017-06-21      false     6.tar
2017-06-21      false     6.tar
2017-06-21      true      6.tar

我在目标表列下面有预期数据

True     False     Total    Date
3        2         5        2017-06-22
1        3         4        2017-06-21

我在下面写了一个查询来将数据从源表加载到目标表,但它说

Expression not in GROUP BY key

SET hive.exec.dynamic.partition.mode=nonstrict;
SET hive.auto.convert.join=true;
INSERT OVERWRITE TABLE destination PARTITION(date_time)
SELECT
count(status=true) AS success,
count(status=false) AS fail,
success + fail
FROM
status;

请帮我找到缺失的链接。提前致谢。

2 个答案:

答案 0 :(得分:1)

  1. Hive不支持SELECT子句(success + fail
  2. 中的别名引用
  3. COUNT计算非NULL的所有内容。 FALSE不是NULL。
  4. Date是保留字。使用`Date`甚至更好,找到另一个名字。
  5. 您尚未按Date分组。
  6. 使用动态分区时,应选择分区列,最后一次。
  7. select  count (case when status = true  then 1 end) as success
           ,count (case when status = false then 1 end) as fail
           ,count (status)                              as total
           ,`date`
    
    from    status
    
    group by `date`
    

答案 1 :(得分:0)

感谢您的回答,但是我发现了我的错误,我使用的是count函数而不是sum。这是下面的代码。

SELECT
sum(case when status ='true' then 1 else 0 end),
sum(case when status ='false' then 1 else 0 end),
sum(case when status ='true' then 1 else 0 end) + sum(case when status='false' then 1 else 0 end)
from status  where date='2017-06-21';