我正在努力将数据加载到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...
加载的复杂结构我试过' 04'
, ^D
…选项很多,但是地图中的数据不会被加载。
这是我最后一次尝试:
id_3054,2012-09- 22,3600000:TOT' 05'0.716' 04'PI' 05'0.093' 04'PII' 05'0.0' 04'PIII' 05'0.0' 04'PIV' 05'0.0' 04'RES' 05'0.0|7200000:TOT' 05'0.367' 04'PI' 05'0.066' 04'PII' 05'0.0' 04'PIII' 05'0.0' 04'PIV' 05'0.0' 04'RES' 05'0.0|10800000:TOT' 05'0.268' 04'PI' 05'0.02' 04'PII' 05'0.0' 04'PIII' 05'0.0' 04'PIV' 05'0.159' 04'RES' 05'0.0|14400000:TOT' 05'0.417' 04'PI' 05'0.002' 04'PII' 05'0.0' 04'PIII' 05'0.0' 04'PIV' 05'0.165' 04'RES' 05'0.0`
在发布这里之前,我已经尝试了(很多很多)选项,这个例子不起作用:
MAP数据类型中的HIVE嵌套数组
我使用的图像来自HDP 2.2
如有任何帮助,不胜感激
感谢卡洛斯所以最后我找到了一个从java生成文件的好方法。窍门是Hive使用前8个ASCII字符作为分隔符,但是您只能覆盖前三个字符。从第四个开始,您需要生成三个实际的ASCII字符。
经过多次测试,我最终用HEX编辑器编辑了我的文件,并插入了正确的值,但是我如何在Java中做到这一点?再简单不过了:只需将int类型强制转换为char类型,就会生成相应的ASCII字符:
ASCII 4 -> ((char)4)
ASCII 5 -> ((char)5)
...
等等
希望这有帮助!!
卡洛斯您可以将Hive表存储为Parquet或ORC格式,这些格式支持本地嵌套结构,并且更有效。