Hadoop 映射数据类型中的配置单元嵌套数组

Hadoop 映射数据类型中的配置单元嵌套数组,hadoop,hive,Hadoop,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 it

我的蜂巢表结构如下:-

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 ':'; 

Create table test_stg(employee_id INT,name STRING,abu数组,sabu MAPHive的默认分隔符是:

  • 行分隔符=>Control-A(“\001”)
  • 集合项分隔符=>Control-B(“\002”)
  • 映射键分隔符=>Control-C(“\003”)
如果覆盖这些分隔符,则在解析过程中会使用覆盖的分隔符。前面对分隔符的描述适用于平面数据结构的常见情况,其中复杂类型仅包含基元类型。对于嵌套类型,嵌套级别决定分隔符。

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

Hive实际上支持八个级别的分隔符,对应于ASCII代码1、2、…8,但您只能覆盖前三个

对于您的大小写,映射数据类型字段嵌套数组中项目的分隔符将为“\004”,因为映射键分隔符为“\003”(被覆盖为”:“

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

1|JOHN|abu1/abu2|key1:1'\004'2'\004'3/key2:6'\004'7'\004'8
SELECT*FROM test\u stg;
的输出将为:

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

参考资料:Hadoop最终指南-第12章:蜂巢,第433434页

我发现一种简单的方法可以通过3个步骤完成。另请参考“Hadoop最终指南-第12章:蜂巢”

配置单元>创建表测试\u stg2,选择1“名称”, 来自虚拟的数组('str1','str2'),映射('key',数组(1,2))

$hdfs dfs-复制本地/用户/配置单元/仓库/测试\u stg2/000000\u 0测试\u stg2\u转储

$vi测试\u stg2\u转储

1^Aname^Astr1^Bstr2^Akey^C1^D2


这就是你需要的。嵌套级别决定了你的分隔符是什么

我在ubuntu上添加ctrl+d时遇到了麻烦,我通过这个链接找到了答案