hive - 在配置单元中更新数组数据类型时获取空值
问题描述
我创建了一个配置单元表,如下所示:
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。所以数组中的第一个和最后一个元素正在获取空值。这对所有行都是一样的。
有人可以告诉我我的查询或我正在使用的数据有什么问题吗?
解决方案
colors
数组也加载错误:
["(shine","dull","new","blue","darkblue","raksha)"]
- 第一个和最后一个元素有括号。这对于数据类型是完全可以接受的,strings
但不可能强制转换float
,这就是为什么只有第一个和最后一个浮点数是 NULL 的原因。
删除括号,它将加载良好。
或者,您可以将它们加载到 中array<string>
,这将导致:["(8.9","10.4","9.9)"]
对于第一行。并且您可以在选择时删除括号
推荐阅读
- git - github 存储库中的图像不会上传到 github 页面
- apache-kafka - 在 kafka_2.12-2.2.0 中创建主题导致“等待节点分配超时”错误
- typescript - 在 TypeScript 中将返回值从一个函数传递给另一个函数
- java - 如何使用 admin sdk 更快地批量更新实时数据库?
- django - 将表单提交到另一个 URL 进行处理时出现 ValueError
- vue.js - 如何使用 v-for 使用 parentid 和 order 创建树结构
- laravel - 如何乘以结果集中的行数测试分页
- php - Symfony 2.7由于null而拒绝插入,而值不为null
- javascript - 如何根据嵌套数组中的值检索正确的父对象
- r - 使用 ggplotly 转换 alpha 美学