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

查询

语法

<query> :=     <select>   | <query> <set-operator> [ ALL ] <query>   | VALUES <row-constructor> { , <row-constructor> }...   | '(' <query> ')'  <set-operator> :=     EXCEPT   | INTERSECT   | UNION  <row-constructor> :=     [ ROW ] ( <expression> { , <expression> }... )

选择

上图中的 select 框表示任何 SELECT 命令;该命令在自己的页面中有详述。

集合运算符 (EXCEPT、INTERSECT、UNION)

集合运算符将使用集合运算组合由查询生成的行:

  • EXCEPT 将返回在第一个集合中但不在第二个集合中的所有行

  • INTERSECT 将返回同时在第一个集合和第二个集合中的所有行

  • UNION 将返回在任一集合中的所有行

在所有情况下,两个集合都必须具有相同的列数,并且列类型必须与分配兼容。生成的关系的列名称与第一个查询的列的名称相同。

使用 ALL 关键字后,运算符将使用数学上的多重集合的语义,这意味着不会消除重复的行。例如,如果特定行在第一个集合中出现 5 次,在第二个集合中出现 2 次,则 UNION ALL 将发出“行 3 + 2 = 5 次”。

EXCEPT 或 INTERSECT 当前不支持 ALL。

所有运算符都是左关联的,并且 INTERSECT 的优先级高于 EXCEPT 或 UNION,后两者具有相同的优先级。要覆盖默认优先顺序,您可以使用圆括号。例如:

SELECT * FROM a UNION SELECT * FROM b INTERSECT SELECT * FROM c EXCEPT SELECT * FROM d EXCEPT SELECT * FROM E

等效于全括号查询

( ( SELECT * FROM a    UNION    ( SELECT * FROM b      INTERSECT      SELECT * FROM c) )  EXCEPT  SELECT * FROM d ) EXCEPT SELECT * FROM e

流式集合运算符

UNION ALL 是可应用于流的唯一一个集合运算符。运算符的两端必须都为流;如果一端为流,另一端为关系,则是错误的。

例如,以下查询将生成一个通过电话或 Web 选取的顺序流:

SELECT STREAM *  FROM PhoneOrders UNION ALL SELECT STREAM *  FROM WebOrders

行时间生成。从流式 UNION ALL 发出的行的行时间与输入行的时间戳相同。

行时间边界:行时间边界是关于流的未来内容的断言。它指出流中的下一行将具有不早于边界值的 ROWTIME。例如,如果行时间边界是 2018-12-0223:23:07,则这告诉系统下一行将不早于 2018-12-0223:23:07 到达。行时间边界可用于管理数据流中的间隙,例如证券交易所过夜的间隙。

Amazon Kinesis Data Analytics 通过按时间戳合并传入行,确保 ROWTIME 列为升序。如果第一个集合的行时间戳为 10:00 和 10:30,第二个集合还只到达 10:15,Kinesis Data Analytics 会暂停第一个集合,并等待第二个集合到达 10:30。在这种情况下,如果第二个集合的生成者发送一个行时间边界,那将是有利的。

VALUES 运算符

VALUES 运算符将表示查询中的恒定关系。(另请参阅本指南的主题“SELECT”中的 VALUES 讨论。)

VALUES 可用作顶级查询,如下所示:

VALUES 1 + 2 > 3; EXPR$0 ====== FALSE VALUES    (42, 'Fred'),    (34, 'Wilma'); EXPR$0 EXPR$1 ====== ======    42 Fred    34 Wilma

请注意,系统已为匿名表达式生成任意列名称。您可以通过将 VALUES 放入子查询并使用 AS 子句来分配列名称:

SELECT * FROM (    VALUES        (42, 'Fred'),        (34, 'Wilma')) AS t (age, name); AGE NAME === ===== 42 Fred 34 Wilma