当前位置: 首页 > 面试题库 >

蜂巢:如何使用地图列爆炸表格

公孙向荣
2023-03-14
问题内容

我有这样的桌子

+-----+------------------------------+
| id    | mapCol                     |
+-----+------------------------------+
| id1   |     {key1:val1, key2:val2} |
| id2   |     {key1:val3, key2:val4} |
+-----+------------------------------+

这样我就可以轻松执行查询

select explode(mapCol) as (key, val) from myTab where id='id1'

我得到

+--------+-----+
| key    | val |
+--------+-----+
| key1   | val1|
| key2   | val2|
+--------+-----+

我想生成一个这样的表

+-----+------+-----+
|id   | key  | val |
+-----+------+-----+
| id1 | key1 | val1|
| id1 | key2 | val2|
| id2 | key1 | val3|
| id2 | key2 | val4|
+-----+------------+

请注意,我要显示id爆炸行。另外,对于多个ID,key可能会重复,因此我希望这些行反映出来。基本上,id+ key应该是唯一的。

我该如何写查询?我试过了

select explode(mapCol) as (key, val), id from myTab

但是我得到了

FAILED: SemanticException 1:66 Only a single expression in the SELECT clause is supported with UDTF's


问题答案:

使用
侧面图

with MyTable as -------use your table instead of this subquery
(select id, str_to_map(mapStr) mapCol
from
(
select stack(2,
'id1','key1:val1,key2:val2',
'id2','key1:val3,key2:val4'
) as (id, mapStr))s
) -------use your table instead of this subquery

select t.id, s.key, s.val
  from MyTable t
       lateral view outer explode(mapCol) s  as key, val;

结果:

OK
id1     key1    val1
id1     key2    val2
id2     key1    val3
id2     key2    val4
Time taken: 0.072 seconds, Fetched: 4 row(s)

使用表而不是MyTable子查询。



 类似资料:
  • 我有一个数据表 而这个结果就在这里 我想爆炸dev_property(列) 怎么爆炸?

  • 我浏览了几篇文章,基本上都指出Hive用于结构化处理,Pig用于非结构化处理。我们什么时候需要本地地图缩减?你能指出一些使用Pig或Hive但在原生map Reduce中无法解决的场景吗?

  • 我的目标是分解(即,从结构内部获取它们,并将它们作为数据集的剩余列)一个Spark结构列(已经完成),但通过在任意字符串前面添加前缀来更改内部字段名。其中一个动机是,我的结构可以包含与它外部的列同名的列,因此,我需要一种容易区分它们的方法。当然,我事先不知道结构中的列是什么。 以下是我目前掌握的情况: 这做的工作好-我用这样写: 它返回原始数据帧中的所有列,以及末尾结构的内部列。 至于前置前缀,我

  • 我试图创建一个Hive表与模式字符串,字符串,双在包含两个拼花文件的文件夹上。第一个拼花文件模式是字符串,字符串,双,第二个文件的模式是字符串,双,字符串。 我正在尝试使用pig(0.14)脚本中的hive表。 但我得到了错误 java.lang.UnsupportedOperationException:无法检查org.apache.hadoop.hive.serde2.io.DoubleWri

  • 蜂巢平台(OpenComb Platform)是一个基于 PHP 5.3 实现的深度云计算应用框架。蜂巢采用了扩展模式,系统中的功能和特性,都由扩展提供。 因此,用户可以通过开发和安装扩展来部署各种类型的互联网应用。

  • 地图-缩小,蜂巢,猪的区别 pig:这是一种数据流语言,它可以处理基本上用于将半结构化、非结构化数据转换为结构化的任何数据,以便使用窗口功能等在hive advance分析中使用。 配置单元:处理结构数据并提供sql类型的查询语言。 我知道在后端,pig和hive都使用map-reduces。 我知道map-duce对程序员来说是个好工具,对sql人来说是蜂巢或猪 我只想知道我们在hive、pig