提示
Spark SQL 教程 正在筹划编写中,使用过程中有任何建议,提供意见、建议、纠错、催更加微信 gairuo123。
Spark 支持 SELECT语句,该语句用于根据指定的子句从一个或多个表中检索行。SELECT 部分解释了受支持子句的完整语法和简要描述。
Spark 支持 SELECT 语句并符合 ANSI SQL 标准。查询用于从一个或多个表中检索结果集。语法如下:
[ WITH with_query [ , ... ] ]
select_statement [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select_statement, ... ]
[ ORDER BY { expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [ , ... ] } ]
[ SORT BY { expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [ , ... ] } ]
[ CLUSTER BY { expression [ , ... ] } ]
[ DISTRIBUTE BY { expression [, ... ] } ]
[ WINDOW { named_window [ , WINDOW named_window, ... ] } ]
[ LIMIT { ALL | expression } ]
其中 select_statement
语句为:
SELECT [ hints , ... ] [ ALL | DISTINCT ] { [ [ named_expression | regex_column_names ] [ , ... ] | TRANSFORM (...) ] }
FROM { from_item [ , ... ] }
[ PIVOT clause ]
[ LATERAL VIEW clause ] [ ... ]
[ WHERE boolean_expression ]
[ GROUP BY expression [ , ... ] ]
[ HAVING boolean_expression ]
语法说明:
with_query
:在主查询块之前指定公共表表达式(CTE)。这些表表达式允许稍后在 FROM 子句中引用。这有助于从 FROM 子句中提取重复的子查询块,并提高查询的可读性。hints
:可以指定提示来帮助 spark optimizer 做出更好的规划决策。目前 spark支持影响连接策略选择和数据重新分区的提示。ALL
:从关系中选择所有匹配的行,并在默认情况下启用。DISTINCT
:剔除结果中的重复项后,从关系中选择所有匹配的行。named_expression
:具有指定名称的表达式。通常,它表示一个列表达式。语法是:expression [AS] [alias]
from_item
:指定查询的输入源。它可以是以下内容之一:PIVOT
:PIVOT 子句用于数据透视;我们可以根据特定的列值得到聚合值。LATERAL VIEW
:LATERAL VIEW 子句与诸如 EXPLODE 之类的生成器函数结合使用,后者将生成包含一行或多行的虚拟表。横向视图将行应用于每个原始输出行。WHERE
:根据提供的谓词筛选 FROM 子句的结果。GROUP BY
:指定用于对行进行分组的表达式。它与聚合函数(MIN、MAX、COUNT、SUM、AVG等)结合使用,根据分组表达式和每个组中的聚合值对行进行分组。当 FILTER 子句附加到聚合函数时,只将匹配的行传递给该函数。HAVING
:指定筛选 GROUP BY 生成的行所依据的谓词。HAVING子句用于在执行分组后过滤行。如果指定 HAVING 时没有 GROUP BY,则表示 GROUP BY 没有分组表达式(全局聚合)。ORDER BY
:指定查询的完整结果集的行的顺序。输出行跨分区排序。此参数与SORT BY、CLUSTER BY 和 DISTRIBUTE BY 互斥,不能一起指定。SORT BY
:指定在每个分区中对行进行排序的顺序。此参数与 ORDER BY 和CLUSTER BY 互斥,不能一起指定。CLUSTER BY
:指定一组用于重新分区和对行排序的表达式。使用此子句与同时使用 DISTRIBUTE BY 和 SORT BY 具有相同的效果。DISTRIBUTE BY
:指定用于重新分区结果行的表达式集。此参数与 ORDER BY 和 CLUSTER BY 互斥,不能一起指定。LIMIT
:指定语句或子查询可以返回的最大行数。此子句主要与 ORDER BY 结合使用,以产生确定的结果。boolean_expression
:指定计算结果类型为布尔值的任何表达式。可以使用逻辑运算符(AND、OR)将两个或多个表达式组合在一起。expression
:指定计算为值的一个或多个值、运算符和SQL函数的组合。named_window
:为一个或多个源窗口规范指定别名。源窗口规范可以在查询的窗口定义中引用。regex_column_names
:当 spark.sql.parser.quotedRegexColumnNames 为true时,SELECT 语句中引用的标识符(使用反勾号```)将被解释为正则表达式,SELECT语句可以采用基于 regex 的列规范。例如,下面的SQL只取c列:SELECT `(a|b)?+.+` FROM (
SELECT 1 as a, 2 as b, 3 as c
)
TRANSFORM
:指定配置 hive-style 的转换查询规范,以通过分叉和运行用户指定的命令或脚本来转换输入。更新时间:2021-06-29 22:07:03 标签:sql spark 语法