如何在具有3个以上级别的配置单元中加载嵌套集合

ovfsdjhp  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(305)

我正在努力将数据加载到hive中,定义如下:

CREATE TABLE complexstructure (
id STRING,
date DATE,
day_data ARRAY<STRUCT<offset:INT,data:MAP<STRING,FLOAT>>>
) row format delimited
fields terminated by ','
collection items terminated by '|'
map keys terminated by ':';

day\ u数据字段包含难以加载的复杂结构 load data inpath... 我试过了 '\004' , ^D ... 有很多选项,但Map中的数据无法加载。
这是我最后一次尝试:

id_3054,2012-09-  22,3600000:TOT'\005'0.716'\004'PI'\005'0.093'\004'PII'\005'0.0'\004'PIII'\005'0.0'\004'PIV'\005'0.0'\004'RES'\005'0.0|7200000:TOT'\005'0.367'\004'PI'\005'0.066'\004'PII'\005'0.0'\004'PIII'\005'0.0'\004'PIV'\005'0.0'\004'RES'\005'0.0|10800000:TOT'\005'0.268'\004'PI'\005'0.02'\004'PII'\005'0.0'\004'PIII'\005'0.0'\004'PIV'\005'0.159'\004'RES'\005'0.0|14400000:TOT'\005'0.417'\004'PI'\005'0.002'\004'PII'\005'0.0'\004'PIII'\005'0.0'\004'PIV'\005'0.165'\004'RES'\005'0.0`

在这里发布之前,我尝试过(许多)选项,但这个示例不起作用:
Map数据类型中的配置单元嵌套数组
我用的是HDP2.2的图像
任何帮助都将不胜感激
谢谢
卡洛斯

olqngx59

olqngx591#

您可以以parquet或orc格式存储配置单元表,这些格式支持嵌套结构,而且效率更高。

qaxu7uf2

qaxu7uf22#

所以最后我找到了一个从java生成文件的好方法。诀窍在于,hive使用前8个ascii字符作为分隔符,但只能覆盖前3个字符。从第四个开始,您需要生成实际的ascii字符。
经过多次测试,我最终用十六进制编辑器编辑了我的文件,插入正确的值是有效的,但是在java中如何才能做到这一点呢?再简单不过了:只要将int转换成char,就会生成相应的ascii字符:

ASCII 4 -> ((char)4)
ASCII 5 -> ((char)5)
...

等等。
希望这有帮助!!
卡洛斯

相关问题