检查 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')
,诚然,它应该比原始变体慢一点。
我是 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')
,诚然,它应该比原始变体慢一点。