本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
ROWTIME
ROWTIME 是一个运算符和系统列,它返回创建流的特定行的时间。
它有四种截然不同的方式使用:
作为运算符
作为直播的系统列
作为列别名,要覆盖当前行上的时间戳
作为桌子里的普通专栏
有关更多详细信息,请参阅主题时间戳、ROWTIME 和CURRENT_ROW_时间戳。
ROWTIME 运算符
在流式查询的 SELECT 子句中使用时,不需要前面的 “别名” 限定。,ROWTIME 是一个计算结果为即将生成的行的时间戳的运算符。
它的类型始终是时间戳不是 NULL。
ROWTIME 系统列
每个直播都有一个 ROWTIME 专栏。要从查询中引用此列,请使用流名称(或别名)对其进行限定。例如,以下联接查询返回三个时间戳列:其输入流的系统列和生成行的时间戳。
SELECT STREAM o.ROWTIME AS leftRowtime, s.ROWTIME AS rightRowtime, ROWTIME AS joinRowtime FROM Orders AS o JOIN Shipments OVER (RANGE INTERVAL '1' HOUR FOLLOWING) AS s ON o.orderId = s.orderId leftRowtime rightRowtime joinRowtime =================== =================== =================== 2008-02-20 10:15:00 2008-02-20 10:30:00 2008-02-20 10:15:00 2008-02-20 10:25:00 2008-02-20 11:15:00 2008-02-20 10:25:00 2008-02-20 10:25:30 2008-02-20 11:05:00 2008-02-20 10:25:30
事实上,LeftroWTime 始终等于 JoinrowTime,因为指定了连接,以便输出行时间戳始终等于订单流中的 ROWTIME 列。
因此,每个串流查询都有一个 ROWTIME 列。但是,ROWTIME 列不会从顶级 JDBC 查询返回,除非您将其明确包含在 SELECT 子句中。例如:
CREATE STREAM Orders( "orderId" INTEGER NOT NULL, "custId" INTEGER NOT NULL); SELECT columnName FROM ALL_STREAMS; columnName ========== orderId custId SELECT STREAM * FROM Orders; orderId custId ======= ====== 100 501 101 22 102 699 SELECT STREAM ROWTIME, * FROM Orders; ROWTIME orderId custId =================== ======= ====== 2008-02-20 10:15:00 100 501 2008-02-20 10:25:00 101 22 2008-02-20 10:25:30 102 699
这主要是为了确保与 JDBC 的兼容性:直播 Order 声明了两列,因此 “SELECT STREAM *” 应返回两列是有道理的。