我正在努力将数据加载到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
...有很多选项,但地图中的数据无法加载。
这是我的最后一次尝试:
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中的图像
非常感谢任何帮助
由于
卡洛斯
答案 0 :(得分:0)
所以最后我发现了一种从java生成文件的好方法。诀窍是Hive使用前8个ASCII字符作为分隔符,但是你只能覆盖前三个。从第四个开始,你需要生成实际的ASCII字符。
经过多次测试后,我最终用HEX编辑器编辑了我的文件,插入了正确的值,但是我怎么能用Java做到这一点?可以更简单:只需将一个int转换为char,这将生成相应的ASCII字符:
ASCII 4 -> ((char)4)
ASCII 5 -> ((char)5)
...
等等。
希望这会有所帮助!!
卡洛斯
答案 1 :(得分:0)
您可以将Parive或ORC格式的Hive表存储在原生且更有效的嵌套结构中。