Spark SQL----SELECT语句

Spark SQL----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语句定义为

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和运行用户指定的命令或脚本来转换输入。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值