当前位置: 首页 > 知识库问答 >
问题:

如何定义具有行时间属性的apache flink表

公孙慎之
2023-03-14
StreamTableEnvironment fsTableEnv = StreamTableEnvironment.create(streamExecutionEnvironment, fsSettings);
String allEventsTable = "allEventsTable";
        fsTableEnv.connect(new Kafka()
                            .version("0.11")
                            .topic("events")
                            .property("bootstrap.servers", "localhost:9092")
                            .property("group.id", "dummyquery").startFromLatest())
                .withSchema(new Schema()
                    .field("rule_id", Types.INT)
                    .field("sourceAddress", Types.STRING)
                    .field("deviceProduct", Types.STRING)
                    .field("destHost", Types.STRING)
                    .field("extra", Types.STRING)
                    .field("rowtime", Types.SQL_TIMESTAMP)
                        .rowtime(new Rowtime().timestampsFromField("rowtime").watermarksPeriodicBounded(2000))

                )
                .withFormat(new Json().failOnMissingField(false).deriveSchema())
                .inAppendMode()
                .registerTableSource(allEventsTable);

         Table result = fsTableEnv.sqlQuery("select * from allEventsTable where sourceAddress='12345431'");

        DataStream alert = fsTableEnv.toAppendStream(result, Row.class);
        alert.print();

Exception in thread "main" org.apache.flink.table.api.ValidationException: Field 'rowtime' could not be resolved by the field mapping.
    at org.apache.flink.table.sources.TableSourceValidation.resolveField(TableSourceValidation.java:245)
    at org.apache.flink.table.sources.TableSourceValidation.lambda$validateTimestampExtractorArguments$6(TableSourceValidation.java:202)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:545)
    at java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
    at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:438)
{"rule_id":"", "rowtime":"2020-07-23 13:10:13","sourceAddress":"12345433","deviceProduct":"234r5t", "destHost":"876543", "extra":"dummy"}

共有1个答案

徐凌
2023-03-14

恐怕这是一个窃听器。我创建了https://issues.apache.org/jira/browse/flink-15801来跟踪它。

如果更改行时定义中的一个字段名,您应该能够解决这一问题。更改逻辑字段的名称:

.field("timeAttribute", Types.SQL_TIMESTAMP)
    .rowtime(new Rowtime().timestampsFromField("rowtime").watermarksPeriodicBounded(2000))

或起源的物理场:

.field("rowtime", Types.SQL_TIMESTAMP)
    .rowtime(new Rowtime().timestampsFromField("timestamp").watermarksPeriodicBounded(2000))
 类似资料:
  • 我正在尝试使用Javascript选择此复选框 下面的代码可以工作,但并不理想 我试过这些 但它们并不起作用。有什么想法能让这件事成功吗? 数据值未硬编码的更新代码

  • 问题内容: 我最初问这个问题。我以为自定义视图的加载时间较慢的原因是由于将多个视图彼此叠加,或者可能是由于某些递归问题。但是,在切出越来越多的代码以查看会有什么不同之后,最终取决于我是否有礼物。因为问题的明显根源与我在第一个问题中所期望的完全不同,所以我决定开始一个新问题,而不是在旧问题上添加冗长的更新。 我用两个视图控制器设置了测试项目。第一个视图控制器上的按钮将show segue调用给第二个

  • 我们正在使用Spring数据,并试图创建一个带有子查询的自定义查询,结果投影有一个数组和其他属性,我们的问题是子查询数组。 预测如下:

  • 问题内容: 我想以编程方式将bean定义添加到应用程序上下文中,但是该定义的某些属性是该上下文中的其他bean(我知道它们的名称)。我该怎么做才能注入那些属性? 例如: 我正在使用Spring 3.0。 问题答案: 用途:

  • 我有如下表格和: 我的型号分类如下:和: 这样做