使用jdbc在hive中插入映射和其他复杂类型

时间:2016-01-14 12:53:14

标签: java hadoop jdbc hive hiveql

我有一个java Map(Map)和一个到hive服务器的JDBC连接。 服务器上表的模式包含Map类型的列。 是否可以使用JDBC将Java Map插入到具有类似数据类型的hive表列?

我试过了:

"create table test(key string, value Map<String, String>)"

 "insert into table test values ('keywer', map('subkey', 'subvalue')) from dummy limit 1;"

参考:Hive inserting values to an array complex type column

但插入失败了:

"Error: Error while compiling statement: FAILED: ParseException line 1:69 missing EOF at 'from' near ')' (state=42000,code=40000)"

[编辑]

hive版本是:0.14.0

谢谢

3 个答案:

答案 0 :(得分:1)

本手册明确指出您无法使用SQL插入Map数据类型:

“Hive不支持复杂类型(数组,映射,结构,联合)的文字,因此无法在INSERT INTO ... VALUES子句中使用它们。这意味着用户无法将数据插入复杂的使用INSERT INTO ... VALUES子句的数据类型列。“

答案 1 :(得分:0)

我认为正确的DDL和查询将是:

CREATE TABLE test(key STRING, value MAP<STRING, STRING>);
INSERT INTO TABLE test VALUES('keywer', map('subkey', 'subvalue')) from dummy limit 1;

答案 2 :(得分:0)

从jdbc客户端放置复杂类型的工作方法是:

insert into table test select "key",map("key1","value1","key2","value2") from dummy limit 1;

其中dummy是另一个至少有一行的表。