从行对象中提取值

时间:2019-05-14 22:04:39

标签: sql presto

遵循Office文档https://prestosql.io/docs/current/functions/map.html。我使用“ map_entries”将映射分解为array(row(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'

1 个答案:

答案 0 :(得分:2)

您正在运行什么版本的Presto? Presto(0.207+)的最新版本解决了一个问题,如SQL规范所期望的那样,当取消嵌套行数组时,UNNEST返回多列。

在Presto的current版中,这是您的操作方式:

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