SELECT - Amazon Kinesis Data Analytics

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

SELECT

SELECT 从流中检索行。您可以将 SELECT 用作顶级语句,也可以将其用作涉及集合操作的查询的一部分,也可以将其用作其他语句的一部分,包括(例如)作为查询传递到 UDX 时。有关示例,请参阅本指南中的主题 INSERT、IN、EXISTS 和 创建泵

本指南的主题SELECT 子句、、Streaming GROUP BY、GROUP BY 子句WINDOW 子句 (滑动窗口)WHERE 子句中描述了 SELEHAVING 子句 CT 语句的子句。ORDER BY 子句

语法

<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,查询仍在运行,正在等待future 订单:

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 的行,因为那是该行出现的时候。这是 stream 的核心思想:一种随着时间的推移不断更新的关系。

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

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 等限定符的查询在转换为流时定义明确。结合流和存储关系的查询也定义明确。