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

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 的任何列。

  • 不要求 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)