我正在努力将数据加载到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_data字段包含一个很难用
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`
在此处发布之前,我尝试了(很多)选项,但此示例不起作用:
HIVE nested ARRAY in MAP data type
我正在使用HDP 2.2中的图像
任何帮助将非常感激
谢谢
卡洛斯
最佳答案
所以最后我找到了一种从java生成文件的好方法。诀窍是Hive使用前8个ASCII字符作为分隔符,但是您只能覆盖前三个。从第四点开始,您需要生成实际的ASCII字符。
经过多次测试,我最终使用HEX编辑器编辑了文件,并插入了正确的值,但是如何在Java中做到这一点?再简单不过了:只需将int转换为char即可生成相应的ASCII字符:
ASCII 4 -> ((char)4)
ASCII 5 -> ((char)5)
...
等等。
希望这可以帮助!!
卡洛斯
关于hadoop - 如何在超过3个级别的配置单元中加载嵌套集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361935/