FLINK SQL:row.getFieldsAs 返回 LocalDateTime 而不是时间戳?
Flink:1.13.2
我有一个 StreamTableEnvironment tableEnv
从 KafkaSource 读取流数据。 从这个 tableEnv 中,我过滤数据并将其转换回 DataStream。
DataStream<Row> myStreamData = env.fromSource(source, WatermarkStrategy.noWatermarks(),"mySource");
tableEnv.createTemporaryView("myTable", myStreamData);
Table mytable = tableEnv.sqlQuery("select source_timestamp, id from mytable");
DataStream<Row> filteredDatastream = tableEnv.toChangelogStream(myTable);
source_timestamp 的类型是 java.sql.Timestamp,id 是 String。
后来,我从 filteredDatastream
访问数据,并遇到 row.getFieldsAs(source_timestamp)
返回 LocalDateTime 而不是时间戳的问题。
System.out.println(filteredDatastream.getTransformation().getOutputType());
/*
Out: (
`source_timestamp` TIMESTAMP(9), // Is a TIMESTAMP
`trip_id` STRING
)
*/
filteredDatastream.map(
row -> {
System.out.println(row.getFieldAs("source_timestamp").getClass());
/*
Out: class java.time.LocalDateTime // (not java.sql.Timestamp)
*/
return row;
}
);
如何让 row.getFieldAs("source_timestamp")
成为 java.sql.Timestamp
而不是 java.time.LocalDateTime
而无需之后投射?知道 java.sql.Timestamp
似乎是由 flink 处理的 数据类型提取。
Flink: 1.13.2
I'm having a StreamTableEnvironment tableEnv
that read streaming data from a KafkaSource.
From this tableEnv, I filter my data and transform it back to a DataStream.
DataStream<Row> myStreamData = env.fromSource(source, WatermarkStrategy.noWatermarks(),"mySource");
tableEnv.createTemporaryView("myTable", myStreamData);
Table mytable = tableEnv.sqlQuery("select source_timestamp, id from mytable");
DataStream<Row> filteredDatastream = tableEnv.toChangelogStream(myTable);
The type for source_timestamp is java.sql.Timestamp and id is String.
Later on, I access my data from filteredDatastream
and face the issue where row.getFieldsAs(source_timestamp)
returns a LocalDateTime instead of a Timestamp.
System.out.println(filteredDatastream.getTransformation().getOutputType());
/*
Out: (
`source_timestamp` TIMESTAMP(9), // Is a TIMESTAMP
`trip_id` STRING
)
*/
filteredDatastream.map(
row -> {
System.out.println(row.getFieldAs("source_timestamp").getClass());
/*
Out: class java.time.LocalDateTime // (not java.sql.Timestamp)
*/
return row;
}
);
How can I get row.getFieldAs("source_timestamp")
to be a java.sql.Timestamp
instead of java.time.LocalDateTime
without having to cast afterward? Knowing that java.sql.Timestamp
seems to be handled by flink data-type-extraction.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论