首页 > 解决方案 > 在 Presto 中使用地图

问题描述

我正在尝试使用 Presto 的地图功能,但遇到了一些困难。希望有人可以让我直截了当。

我有一个map_table包含两列的表,kv想将其转换为地图以在查询中使用。

WITH my_map AS( SELECT map( (SELECT array_agg(k) FROM map_table), (SELECT array_agg(v) FROM map_table) ) as m ) SELECT transform( list_column, x -> my_map[x] ) as stuff FROM second_table

这显然是行不通的,因为从技术上讲,我将不得不(SELECT m FROM my_map)在查询中直接通过其名称调用 CTE。但是我不允许在 lambda 表达式中调用子查询。

那么我在这里做什么呢?我只是被灌输了吗?

标签: presto

解决方案


不确定我是否完全遵循这个问题,但有一些建议。对于my_mapCTE,使用map_agg. 其余的,我认为您只想将地图附加到 的每一行second_table,因此您可以将其用作查找。所以,像:

WITH my_map AS(
    SELECT map_agg(k,v) AS m 
    FROM map_table
),
second_table_with_map AS(
    SELECT *, (SELECT m FROM my_map)
    FROM second_table 
)
SELECT
    transform(
       list_column,
       x -> m[x]
    ) as stuff
FROM
    second_table_with_map

推荐阅读