Flink中新的临时表看上去很棒,但是我还不能使它们起作用。由于我找不到任何有效的示例,所以我想知道是否有人可以使用它,并且可以指出我做错了什么。
这里有一些上下文:
查询:
SELECT s.id FROM sitemembership AS m, LATERAL TABLE (site(m.ts)) AS s WHERE m.siteId = s.id
设置:
// { "streamName": "sitemembership", "key": "siteId" }
Table table = tableEnv.fromDataStream(stream, String.join(",", rowTypeInfo.getFieldNames()) + ",ts.rowtime");
table.printSchema();
tableEnv.registerTable(streamName, table);
// { "streamName": "site", "key": "id" }
Table table = tableEnv.fromDataStream(stream, String.join(",", rowTypeInfo.getFieldNames()) + ",ts.rowtime");
TemporalTableFunction temporalTable = table.createTemporalTableFunction("ts", key);
tableEnv.registerFunction(streamName, temporalTable);
我没有任何行,也没有错误。我试图通过更改我注册为临时表的表来翻转查询,但没有成功。我还查看了“ ts”列,并获取了一些日期,这些日期使我相信我应该至少得到几行。
感谢您的帮助。
P.S。我正在从kafka的历史数据上运行此数据,该数据在“ id”上也是分区键
答案 0 :(得分:2)
您可以找到测试here形式的功能全面的“示例”(在文档here和{中或多或少地重复了这两个测试的内容(处理时间甚至时间)。 {3}}或here)。您可以从这些示例开始,然后逐步将它们转换为您的确切用例/场景。首先开始使用预定义的数据集,然后再切换到从Kafka读取数据,可能会有所帮助。
关于您的问题,从您的代码段中不清楚什么是错误的,以及一些潜在的问题:
assignTimestampsAndWatermarks()
中调用testEventTimeInnerJoin()
)。时间联接运算符仅在水印上发出数据。site
没有足够老的行可以与sitemembership
记录联接,则结果将为空。例如,如果来自site
的所有记录都具有年份2019
的时间字段,而sitemembership
仅具有来自2018
的记录。