Java 配置单元:如何使用映射列分解表

Java 配置单元:如何使用映射列分解表,java,dictionary,hive,hiveql,user-defined-functions,Java,Dictionary,Hive,Hiveql,User Defined Functions,我有一张这样的桌子 +-----+------------------------------+ | id | mapCol | +-----+------------------------------+ | id1 | {key1:val1, key2:val2} | | id2 | {key1:val3, key2:val4} | +-----+------------------------------+ +----

我有一张这样的桌子

+-----+------------------------------+
| id    | mapCol                     |
+-----+------------------------------+
| id1   |     {key1:val1, key2:val2} |
| id2   |     {key1:val3, key2:val4} |
+-----+------------------------------+
+-----+------+-----+
|id   | key  | val |
+-----+------+-----+
| id1 | key1 | val1|
| id1 | key2 | val2|
| id2 | key1 | val3|
| id2 | key2 | val4|
+-----+------------+
因此,我可以轻松地执行如下查询

从id='id1'的myTab中选择explode(mapCol)as(key,val)

我得到

+--------+-----+
| key    | val |
+--------+-----+
| key1   | val1|
| key2   | val2|
+--------+-----+
我想生成一个这样的表

+-----+------------------------------+
| id    | mapCol                     |
+-----+------------------------------+
| id1   |     {key1:val1, key2:val2} |
| id2   |     {key1:val3, key2:val4} |
+-----+------------------------------+
+-----+------+-----+
|id   | key  | val |
+-----+------+-----+
| id1 | key1 | val1|
| id1 | key2 | val2|
| id2 | key1 | val3|
| id2 | key2 | val4|
+-----+------------+
请注意,我希望显示
id
以及分解的行。另外,对于多个id,可能会重复
,因此我希望行反映这一点。基本上,
id
+
key
应该是唯一的

我将如何为此编写查询?我试过了

从myTab中选择explode(mapCol)as(key,val),id

但是我有

失败:语义异常1:66 UDTF只支持SELECT子句中的单个表达式使用:

结果:

OK
id1     key1    val1
id1     key2    val2
id2     key1    val3
id2     key2    val4
Time taken: 0.072 seconds, Fetched: 4 row(s)
使用您的表而不是
MyTable
子查询

也请阅读关于侧视图的回答: