一、描述
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语句定义为
SELECT [ hints , ... ] [ ALL | DISTINCT ] { [ [ named_expression | regex_column_names ] [ , ... ] | TRANSFORM (...) ] }
FROM { from_item [ , ... ] }
[ PIVOT clause ]
[ UNPIVOT clause ]
[ LATERAL VIEW clause ] [ ... ]
[ WHERE boolean_expression ]
[ GROUP BY expression [ , ... ] ]
[ HAVING boolean_expression ]
三、参数
- with_query
指定主查询块之前的公用表表达式(CTE)。允许稍后在FROM子句中引用这些表表达式。这有助于在FROM子句中抽象出重复的子查询块,并提高查询的可读性。 - hints
可以指定一些提示来帮助spark优化器做出更好的规划决策。目前,spark支持影响join策略选择和数据repartition的提示。 - ALL
从关系中选择所有匹配的行,在默认情况下启用。 - DISTINCT
移除结果中的重复项后,从关系中选择所有匹配的行。 - named_expression
具有指定名称的表达式。通常,它表示一个列表达式。
语法:expression [[AS] alias] - from_item
指定查询的输入源。它可以是以下其中一种:- Table relation
- Join relation
- Pivot relation
- Unpivot relation
- Table-value function
- Inline table
- [ LATERAL ] ( Subquery )
- File
- PIVOT
PIVOT子句用于数据透视;我们可以根据特定的列值获得聚合值。 - UNPIVOT
UNPIVOT子句将列转换为行。它与PIVOT相反,除了值的聚合。 - LATERAL VIEW
LATERAL VIEW子句与EXPLODE等生成器函数一起使用,后者将生成包含一个或多个行的虚拟表。LATERAL VIEW将行应用于每个原始输出行。 - WHERE
根据提供的谓词(predicates)过滤FROM子句的结果。 - GROUP BY
指定用于对行进行分组的表达式。这与聚合函数(MIN、MAX、COUNT、SUM、AVG等)一起使用,以基于分组表达式对行进行分组,并聚合每组中的值。当FILTER子句附加到聚合函数时,只有匹配的行被传递给该函数。 - HAVING
指定用于筛选GROUP BY生成的行的谓词(predicates)。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
为一个或多个源窗口specifications指定别名。源窗口specifications可以在查询的窗口定义中引用。 - regex_column_names
当spark.sql.parser.quotedRegexColumnNames为true时,SELECT语句中带引号的标识符(使用backticks)将被解释为正则表达式,SELECT语句可以采用基于regex的列specification。例如,下面的SQL将只使用c列:
SELECT `(a|b)?+.+` FROM (
SELECT 1 as a, 2 as b, 3 as c
)
- TRANSFORM
指定hive样式的transform查询规范,以通过forking和运行用户指定的命令或脚本来转换输入。
3483

被折叠的 条评论
为什么被折叠?



