从 Row 对象中提取值

Extract value from Row object

遵循 office 文档 https://trino.io/docs/current/functions/map.html。我使用“map_entries”将映射分解为数组(行(K,V))结构。我的问题是如何从行对象中提取 K 和 V 值?目前我必须将它重新转换为我定义的 Row 对象。

select 
    type.n , type.b
from
    (select  
         CAST(type AS ROW(n VARCHAR, b VARCHAR)) as type
     from 
         search.yli_tmp_trevi_requests_mini
     cross join 
         unnest (map_entries(cast(json_extract(req, '$.types') as MAP<VARCHAR, VARCHAR>))) t (type)
    ) t
where 
    type.n = 'apple'

您使用的是哪个版本的 Presto 运行?最新版本的 Presto (0.207+) 修复了一个问题,在取消嵌套行数组时使 UNNEST return 多列,正如 SQL 规范所预期的那样。

这就是您在 current 版本的 Presto 中的做法:

SELECT t.n, t.b
FROM <table>, UNNEST (map_entries(...)) t(n, b)
WHERE t.n = 'apple'