在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中的映射键投影为结果集中的实际列?我正在摄取一个数据集,在该数据集中我们无法提前知道所有可能的属性,因此我们正在使用...
我能够使用Impala(CDH 5.13)中的struct数据类型实现此目的。以下是我遵循的一组步骤。请注意,Impala仅支持镶木地板格式的struct数据类型。因此,我使用Hive创建表并将数据加载到表中,并使用Impala对其进行查询。
找到了一个潜在的解决方案,但是对于大量属性而言,它非常缓慢且麻烦。下面的查询将2个属性拉到单独的列中。