本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
ORDER BY 子句
如果流式查询的前导表达式是基于时间且单调的,则可以使用 ORDER BY。例如,其前导表达式基于 ROWTIME 列的流式查询可以使用 ORDER 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 使用符合 SQL-2008 的 ORDER BY 子句语法对行进行排序。它可以与 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
语句从两个单独的流中收集记录以进行排序。
通过 SQL 声明进行流式排序
流式传输 ORDER BY 子句包含以下功能属性:
收集行,直到流式传输 ORDER BY 子句中的单调表达式不发生变化。
不需要在同一语句中流式传输 GROUP BY 子句。
可以使用任何具有基本 SQL 数据类型为 TIMESTAMP、DATE、DECIAR、INTEGER、FLOAT、CHAR 的列。
不要求 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)