Type mismatch affecting row number 0 and column type 'NUMBER'

test程序报错,Type mismatch affecting row number 0 and column type 'NUMBER'

is of type [java.lang.Long] and cannot be converted to required type [long]

因为下面的写法有错误,应该是Long.class应该是大写的Long。

long是原始数据类型,没有属性方法,只能进行数学运算,Long是long相对应的引用数据类型,它有方法和属性,一个没方法属性,一个有方法属性,这就是它们的区别。

 

在 Flink SQL 中,`UNION ALL` 操作要求参与联合的表在对应列上的数据类型必须一致。如果类型不匹配,Flink 会抛出类似 `UNION ALL type mismatch in column 8 error` 的错误信息,表明第 8 列的数据类型不一致。 ### 数据类型一致性要求 `UNION ALL` 操作要求每个对应的列在所有子查询中具有相同的数据类型。例如,如果第一个子查询的某一列是 `INT` 类型,那么第二个子查询中对应列也必须是 `INT` 类型,否则会触发类型不匹配异常[^1]。 以下是一个示例,展示如何通过显式转换数据类型来解决类型不匹配问题: ```sql SELECT id::INT, name::STRING, salary::DOUBLE FROM employees1 UNION ALL SELECT id::INT, name::STRING, salary::DOUBLE FROM employees2 ``` 在上述查询中,使用了类型转换操作符 `::` 来确保每个列的数据类型一致。也可以使用 `CAST` 函数实现相同的效果: ```sql SELECT CAST(id AS INT), CAST(name AS STRING), CAST(salary AS DOUBLE) FROM employees1 UNION ALL SELECT CAST(id AS INT), CAST(name AS STRING), CAST(salary AS DOUBLE) FROM employees2 ``` ### 类型转换的注意事项 - **精度丢失**:在某些情况下,将高精度类型转换为低精度类型(如 `DOUBLE` 转换为 `INT`)可能会导致精度丢失。需要确保转换不会影响业务逻辑。 - **字符串与数值类型转换**:将字符串转换为数值类型时,必须确保字符串内容可以被解析为数字,否则会抛出运行时异常。 - **复杂类型处理**:对于复杂类型(如 `ARRAY`、`MAP`、`ROW`),需要确保它们的嵌套结构完全一致,否则 `UNION ALL` 会失败。 ### 示例:解决 `UNION ALL` 类型不匹配问题 假设存在两个表 `tableA` 和 `tableB`,其中 `tableA.col8` 是 `INT` 类型,而 `tableB.col8` 是 `STRING` 类型,直接执行以下查询会失败: ```sql SELECT * FROM tableA UNION ALL SELECT * FROM tableB ``` 可以通过显式转换 `tableB.col8` 的类型来解决该问题: ```sql SELECT id, col2, col3, col4, col5, col6, col7, col8::INT FROM tableA UNION ALL SELECT id, col2, col3, col4, col5, col6, col7, CAST(col8 AS INT) FROM tableB ``` ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值