两个联合 SELECT 在 HIVE 上

UNION TWO SELECT ON HIVE

我在 HIVE 上有一个类似的数据库。

+--------+------------------+---------+
| rating |    date_upd      | version |
+--------+------------------+---------+
| 3      | 2021-07-01 12:13 | 2.1.9   |
| 5      | 2021-07-01 10:39 | 2.2.6   |
| 4      | 2021-07-02 10:24 | 2.2.7   |
| 5      | 2021-07-02 05:37 | 3.2.4   |
| 1      | 2021-07-02 21:40 | 3.2.5   |

我需要发送另一个 table 两个 SELECT 的结果。如何使用 HiveQL 将这两个合并为一个?

SELECT substr('date_upd',1,10) as 'day',
       count(*) cnt 
FROM tbl_one 
GROUP BY
       substr(date_upd,1,10);


SELECT substr('date_upd',1,7) as 'month',
       count(*) cnt 
FROM table_name 
GROUP BY
      substr('date_upd',1,7);

当我这样做时,它只有 returns 'day' 值而不是 'month' 值。

SELECT 
      substr('date_upd',1,7) as 'month',
      count(*) cnt_month,
      substr('date_upd',1,10) as 'day',
      count(*) cnt_day
FROM table_name 
GROUP BY
      substr('date_upd',1,7),
      substr('date_upd',1,10);

这取决于合并对您意味着什么。如果你想垂直附加(从标题描述听起来)你可以试试这个:

垂直追加:

联盟:

如果您想在另一份报告之后立即打印一份报告,只需执行 UNION 语句

SELECT substr('date_upd',1,10) as 'day',
       count(*) cnt 
FROM tbl_one 
GROUP BY
       substr(date_upd,1,10);

UNION -- this is the operator you are looking for

SELECT substr('date_upd',1,7) as 'month',
       count(*) cnt 
FROM tbl_one 
GROUP BY
      substr('date_upd',1,7);

水平追加:

加入

但是,如果您尝试水平显示内容,您可能应该使用基于连接的方法(比 window 函数更简单)可能在一个月内连接并带来所有 monht_date,和 day_date 列(以防你真的想把这些列并排计数)。

day count_day month count_month
2021-07-01 12:13 2 2021-07 45
2021-07-02 11:07 5 2021-07 45
2021-07-05 07:22 3 2021-07 45

WINDOW 函数:

如果您不想重复列,您可以使用具有分区级别的 window 函数直接聚合不同级别。但这显然更高级,可能不是所要求的。只是指路。

你会得到类似的东西:

date count_day count_month
2021-07-01 12:13 2 45
2021-07-02 11:07 5 45
2021-07-05 07:22 3 45