HQL Select用法详解
1.基础语法
(1)select_exp
(2)ALL、DISTINCT
(3)WHERE
(4)分区查询、分区裁剪
(5)GROUP BY
(6)HAVING
(7)LIMIT
(8)执行顺序
2.高阶语法
(1)ORDER BY
(2)CLUSTER BY
(3)DISTRIBUTE BY + SORT BY
(4)UNION联合查询
在 Hive 中,可以使用 UNION
操作符执行联合查询,将多个查询的结果合并为一个结果集。UNION
操作符用于合并两个或多个 SELECT
语句的结果集,并去除重复的行。
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
在这个语法中,SELECT
语句必须具有相同数量和类型的列,它们的顺序也必须相同。UNION
将两个 SELECT
语句的结果集合并,并自动去除重复的行。
如果需要保留重复的行,可以使用 UNION ALL
操作符:
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;
注意事项和限制:
-
列数和数据类型必须匹配: 在每个
SELECT
子句中,列数和数据类型必须匹配。如果不匹配,Hive 将会抛出错误。 -
列顺序必须相同: 虽然不同的
SELECT
子句可以选择不同的列,但它们的顺序必须相同。否则,Hive 会抛出错误。 -
列名可能取决于第一个
SELECT
语句: 在某些情况下,联合查询的结果集中的列名可能取决于第一个SELECT
语句中的列名。因此,最好保持所有SELECT
语句中列名的一致性。 -
重复行处理:
UNION
默认会去除重复的行,而UNION ALL
会保留所有行,包括重复的行。 -
性能注意: 联合查询可能会对性能产生影响,特别是在处理大量数据时。在可能的情况下,应尽量减少联合查询的数量,或者使用其他性能更好的方法。
(5)子查询
(6)CTE表达式
CTE(Common Table Expression
,公共表达式)是 SQL 中一种可用于创建临时命名结果集的结构。它们通常与递归查询一起使用,但也可以在常规查询中提高可读性和可维护性。
在 Hive SQL 中,CTE 使用 WITH
关键字来定义,它允许你为一个查询定义一个临时的命名结果集,然后在主查询中引用它。这对于分解复杂的查询逻辑、避免重复计算以及提高查询可读性都非常有用。
以下是一个示例,演示了如何在 Hive SQL 中使用 CTE:
假设你有一个表 employees
,包含员工的 ID、姓名和工资信息。现在,假设你想要找到工资高于平均工资的员工。你可以使用 CTE 来计算平均工资,并在主查询中引用它:
WITH avg_salary AS (
SELECT AVG(salary) AS avg_salary
FROM employees
)
SELECT emp_id, emp_name, salary
FROM employees
WHERE salary > (SELECT avg_salary FROM avg_salary);
在上面的示例中,avg_salary
是一个 CTE,它计算了 employees
表中所有员工的平均工资。然后,在主查询中,我们使用了这个 CTE 来过滤出工资高于平均工资的员工。
使用 CTE 可以使查询更加模块化和易读,同时避免了重复计算。它们还可以帮助分解复杂的查询逻辑,使查询更易于理解和维护。需要注意的是,虽然 CTE 在 Hive SQL 中非常有用,但并不是所有的数据库都支持这个功能。