Flink CDC里这个问题怎么搞,数据库是int1 not null,flink sql修改为tinyint、smallint、int、bigint都不行。postgresql flink sql一直提示类型不匹配,不晓得咋搞了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您描述的问题,Flink CDC在处理PostgreSQL数据库字段类型为int1 NOT NULL
时,尝试将其映射为Flink SQL中的TINYINT
、SMALLINT
、INT
或BIGINT
均提示类型不匹配。以下是针对该问题的详细分析和解决方案:
int1
类型实际上是BOOLEAN
类型的别名。PostgreSQL使用int1
来表示布尔值(0或1),而Flink SQL默认会将BOOLEAN
类型映射为BOOLEAN
,而不是整数类型。int1
,Flink CDC会将其识别为BOOLEAN
,而不是整数类型(如TINYINT
、SMALLINT
等)。int1
字段映射为整数类型时,会出现类型不匹配的错误。int1
字段实际存储的是布尔值(0或1),建议直接在Flink SQL中将该字段定义为BOOLEAN
类型。CREATE TABLE source_table (
id BIGINT,
is_active BOOLEAN, -- 将int1字段映射为BOOLEAN
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'connector' = 'postgres-cdc',
'hostname' = 'your-hostname',
'port' = '5432',
'username' = 'your-username',
'password' = 'your-password',
'database-name' = 'your-database',
'schema-name' = 'public',
'table-name' = 'your-table'
);
BOOLEAN
类型的数据。int1
修改为SMALLINT
或其他整数类型。ALTER TABLE your_table ALTER COLUMN your_column TYPE SMALLINT;
SMALLINT
,并在Flink SQL中正确映射。BOOLEAN
映射为整数类型,可以通过Flink的type.mapping
参数实现自定义类型映射。CREATE TABLE source_table (
id BIGINT,
is_active SMALLINT, -- 强制映射为SMALLINT
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'connector' = 'postgres-cdc',
'hostname' = 'your-hostname',
'port' = '5432',
'username' = 'your-username',
'password' = 'your-password',
'database-name' = 'your-database',
'schema-name' = 'public',
'table-name' = 'your-table',
'debezium.type.mapping' = 'boolean=smallint' -- 自定义类型映射
);
debezium.type.mapping
参数允许您指定PostgreSQL字段类型到Flink字段类型的映射规则。BOOLEAN
类型;如果字段存储的是其他整数值,则应修改字段类型为合适的整数类型。希望以上解决方案能够帮助您解决问题!如果仍有疑问,请提供更多上下文信息以便进一步分析。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。