实战(1)-Flink SQL引擎数据类型强制转换指南

数据类型Flink并不会进行隐式转换。梳理三种数据抽取场景下必须使用CAST函数的数据类型转换情况。

1、Oracle→Iceberg

1.1. NUMBER(p,0) → BIGINT / INT

原因: Oracle的NUMBER类型在Flink CDC连接器中统一映射为DECIMAL,而Iceberg目标表若定义为BIGINT或INT,Flink不会自动隐式转换,直接报column type不匹配错误。

-- Oracle: patient_id NUMBER(18,0)
-- Iceberg目标: patient_id BIGINT

-- ❌ 错误写法(直接映射,报ValidationException)
INSERT INTO iceberg_table
SELECT patient_id FROM oracle_source;

-- ✅ 正确写法
INSERT INTO iceberg_table
SELECT CAST(patient_id AS BIGINT) AS patient_id FROM oracle_source;

1.2. NUMBER(p,s) → DECIMAL(p,s) 精度不匹配

原因: Oracle NUMBER(18,4) 经Flink CDC读取后可能被推断为 DECIMAL(38,10) 等默认精度,若Iceberg目标表定义为 DECIMAL(18,4),精度不一致时必须显式转换。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ben@dw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值