SELECT

从一个或多个表中检索结果集。

语法

[ 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 [ , ... ] }
  FROM { from_item [ , ... ] }
  [ PIVOT clause ]
  [ LATERAL VIEW clause ] [ ... ]
  [ WHERE boolean_expression ]
  [ GROUP BY expression [ , ... ] ]
  [ HAVING boolean_expression ]

参数

  • with_query

    主查询块前面的一个或多个通用表表达式。稍后可在 FROM 子句中引用这些表表达式。 若要在 FROM 子句中找出重复的子查询块,这很有用,它还能提高查询的可读性。

  • 提示

    提示可帮助 Spark 优化器作出更好的计划决策。 Spark 支持使用会影响联接策略的选择和数据的重新分区的提示。

  • ALL

    选择关系中的所有匹配行。 默认情况下启用。

  • DISTINCT

    删除结果中的重复项后,从关系中选择所有匹配的行。

  • named_expression

    具有指定名称的表达式。 表示列表达式。

    语法: expression [AS] [alias]

  • from_item

    查询的输入源。 下列类型作之一:

  • PIVOT

    用于数据透视;可根据特定的列值获取聚合值。

  • LATERAL VIEW

    与生成器函数(例如 EXPLODE)结合使用,将生成包含一个或多个行的虚拟表。 LATERAL VIEW 将行应用于每个原始输出行。

  • WHERE

    根据提供的谓词筛选 FROM 子句的结果。

  • GROUP BY

    用于对行进行分组的表达式。 它与聚合函数(MINMAXCOUNTSUMAVG)结合使用,基于分组表达式和每个组中的聚合值对行进行分组。 将 FILTER 子句附加到聚合函数时,只会将匹配的行传递给该函数。

  • HAVING

    用于筛选由 GROUP BY 生成的行的谓词。 HAVING 子句用于在执行分组后对行进行筛选。 如果指定的 HAVING 不带 GROUP BY,则表示不带分组表达式的 GROUP BY(全局聚合)。

  • ORDER BY

    查询的完整结果集的行顺序。 跨分区对输出行进行排序。 此参数与 SORT BYCLUSTER BYDISTRIBUTE BY 互斥,不能一起指定。

  • SORT BY

    用于对每个分区中的行进行排序的排序依据。 此参数与 ORDER BYCLUSTER BY 互斥,不能一起指定。

  • CLUSTER BY

    一组表达式,用于对行进行重新分区和排序。 使用此子句与同时使用 DISTRIBUTE BYSORT BY 的效果相同。

  • DISTRIBUTE BY

    一组表达式,作为对结果行进行重新分区的依据。 此参数与 ORDER BYCLUSTER BY 互斥,不能一起指定。

  • LIMIT

    语句或子查询可返回的最大行数。 此子句通常与 ORDER BY 结合使用来生成确定的结果。

  • boolean_expression

    计算得出 Boolean 结果类型的任何表达式。 可使用逻辑运算符(ANDOR)将两个或多个表达式组合在一起。

  • expression

    计算得出值的一个或多个值、运算符和 SQL 函数的组合。

  • named_window

    一个或多个源窗口规范的别名。 可在查询的窗口定义中引用源窗口规范。

选择 Delta 表

除标准 SELECT 选项外,Delta 表还支持本部分中介绍的按时间顺序查看选项。 有关详细信息,请参阅查询表的旧快照(按时间顺序查看)

AS OF 语法

SELECT * FROM table_identifier TIMESTAMP AS OF timestamp_expression
SELECT * FROM table_identifier VERSION AS OF version

where

  • timestamp_expression 可以是下列项中的任意一项:
    • '2018-10-18T22:15:12.013Z',即可以强制转换为时间戳的字符串
    • cast('2018-10-18 13:36:32 CEST' as timestamp)
    • '2018-10-18',即日期字符串
    • 在 Databricks Runtime 6.6 及更高版本中:
      • current_timestamp() - interval 12 hours
      • date_sub(current_date(), 1)
      • 本身就是时间戳或可强制转换为时间戳的任何其他表达式
  • version 是可以从 DESCRIBE HISTORY table_spec 的输出中获取的 long 值。

timestamp_expressionversion 都不能是子查询。

示例

SELECT * FROM events TIMESTAMP AS OF '2018-10-18T22:15:12.013Z'
SELECT * FROM delta.`/mnt/delta/events` VERSION AS OF 123

@ 语法

使用 @ 语法来指定时间戳或版本。 时间戳必须采用 yyyyMMddHHmmssSSS 格式。 你可以通过在版本前附加一个 v@ 后指定版本。 例如,若要查询表 events 的版本 123,请指定 events@v123

示例

SELECT * FROM events@20190101000000000
SELECT * FROM events@v123