首页 > 解决方案 > 在配置单元中更新数组数据类型时获取空值

问题描述

我创建了一个配置单元表,如下所示:

create table arraytbl (id string, model string, cost int, colors array <string>,size array <float>) row format delimited fields terminated by ',' collection items terminated by '#';

尝试使用保存在文件中的以下数据插入少量记录:

J8,Samsung_J8,12000,(red#blue#green),(8.9#10.4#9.9) Y2,Redmi_Y2,8000,(violet),(1.5#3.5#1.9) A1,Samsung_A1,17000,(yellow#white),(1.1#5.5#5.4) S7,Honor_S7,10000,(shine#dull#new#blue#darkblue#raksha),(1.1#5.5#5.4) XP,Sony_XP,17000,(bcd#efgh#ikkdla#pdia),(1.4#5.5#8.9#10.4#9.9#5.6) X,iPhoneX,68000,(adadad),(1.4#5.5#8.9#10.4#9.9#5.8)

使用以下命令加载数据: load data local inpath 'products.csv' into table arraytbl;

数据被加载到表中,选择 * 获取结果为:

J8 Samsung_J8 12000 ["(red","blue","green)"] [null,10.4,null] Y2 Redmi_Y2 8000 ["(violet)"] [null,3.5,null] A1 Samsung_A1 17000 ["(yellow","white)"] [null,5.5,null] S7 Honor_S7 10000 ["(shine","dull","new","blue","darkblue","raksha)"] [null,5.5,null] XP Sony_XP 17000 ["(bcd","efgh","ikkdla","pdia)"] [null,5.5,8.9,10.4,9.9,null] X iPhoneX 68000 ["(adadad)"] [null,5.5,8.9,10.4,9.9,null]

问题是字段大小的不需要的“空”值,它是一个浮点数组。例如,对于第一行,字段的值应为 8.9,10.4,9.9。而值为 null、10.4 和 null。所以数组中的第一个和最后一个元素正在获取空值。这对所有行都是一样的。

有人可以告诉我我的查询或我正在使用的数据有什么问题吗?

标签: hive

解决方案


colors数组也加载错误:

["(shine","dull","new","blue","darkblue","raksha)"]- 第一个和最后一个元素有括号。这对于数据类型是完全可以接受的,strings但不可能强制转换float,这就是为什么只有第一个和最后一个浮点数是 NULL 的原因。

删除括号,它将加载良好。

或者,您可以将它们加载到 中array<string>,这将导致:["(8.9","10.4","9.9)"]对于第一行。并且您可以在选择时删除括号


推荐阅读