clickhouse数据库insert select语句报错Code: 44. DB::Exception: Array(Int32) cannot be inside Nullable column

背景

clickhouse数据库中,如何使用insert select语句将Nullable字段写入非null的字段中报错,Code: 44. DB::Exception: Array(Int32) cannot be inside Nullable column.

原因是源表中字段为Nullable的,插入到Array(Int32) 中,类型不匹配。Array类型只能接收非Nullable字段。

解决方法

对源字段进行Null判断,并设置默认值。
注意,我使用的是23.4.6.25版本的ck,这个版本中,只能使用ifNull函数来进行空值判断,使用if,并在条件中写column is null是无法识别的。
如下:

-- 正确
insert into target_table (ID, ArrayClumn)
select ID, ifNull(from_string, '[]')
from source_table;

-- 错误
insert into target_table (ID, ArrayClumn)
select ID, if(from_string is null, '[]', from_string)
from source_table;

-- 错误
insert into target_table (ID, ArrayClumn)
select ID, if(isNull(from_string), '[]', from_string)
from source_table;

如果你的条件中还包含其他提交,可以包含在ifNull函数里,只要最外层是ifNull即可识别。例如:

-- 正确
insert into target_table (ID, ArrayClumn)
select ID, ifNull(if(from_string = 'null', '[]', from_string), '[]')
from source_table;

-- 错误
insert into target_table (ID, ArrayClumn)
select ID, if(from_string is null or from_string = 'null', '[]', from_string)
from source_table;

希望对大家有帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值