我有一个名为 A 的Kafka主题。
主题 A 中的数据格式为:
{ id : 1, name:stackoverflow, created_at:2017-09-28 22:30:00.000}
{ id : 2, name:confluent, created_at:2017-09-28 22:00:00.000}
{ id : 3, name:kafka, created_at:2017-09-28 24:42:00.000}
{ id : 4, name:apache, created_at:2017-09-28 24:41:00.000}
现在在消费者方面,我想只获得一小时窗口的最新数据意味着我需要每隔一小时从主题中获取基于created_at的最新值
我的预期输出是:
{ id : 1, name:stackoverflow, created_at:2017-09-28 22:30:00.000}
{ id : 3, name:kafka, created_at:2017-09-28 24:42:00.000}
我认为这可以通过ksql解决,但我不确定。请帮帮我。
提前感谢。
答案 0 :(得分:4)
是的,您可以使用KSQL。请尝试以下方法:
CREATE STREAM S1 (id BIGINT, name VARCHAR, created_at VARCHAT) WITH (kafka_topic = 'topic_name', value_format = 'JSON');
CREATE TABLE maxRow AS SELECT id, name, max(STRINGTOTIMESTAMP(created_at, 'yyyy-mm-dd hh:mm:ss.SSS')) AS creted_at FROM s1 WINDOW TUMBLING (size 1 hour) GROUP BY id, name;
结果将具有linux时间戳格式的created_at
时间。您可以在新查询中使用TIMESTAMPTOSTRING udf将其更改为所需的格式。
如果您发现任何问题,请通知我。