【问题标题】:getting null values while updating array datatype in hive在配置单元中更新数组数据类型时获取空值
【发布时间】:2018-09-14 12:01:18
【问题描述】:

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

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


    【解决方案1】:

    colors 数组也加载错误:

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

    去掉括号就可以正常加载了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 2019-11-17
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多