如何将 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[];添加值
forEach()Array.map()和Array.filter()用法