Flink CDC把mysql的表迁移和同步到doris,因为doris不支持doris类型,flink-connector-mysql-cdc 把blob类型变成了text类型了,而且blob中的数据同步到doris的text字段之后变成了base64编码了,为什么呢?
Flink CDC 在处理 MySQL 的 BINARY/VARBINARY 类型时,会将其转换为 Flink 支持的 RowDataType。对于 BINARY/VARBINARY 类型的字段,Flink CDC 默认会将其转换为 STRING 类型。因此,当您将数据从 MySQL 迁移到 Doris 时,如果 MySQL 中的 BINARY/VARBINARY 类型字段被转换为了 STRING 类型,那么在 Doris 中就会出现类似的问题。
为了解决这个问题,您可以在 Flink CDC 中显式地指定 BINARY/VARBINARY 类型字段的数据类型为 BYTES。这样,Flink CDC 就会将这些字段正确地转换为 BYTES 类型,而不会将其转换为字符串类型。具体来说,您可以使用以下代码来指定 BINARY/VARBINARY 类型字段的数据类型:
// 定义表结构
Table schema = TableSchema.newBuilder()
.column("id", DataTypes.INT())
.column("name", DataTypes.STRING())
.column("data", DataTypes.BYTES()) // 显式指定 BINARY/VARBINARY 类型字段的数据类型为 BYTES
.build();
// 创建源表
SourceTable table = SourceTable.forPath(path, schema);
通过这种方式,Flink CDC 就可以正确地处理 BINARY/VARBINARY 类型字段,并将其迁移到 Doris 中。
在 Flink CDC 迁移过程中,当从 MySQL 中读取 BLOB 类型数据并将其同步到 Doris 时,Flink-connector-mysql-cdc 将 BLOB 类型转换为 TEXT 类型,并且将原始二进制数据以 base64 编码的形式存储。这是因为 Doris 不支持 BLOB 类型,而 TEXT 类型可以容纳较大的字符串,因此被作为替代方案。
以下是一些关于为什么会出现这种现象的原因:
类型兼容性:
base64编码:
默认行为:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。