推荐答案
在 Impala 中,UNION 运算符用于将两个或多个 SELECT 语句的结果集合并为一个结果集。UNION 会默认去除重复的行,而 UNION ALL 则会保留所有行,包括重复的行。
语法
SELECT column1, column2, ... FROM table1 UNION [ALL] SELECT column1, column2, ... FROM table2;
示例
假设有两个表 employees 和 contractors,它们都有 name 和 salary 列。我们可以使用 UNION 来合并这两个表的结果:
SELECT name, salary FROM employees UNION SELECT name, salary FROM contractors;
如果希望保留重复的行,可以使用 UNION ALL:
SELECT name, salary FROM employees UNION ALL SELECT name, salary FROM contractors;
本题详细解读
UNION 与 UNION ALL 的区别
UNION:合并两个或多个SELECT语句的结果集,并去除重复的行。UNION ALL:合并两个或多个SELECT语句的结果集,但保留所有行,包括重复的行。
使用场景
UNION:适用于需要合并结果集并去除重复数据的场景。UNION ALL:适用于需要合并结果集且不需要去除重复数据的场景,通常性能更好,因为它不需要进行去重操作。
注意事项
- 列数和数据类型:所有
SELECT语句中的列数和数据类型必须一致。 - 性能:
UNION由于需要去重,通常比UNION ALL更消耗资源。 - 排序:如果需要排序,可以在最后一个
SELECT语句后添加ORDER BY子句。
示例解析
在示例中,employees 和 contractors 表都有 name 和 salary 列。使用 UNION 可以将这两个表的结果集合并,并去除重复的行。如果使用 UNION ALL,则会保留所有行,包括重复的行。
性能优化
- 如果不需要去重,尽量使用
UNION ALL,因为它比UNION更快。 - 在合并大量数据时,考虑使用分区表或索引来优化查询性能。