gpt4 book ai didi

hadoop - MAP 数据类型中的 HIVE 嵌套 ARRAY

转载 作者:可可西里 更新时间:2023-11-01 14:17:42 26 4
gpt4 key购买 nike

我的 HIVE 表结构如下:-

Create table test_stg(employee_id INT, name STRING, abu ARRAY <String>, sabu MAP <String, ARRAY<INT>)
row format delimited fields terminated by '|'
collection items terminated by '/'
map keys terminated by ':';

我将使用 LOAD DATA LOCAL....

从本地文件系统导入数据

问题是我应该如何构建本地文件的内容,以便 Map 数据类型字段 sabu 可以具有嵌套数组。

提前致谢。

最佳答案

Hive 的默认分隔符是:

  • 行分隔符 => Control-A ('\001')
  • 集合项分隔符 => Control-B ('\002')
  • 映射键分隔符 => Control-C ('\003')

如果您覆盖这些定界符,那么在解析期间将使用被覆盖的定界符。前面对定界符的描述对于平面数据结构的常见情况是正确的,其中复杂类型仅包含原始类型。 对于嵌套类型,嵌套级别决定分隔符

例如,对于数组数组,外部数组的分隔符是 Control-B ('\002') 字符,正如预期的那样,但对于内部数组,它们是 Control-C ('\003') 字符, 列表中的下一个分隔符。

Hive其实支持八级分隔符,对应ASCII码1,2,...8,但是你只能覆盖前三级。

对于 map 数据类型字段嵌套数组中项目的大小写分隔符 sabu 将为“\004”,因为 map 键分隔符为“\003”(覆盖为 ':' )。

因此您可以按照以下格式编写输入文件:

1|JOHN|abu1/abu2|key1:1'\004'2'\004'3/key2:6'\004'7'\004'8

SELECT * FROM test_stg; 的输出将是:

1       JOHN     ["abu1","abu2"]     {"key1":[1,2,3],"key2":[6,7,8]}

引用:Hadoop 权威指南 - 第 12 章:Hive,页码:433、434

关于hadoop - MAP 数据类型中的 HIVE 嵌套 ARRAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18812025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com