使用 jdbc 在 hive 中插入 map 和其他复杂类型
Posted
技术标签:
【中文标题】使用 jdbc 在 hive 中插入 map 和其他复杂类型【英文标题】:Insert map and other complex types in hive using jdbc 【发布时间】:2016-01-14 12:53:13 【问题描述】:我有一个 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
谢谢
【问题讨论】:
【参考方案1】:手册清楚地表明您不能使用 SQL 插入 Map 数据类型:
"Hive 不支持复杂类型(数组、映射、结构、联合)的字面量,因此无法在 INSERT INTO...VALUES 子句中使用它们。这意味着用户无法将数据插入复杂类型使用 INSERT INTO...VALUES 子句的数据类型列。”
【讨论】:
【参考方案2】:我认为正确的 DDL 和查询应该是:
CREATE TABLE test(key STRING, value MAP<STRING, STRING>);
INSERT INTO TABLE test VALUES('keywer', map('subkey', 'subvalue')) from dummy limit 1;
【讨论】:
【参考方案3】:从 jdbc 客户端放入复杂类型的工作方法是:
insert into table test select "key",map("key1","value1","key2","value2") from dummy limit 1;
其中 dummy 是另一个至少有一行的表。
【讨论】:
以上是关于使用 jdbc 在 hive 中插入 map 和其他复杂类型的主要内容,如果未能解决你的问题,请参考以下文章