检查 Presto 值映射中是否存在键

Checking if key exists in Presto value map

我是 Presto 的新手,不太明白如何检查地图中是否存在键。当我运行一个SELECT查询时,返回这个错误信息:

Key not present in map: element

SELECT value_map['element'] FROM
mytable
WHERE name = 'foobar'

添加AND contains(value_map, 'element')无效

数据类型为字符串数组

SELECT typeof('value_map') FROM mytable 

returns varchar(9)

我如何只 select 记录 value_map 中存在 'element' 的地方?

如果密钥与 element_at 一起出现,您可以在 map 中查找值,如下所示:

SELECT element_at(value_map, 'element')
FROM ...
WHERE element_at(value_map, 'element') IS NOT NULL

element_at 在这种情况下是不明确的——当没有这样的键或者键确实存在并且关联了 NULL 时,它将 return NULL。有保证的方法是 contains(map_keys(my_map), 'mykey'),诚然,它应该比原始变体慢一点。