Athena 通过替换另一个数组中的值来创建数组

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

我正在寻找一种方法,根据具有值映射的第二个数组的值从另一个数组创建数组。

例如 表 A 包含列

id
some_array
我心里有一些价值映射,说,
{'a': 1, 'b': 2, 'c': 3}
我想做一个选择来从
some_array

获取映射结果数组

所以,如果 A 是

| id | some_array |
|:---|:-----------|
| 1  | ['a', 'b'] |
| 2  | ['a', 'c'] |

我需要一个查询来生成以下内容

| id | parsed_array |
|:---|:-----------|
| 1  | [1, 2]     |
| 2  | [1, 3      |

如何实现这个查询?

谢谢!

sql amazon-athena presto trino
1个回答
0
投票

有多种方法可以执行此操作,例如,您可以创建一个包含映射数据的 CTE,将其与数据集交叉连接,然后将

transform
数组函数与
MAP
element_at
函数
(返回
NULL 
如果地图中不存在密钥)来映射数据:

-- sample data
WITH dataset(id, some_array) as (
    values (1, array['a', 'b']),
    (2, array['a', 'c'])
),
-- query parts    
map_data(m) as (
    values (map(
                array['a', 'b', 'c'],
                array[1, 2, 3]
            ))
)

select id,
    transform(some_array, v -> element_at(m, v)) parsed_array 
from dataset
cross join map_data;

输出:

id 解析数组
1 [1, 2]
2 [1, 3]
© www.soinside.com 2019 - 2024. All rights reserved.