ORDER BY 子句 - Amazon Kinesis Data Analytics SQL 参考
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

ORDER BY 子句

如果流式查询的前导表达式基于时间且是单调的,则该查询可以使用 ORDER BY。例如,前导表达式基于 ROWTIME 列的流式查询可以使用 ORDER BY 执行以下操作:

  • 对流式 GROUP BY 的结果进行排序。

  • 对在流的固定时间窗口内到达的一批行进行排序。

  • 对窗口式联接执行流式 ORDER BY。

针对前导表达式的“基于时间且单调”要求意味着查询

CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM DISTINCT ticker FROM trades ORDER BY ticker

会失败,但是查询

CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM DISTINCT rowtime, ticker FROM trades ORDER BY ROWTIME, ticker

会成功。

注意

前面的示例使用 DISTINCT 子句从结果集中删除同一股票代码的重复实例,以便结果是单调的。

流式 ORDER BY 使用 ORDER BY 子句的 SQL-2008 兼容语法对行进行排序。它可以与 UNION ALL 语句组合使用,并且可以对表达式进行排序,例如:

CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM x, y FROM t1 UNION ALL SELECT STREAM a, b FROM t2 ORDER BY ROWTIME, MOD(x, 5)

ORDER BY 子句可以指定升序或降序的排序顺序,并且可以使用列序数以及指定(提及)选择列表中项目位置的序数。

注意

上述查询中的 UNION 语句从两个单独的流中收集记录以进行排序。

流式 ORDER BY SQL 声明

流式 ORDER BY 子句包括以下函数属性:

  • 收集行,直到流式 ORDER BY 子句中的单调表达式不发生更改。

  • 不要求流式 GROUP BY 子句在同一语句中。

  • 可以使用任何基本 SQL 数据类型为 TIMESTAMP、DATE、DECIMAL、INTEGER、FLOAT、CHAR 和 VARCHAR 的列。

  • 不要求 columns/expressions 在 ORDER BY 子句中必须出现在语句的 SELECT 列表中。

  • 应用 ORDER BY 子句的所有标准 SQL 验证规则。

以下查询是流式 ORDER BY 的一个示例:

CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM state, city, SUM(amount) FROM orders GROUP BY FLOOR(ROWTIME TO HOUR), state, city ORDER BY FLOOR(ROWTIME TO HOUR), state, SUM(amount)