7

我是 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 

返回varchar(9)

我将如何只选择“元素”中存在的记录value_map

4

2 回答 2

21

map如果键与 一起存在,您可以在 a 中查找值element_at,如下所示:

SELECT element_at(value_map, 'element')
FROM ...
WHERE element_at(value_map, 'element') IS NOT NULL
于 2019-03-29T22:47:57.350 回答
0

element_at在这种情况下是模棱两可的——当没有这样的键或键确实存在并且具有与之关联的 NULL 时,它将返回 NULL。有保证的方法是contains(map_keys(my_map), 'mykey'),诚然,它应该比原始变体慢一点。

于 2022-02-07T18:55:59.907 回答