如何将 array<map<string,int>> 插入配置单元表?

Posted

技术标签:

【中文标题】如何将 array<map<string,int>> 插入配置单元表?【英文标题】:How to insert array<map<string,int>> into hive table? 【发布时间】:2021-01-02 08:06:23 【问题描述】:

我有一个蜂巢表如下:

0: jdbc:hive2://Desktop:10000> desc tb_test2;
+-------------+-------------------------+----------+
|  col_name   |        data_type        | comment  |
+-------------+-------------------------+----------+
| name        | string                  |          |
| score_list  | array<map<string,int>>  |          |
+-------------+-------------------------+----------+

我想插入这样的数据:

A   ["math":100,"english":90,"history":85]  
B   ["math":95,"english":80,"history":100]  
C   ["math":80,"english":90,"histroy":100]  

我试过这样:

0: jdbc:hive2://Desktop:10000> insert into tb_test2 values("A",Map("math":100,"english":90,"history":85));

但得到了错误:

Error: Error while compiling statement: FAILED: ParseException line 1:42 cannot recognize input near '"math"' ':' '100' in constant (state=42000,code=40000)

【问题讨论】:

【参考方案1】:

我认为应该使用逗号,并且您还需要指定数组。

insert into tb_test2 select "A", array(map("math",100,"english",90,"history",85)) from (select 1) x;

【讨论】:

错误:编译语句时出错:失败:SemanticException [错误 10293]:无法为插入值创建临时文件插入/值中不支持 TOK_FUNCTION 类型的表达式(状态 = 42000,代码 = 10293) 感谢您的回复,但这个答案给了我上面的错误...... @needhelp 尝试更新答案?似乎有必要从虚拟表中进行选择,如here 所述 感谢您的帮助....有没有办法将 3 张地图放在一张地图中? 我不明白“将3张地图放在一张地图中”。您能否展示一个所需输出的示例?

以上是关于如何将 array<map<string,int>> 插入配置单元表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 8 Stream 将 Array 转换为 HashMap

java,根据一个动态的map如何动态 往 Object[] array=new Object[];添加值

Java里面String的编码问题

forEach()Array.map()和Array.filter()用法

使用 Array<Map<String,String>> 列读取 Parquet 文件

将参数传递给 unordered_map(或集合)哈希结构