gpt4 book ai didi

hadoop - Apache Impala:项目map 键作为单独的列

转载 作者:行者123 更新时间:2023-12-02 18:57:34 27 4
gpt4 key购买 nike

在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

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

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

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

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

最佳答案

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

hive

create table raw_table_parq (
name string,
details struct < age: STRING, fav_color: STRING, fav_animal: STRING >
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '$'
STORED AS PARQUET;

testfile.csv
'Bob',39$'green'$''
'Alice',''$'blue'$'dog'

首先创建了一个基于文本文件的登台表,将csv加载到登台表中,然后使用“插入到”将表加载到 Parquet 表中。数据加载到所需表后,在Impala中使用以下查询:
[quickstart.cloudera:21000] > select name, details.age, details.fav_color, details.fav_animal from test.raw_table_parq;
Query submitted at: 2019-12-30 06:31:09 (Coordinator: http://quickstart.cloudera:25000)
Query progress can be monitored at: http://quickstart.cloudera:25000/query_plan?query_id=2f436ff7e3301734:f6f0a75700000000
+---------+-------------+-------------------+--------------------+
| name | details.age | details.fav_color | details.fav_animal |
+---------+-------------+-------------------+--------------------+
| 'Bob' | 39 | 'green' | '' |
| 'Alice' | '' | 'blue' | 'dog' |
+---------+-------------+-------------------+--------------------+
Fetched 2 row(s) in 0.13s

希望这可以帮助。

关于hadoop - Apache Impala:项目map <string,string>键作为单独的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59522205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com