原因
写hive sql的时候,用null给复杂类型的列赋值了。null不能转成对应的复杂类型而导致的报错。比如我这次要做的是c、b表有复杂类型这一列。a表没有。要把a表数据导入c,用的insert into table c select a.*,null from a.就会报错。null这个值,在读取数据的时候,没有值会返回null,用来做“占位”的,但是赋值的时候不能简单用null赋值。
解决方法
- 用udf,自己开发或用第三方的看需要。
- 用另外的列数据赋值。比如我这次要做的是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>这种内部字段类型也定义了的 | 不行 |
在HiveSQL中,尝试为复杂类型列赋null值会导致错误。null在读取时可能表示无值,但在插入时需使用特定方法,如自定义UDF或使用已有数据代替。例如,将A表数据导入C表时,若C表有A表没有的复杂类型列,应通过JOIN操作从其他表获取对应数据。对于不同数据类型,如bigint和int允许null,而array或map等复杂类型则需要特殊处理,如使用array()或array()初始化。
1466

被折叠的 条评论
为什么被折叠?



