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
子查询
也请阅读关于侧视图的回答: