apache-flink - 查询结果的字段类型与注册的 TableSink 不匹配
问题描述
table.printSchema() 打印的查询结果模式:
|-- deviceId: BIGINT
|-- channel: STRING
|-- schemaId: BIGINT
|-- productId: BIGINT
|-- schema: LEGACY('RAW', 'ANY<com.yunmo.iot.schema.Schema>')
执行 table.toRetractStream[DeviceSchema].print() 时出现错误,抛出异常:
Exception in thread "main" org.apache.flink.table.api.ValidationException: Field types of query result and registered TableSink do not match.
Query schema: [deviceId: BIGINT, channel: STRING, schemaId: BIGINT, productId: BIGINT, schema: RAW('com.yunmo.iot.schema.Schema', ?)]
Sink schema: [deviceId: BIGINT, channel: STRING, schemaId: BIGINT, productId: BIGINT, schema: LEGACY('RAW', 'ANY<com.yunmo.iot.schema.Schema>')]
com.yunmo.iot.schema.Schema 是一个泛型类型。
Query schema 的 schema 字段从 LEGACY('RAW' 变为 RAW,但 Sink schema 仍然是 LEGACY('RAW'
解决方案
不幸的是,Flink 的 Table & SQL API 的类型系统返工还没有完成,可能并不是所有的层都可以很好地协同工作。你是如何定义你的数据类型的?你在混合DataType
和弃用Types
吗?一致地使用Types
现在应该可以解决问题。否则,请随时在 Flink 的问题跟踪器上打开一个问题。
推荐阅读
- java - Eclipse IDE 支持 Java 14 早期访问版本
- python - 我想将 Python 转换为导入 tensorflow 的 exe
- sum - 如何使用 DAX Power BI 添加组内每行的总和
- javascript - 如何从 API 获取数据、处理数据并在解析数据后呈现所有内容?
- git - VS Code Git 扩展 API
- c++ - 如何找到位数大于5的数字的总和
- ruby-on-rails - 在 Windows 中,“Rails new”不会创建所有文件和文件夹,会停在 -> 从“.”运行 git init
- python - 为什么`from django import *`不能导入所有子模块?
- python - 如何修改另一个文件中的特定变量并在其他不同的文件中使用它?
- python - 如何关闭一个选项卡,然后使用 selenium 转到另一个选项卡?