使用 group by 获取类别计数,但由于数据不可用,输出 table 中缺少一个类别

Using group by to get category counts, but one category is missing in output table as data is not available

Hive 脚本问题:当计数为零时,我遇到了使用 Hive 通过 groupby 获取计数的问题。如果类别在输入 table 中可用,我能够在输出 table 中看到计数。但是当特定类别在输入 table 中不可用时,它在输出 table 中不会显示为零。相反,该类别从输出 table 中消失了。非常感谢这里的任何帮助。提前致谢。

输入和输出表: enter image description here

输入 table 在“Year”列上进行分区。

我试过的 Hive 代码: enter image description here

我认为你把逻辑复杂化了。要获得预期的结果,您可以 UNION ALL 三个简单的查询,如下所示:

SELECT 'ada' attribute, 96 bin, COUNT(*) FROM input_table WHERE bin = 96
UNION ALL SELECT 'ada' attribute, 97 bin, COUNT(*) FROM input_table WHERE bin = 97
UNION ALL SELECT 'ada' attribute, 98 bin, COUNT(*) FROM input_table WHERE bin = 98

这些带有隐式 GROUP BY 的查询总是 return 某些东西,即使没有匹配 WHERE 条件的记录。

Demo on DB Fiddle:

attribute | bin | (No column name)
:-------- | --: | ---------------:
ada       |  96 |                3
ada       |  97 |                0
ada       |  98 |                5

你可以尝试使用select from values语法

SELECT
  input_table.attribute,
  bins.bin,
  COUNT(input_table.bin) bin_count 
FROM
  (VALUES (96),
          (97),
          (98))bins (bin)
left JOIN input_table
        ON bins.bin = input_table.bin 
group by bins.bin,input_table.attribute