推荐答案
在 Hive 中,UNION 运算符用于将两个或多个 SELECT 语句的结果集合并为一个结果集。UNION 会去除重复的行,而 UNION ALL 则会保留所有行,包括重复的行。
语法
SELECT column1, column2, ... FROM table1 UNION [ALL] SELECT column1, column2, ... FROM table2;
示例
假设有两个表 table1 和 table2,它们的结构相同,包含 id 和 name 两列。
SELECT id, name FROM table1 UNION SELECT id, name FROM table2;
这个查询将返回 table1 和 table2 中所有不重复的 id 和 name 组合。
本题详细解读
1. UNION 与 UNION ALL 的区别
- UNION:合并两个或多个
SELECT语句的结果集,并去除重复的行。 - UNION ALL:合并两个或多个
SELECT语句的结果集,但保留所有行,包括重复的行。
2. 使用场景
- UNION:当你需要合并多个查询结果,并且不希望结果集中出现重复数据时使用。
- UNION ALL:当你需要合并多个查询结果,并且允许结果集中出现重复数据时使用。
3. 注意事项
- 列数和数据类型:
UNION或UNION ALL操作的所有SELECT语句必须具有相同数量的列,并且对应列的数据类型必须兼容。 - 性能:
UNION由于需要去重,性能通常比UNION ALL差。如果不需要去重,建议使用UNION ALL以提高查询性能。
4. 示例扩展
假设 table1 和 table2 的数据如下:
table1
| id | name |
|---|---|
| 1 | Alice |
| 2 | Bob |
table2
| id | name |
|---|---|
| 2 | Bob |
| 3 | Carol |
使用 UNION:
SELECT id, name FROM table1 UNION SELECT id, name FROM table2;
结果
| id | name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Carol |
使用 UNION ALL:
SELECT id, name FROM table1 UNION ALL SELECT id, name FROM table2;
结果
| id | name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 2 | Bob |
| 3 | Carol |
5. 总结
UNION用于合并结果集并去重。UNION ALL用于合并结果集并保留所有行。- 使用时需确保
SELECT语句的列数和数据类型一致。