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 | star ] [ , ... ] | 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 子句中重复的子查询块,并提高查询的可读性。 
- 
    提示 可以指定提示以帮助 Spark 优化器做出更好的规划决策。目前 Spark 支持影响连接策略选择和数据重新分区的提示。 
- 
    ALL 从关系中选择所有匹配的行,默认启用。 
- 
    DISTINCT 从关系中选择所有匹配的行,并在结果中删除重复项。 
- 
    named_expression 带有指定名称的表达式。通常,它表示列表达式。 语法: expression [[AS] alias]
- 
    星号 *(星号)子句用于从 FROM 子句中的一个或所有关系中选择所有或大部分列。
- 
    from_item 指定查询的输入源。它可以是以下之一 
- 
    PIVOT PIVOT子句用于数据透视;我们可以根据特定的列值获取聚合值。
- 
    UNPIVOT UNPIVOT子句将列转换为行。它是PIVOT的反向操作,但除了值的聚合部分。
- 
    LATERAL VIEW LATERAL VIEW子句与生成器函数(如EXPLODE)结合使用,后者将生成一个包含一行或多行的虚拟表。LATERAL VIEW会将这些行应用于每个原始输出行。
- 
    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结果类型的表达式。两个或多个表达式可以使用逻辑运算符(AND,OR)组合在一起。
- 
    表达式 指定一个或多个值、运算符和 SQL 函数的组合,其结果为一个值。 
- 
    命名窗口 为一个或多个源窗口规范指定别名。源窗口规范可以在查询中的窗口定义中引用。 
- 
    regex_column_names 当 spark.sql.parser.quotedRegexColumnNames为 true 时,SELECT语句中带引号的标识符(使用反引号)将被解释为正则表达式,并且SELECT语句可以接受基于正则表达式的列规范。例如,以下 SQL 将只选择列cSELECT `(a|b)?+.+` FROM ( SELECT 1 as a, 2 as b, 3 as c )
- 
    TRANSFORM 指定一个 Hive 风格的 TRANSFORM 查询规范,通过派生和运行用户指定的命令或脚本来转换输入。