Apache Impala:Project map 键作为单独的列

问题描述 投票:1回答:2

在Impala中,是否可以将MAP中的映射键投影为结果集中的实际列?我正在摄取一个数据集,在该数据集中我们无法提前知道所有可能的属性,因此我们使用map列来获得最大的灵活性。但是,在查询时,我们仍然希望将这些属性作为自己的列拉出。

下面是带有几个唯一键的简化示例(实际上,我们的数据集中有数百个键)

模式:

Column  |  Type
-------------------
name    |  STRING
props   |  MAP<string, string>

原始表:

Name    |  Props
-----------------
Bob     |  {"age": "39", "fav_color": "green"}
Alice   |  {"fav_animal": "dog", "fav_color": "blue"}

所需结果:

name    |  age  |  fav_color    |  fav_animal
----------------------------------------------
Bob     |  39   |  green        |  NULL
Alice   |  NULL |  blue         |  dog     

我可以通过面向行的方式获得所有结果,方法是>

从表中选择名称,props.key,props.value,table.props props;

但是,我无法弄清楚如何将这些键从MAP type列变成自己的列。在Impala中有有效的方法吗?

(我愿意编写自定义UDF,但是Impala UDF无法接受诸如MAP的复杂类型:((不幸的是)

在Impala中,是否可以将MAP中的映射键投影为结果集中的实际列?我正在摄取一个数据集,在该数据集中我们无法提前知道所有可能的属性,因此我们正在使用...

hadoop impala
2个回答
1
投票

我能够使用Impala(CDH 5.13)中的struct数据类型实现此目的。以下是我遵循的一组步骤。请注意,Impala仅支持镶木地板格式的struct数据类型。因此,我使用Hive创建表并将数据加载到表中,并使用Impala对其进行查询。


0
投票

找到了一个潜在的解决方案,但是对于大量属性而言,它非常缓慢且麻烦。下面的查询将2个属性拉到单独的列中。

© www.soinside.com 2019 - 2024. All rights reserved.