你遇到的问题是尝试将 TIMESTAMP(3) 类型列作为窗口策略的一部分,但 Flink 不支持这样做。这通常是由于你的 SQL 查询语法有问题或者没有正确的配置窗口属性造成的。
以下是几个可能导致此问题的原因及相应的解决方案:
SELECT ... FROM table_name WINDOW TUMBLE_STARTING OVER (PARTITION BY column ORDER BY timestamp_column ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
这里需要注意的是,timestamp_column 必须是你表中存在的字段名,否则也会报错。
这个问题是因为你的窗口表达式(例如 TUMBLE/WINDOW/FIRST_VALUE/TIMESTAMPDIFF 等)是在 TIMESTAMP 类型列上的时间戳属性 (TIMESTAMP) 上被应用的,而这种类型不适用于窗口运算符。为了修复此问题,你需要将窗口应用于具有适当时间单位的列。这通常意味着你应该有一个包含日期或小时级别的列作为时间戳字段。请参考以下示例以更好地理解如何调整窗口表达式:
val eventsTable = ... // your table with columns like id, date, hour, value ...
// Define the time attribute column as 'date' or another appropriate timestamp field.
val timeAttributeColumn = "date"
// Create an event stream from the table using the time attribute column for windowing strategy definition:
val eventsStream = TableConfig.create()
.setParallelism(parallelism)
.addInput(eventsTable)
eventsStream.add(new Window(
new TumbleOverlapping tumblingStrategy,
new FieldSet(timeAttributeColumn),
new WatermarkStrategy(),
new Time.timeUnit(TIMESTAMP_UTC))
);
// Execute and get results of the query
executionResult.print();
在这个例子中,“tumblingStrategy”,"timeAttributeColumn", 和 “WatermarkStrategy” 都应该是针对合适时间单位的相应参数。具体来说,它们应分别对应于适当的滚动策略(比如 TUMBLE),时间属性列名(这里假设为 'date' 或其他合适的列名),以及水印策略。
可能在尝试执行一个带有窗口计算的 SQL 查询。这里有一些建议来帮助您解决这个问题:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。