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时遇到了麻烦,我通过这个链接找到了答案