两个联合 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
我在 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 |