hive - Hive 中的联合分组结果集
问题描述
我需要在 2018 日历年的各个季度中打破按 ID 列分组的 Hive 查询。下面是我目前的处理方式,我想要另一个选项来用更少的查询来实现相同的结果。
--查询 1 个 2018 年第 1 季度加上 Q2、Q3、Q4 的三个相同查询
Create TABLE Q12018 stored as ORC as
select
ID,
count(1) as cnt,
sum(revenue) as revenue,
sum( (CASE
WHEN condition1
THEN 1
ELSE 0 END)) as metric1,
sum( (CASE
WHEN condition2
THEN revenue
ELSE 0 END)) as metric2,
sum( (CASE
WHEN condition3
THEN 1
ELSE 0 END)) as metric3,
sum( (CASE
WHEN codition4
THEN revenue
ELSE 0 END)) as metric4
from mainTable
where month between 201801 and 201803
group by
ID;
--查询2
Create TABLE combined2018 stored as ORC as
select * from Q12018
union all
select * from Q22018
union all
select * from Q32018
union all
select * from Q42018 ;
--查询3
Create TABLE Agg2018 stored as ORC as
Select
ID,
Sum(cnt),
Sum(revenue),
Sum(metric1),
Sum(metric2),
sum(metric3),
sum(metric4)
from combined2018
group by ID
解决方案
似乎最后您正在汇总按 ID 分组的所有季度结果。如果最终结果是季度结果的汇总,则更改 where 子句以包括整个年份范围以实现相同的最终结果。
select
ID,
count(1) as cnt,
sum(revenue) as revenue,
sum((CASE WHEN condition1 THEN 1 ELSE 0 END)) as metric1,
sum((CASE WHEN condition2 THEN revenue ELSE 0 END)) as metric2,
sum((CASE WHEN condition3 THEN 1 ELSE 0 END)) as metric3,
sum((CASE WHEN condition4 THEN revenue ELSE 0 END)) as metric4
from mainTable
where month between 201801 and 201812
group by ID;
推荐阅读
- python - qmk 设置失败并显示“没有名为隐藏的模块”
- python - 如何使用 pandas 进行数据分析(如计数、ucounts、频率)?
- javascript - 如何在使用 React 和 JS 的测验应用程序中清楚地显示多个单击选项?谢谢
- c# - 如何在没有存储库的情况下设置 MOQ?System.NullReferenceException: '对象引用未设置为对象的实例
- php - Making a query on a table that has json field and postgresql database and laravel
- sql - 我在更新我的 SQL 表时包含了值,但 SQL 仍然将我的值视为“无”??(如果我正确收到错误消息)
- java - 我只是想知道下面代码中 readInput() 的功能
- python - 用不同的语法调用超类
- proxy - LoadRunner 不记录本地主机的事件
- python - 使用多个字典在python中编写一个csv文件