Flink 1.4列'rowtime'在任何表中都找不到

时间:2017-12-22 20:28:01

标签: apache-flink flink-sql

我正在关注configure a TableSource with a rowtime attribute的文档。

我注册from django.contrib import admin from django.urls import include, path from . import views #the dot means look at the current directory - look for a module called views urlpatterns = [ #this is matching /music/ path('', views.index, name='index'), path("<album_id>/", views.detail, name="detail") 字段如下

timestamp

并收到以下错误:

  

线程“main”中的异常org.apache.flink.table.api.ValidationException:SQL验证失败。从第1行第64列到第1行第70列:在任何表中都找不到列'rowtime'       at org.apache.flink.table.calcite.FlinkPlannerImpl.validate(FlinkPlannerImpl.scala:93)       在org.apache.flink.table.api.TableEnvironment.sqlQuery(TableEnvironment.scala:561)       在oracle.flink.demo.KafkaSQLStream.main(KafkaSQLStream.java:62)   引起:org.apache.calcite.runtime.CalciteContextException:从第1行第64行到第1行第70列:在任何表中找不到列'rowtime'       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)       at java.lang.reflect.Constructor.newInstance(Constructor.java:423)       在org.apache.calcite.runtime.Resources $ ExInstWithCause.ex(Resources.java:463)

1 个答案:

答案 0 :(得分:1)

kafka中的字段称为timestamp,而不是rowtime。因此,您应该使用名称timestamp而不是rowtime来调用该属性。

请注意,TIMESTAMP是SQL中的关键字,因此您应该重命名timestamp属性或使用反引号(`)转义属性名称:

tEnv.sqlQuery(
  "SELECT tenant, message, SUM(frequency) " +
  "FROM kafka " +
  "GROUP BY HOP(`timestamp`, INTERVAL '1' SECOND, INTERVAL '5' SECOND), tenant, message");

顺便说一下。一天的BoundedOutOfOrderTimestamps实际上相当多。这可能会导致严重的处理延迟和状态大小,因为查询将在开始发布结果和丢弃状态之前收集数据一天。