SELECT 语句 - Amazon Kinesis Data Analytics
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

SELECT 语句

SELECT 从流中检索行。您可以使用 SELECT 作为顶级语句、作为涉及集合运算的查询的一部分或作为另一个语句的一部分,包括 (举例来说) 作为查询传递到 UDX 中时。有关示例,请参阅本指南中的主题 INSERT、IN、EXISTS 和 CREATE PUMP

本指南中的主题 SELECT 子句GROUP BY 子句、流式 GROUP BY、ORDER BY 子句HAVING 子句WINDOW 子句 (滑动窗口)WHERE 子句中介绍了 SELECT 语句的子句。

语法

<select> :=    SELECT [ STREAM] [ DISTINCT | ALL ]    <select-clause>    FROM <from-clause>    [ <where-clause> ]    [ <group-by-clause> ]    [ <having-clause> ]    [ <window-clause> ]    [ <order-by-clause> ]

STREAM 关键字以及流式 SQL 的原则

SQL 查询语言专为查询存储关系而设计,将生成有限相关的结果。

流式 SQL 的基础是 STREAM 关键字,后者用于指示系统计算关系的时间微分。关系的时间微分是关系在时间上的变化。流式查询可计算关系在时间上的变化,或从多个关系计算出的表达式的变化。

要获得 Amazon Kinesis Data Analytics 中的关系的时间微分,我们可使用 STREAM 关键字:

SELECT STREAM * FROM Orders

如果我们在 10:00 开始运行该查询,它将在 10:15 和 10:25 生成行。在 10:30,该查询仍在运行,以等待将来的订单:

ROWTIME  orderId custName   product quantity ======== ======= ========== ======= ======== 10:15:00     102 Ivy Black  Rice           6 10:25:00     103 John Wu    Apples         3

在此处,系统表示“我在 10:15:00 执行了查询 SELECT * FROM Orders 并在 10:14:59.999 发现一个行未在结果中出现”。它在 ROWTIME 列中生成了值为 10:15:00 的行,因为那是行出现的时间。以下是流的核心概念:随着时间的推移保持更新的关系。

您可以将此定义应用于更复杂的查询。例如,流

SELECT STREAM * FROM Orders WHERE quantity > 5

有一个行位于 10:15,但没有行位于 10:25,因为关系

SELECT * FROM Orders WHERE quantity > 5

在订单 102 于 10:15 下达时从空白转移到了一个行,但在订单 103 于 10:25 下达时未受影响。

我们可以将相同的逻辑应用于涉及 SQL 运算符的任意组合的查询。涉及 JOIN、GROUP BY、子查询、集合运算 UNION、INTERSECT、EXCEPT 甚至是限定词 (如 IN 和 EXISTS) 的查询均在转换为流之前进行了明确定义。结合了流和存储关系的查询也进行了明确定义。