hive insert overwrite表,结果是列计数的内部子查询

bt1cpqcv  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(312)

嗨,我有下面的源表“状态表”

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;

请帮我处理丢失的链接。提前谢谢。
ercv8c1e

ercv8c1e1#

配置单元不支持select子句中的别名引用( success + fail ) COUNT 计算所有不为空的值。false不为空。 Date 是一个保留字。使用'date'或者更好的方法,找到另一个名字。
你还没有分组 Date .
使用动态分区时,应最后选择分区列。

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`
hlswsv35

hlswsv352#

谢谢你的回答,但我发现我的错误,我是用计数函数,而不是总和。下面是代码。

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';

相关问题