在执行联接时,在KSQL中使用自定义列或行时间列以外的其他列作为时间戳列

时间:2019-09-03 02:25:00

标签: ksql confluent-platform

嗨,我正在尝试KSQL,发现大多数文档提供了使用kstream或ktable直接连接的示例。可以说我有X队已经创建的2个流,并且我不能更改它或重新创建新的流,并且还想使用现有的流。在默认情况下,在联接时将timetime作为时间戳列考虑。除了在现有流中将rowtime列指定为timestamp列之外,还有什么方法可以考虑并考虑将其时间窗加入KSQL。

1 个答案:

答案 0 :(得分:0)

您可以使用WITH (TIMESTAMP='column_name')语法指定任何有效的列。例如:

CREATE STREAM ORDERS (ORDER_ID INT, 
                      CUSTOMER_ID INT, 
                      ORDER_TS VARCHAR, 
                      ORDER_TOTAL_USD DOUBLE, 
                      MAKE VARCHAR) 
  WITH (KAFKA_TOPIC='orders', VALUE_FORMAT='JSON', 
        TIMESTAMP='ORDER_TS', TIMESTAMP_FORMAT='yyyy-MM-dd''T''HH:mm:ssX');

这将使用ORDER_TS列作为任何与时间相关的KSQL操作(即窗口连接和聚合)中的时间戳。您可以通过将ROWTIME的值与ORDER_TS进行比较来验证这一点,并观察它们是否相同。

参考文献: