[Exceptions]hive Cannot convert column xx from void to array<int>.

在HiveSQL中,尝试为复杂类型列赋null值会导致错误。null在读取时可能表示无值,但在插入时需使用特定方法,如自定义UDF或使用已有数据代替。例如,将A表数据导入C表时,若C表有A表没有的复杂类型列,应通过JOIN操作从其他表获取对应数据。对于不同数据类型,如bigint和int允许null,而array或map等复杂类型则需要特殊处理,如使用array()或array()初始化。
摘要由CSDN通过智能技术生成

原因

写hive sql的时候,用null给复杂类型的列赋值了。null不能转成对应的复杂类型而导致的报错。比如我这次要做的是c、b表有复杂类型这一列。a表没有。要把a表数据导入c,用的insert into table c select a.*,null from a.就会报错。null这个值,在读取数据的时候,没有值会返回null,用来做“占位”的,但是赋值的时候不能简单用null赋值。

解决方法

  1. 用udf,自己开发或用第三方的看需要。
  2. 用另外的列数据赋值。比如我这次要做的是c、b表有这一列。a表没有。就insert into table c select a.*,b.column from a join b on a.id = b.id.

null转换的记录

数据类型是否可以用null赋值
bigint、int 等可以
string没试(哈哈哈哈
array以及array(string)这种元素类型也定义了的不行,有的可以用array()或array(‘’)来赋值
map以及map<string,string>这种元素类型也定义了的不行
struct以及struct<a:string>这种内部字段类型也定义了的不行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值