检查 Presto 值映射中是不是存在键
Posted
技术标签:
【中文标题】检查 Presto 值映射中是不是存在键【英文标题】:Checking if key exists in Presto value map检查 Presto 值映射中是否存在键 【发布时间】:2019-08-20 21:38:50 【问题描述】:我是 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
中存在“元素”的记录?
【问题讨论】:
如果列类型是varchar
,那么它是一个字符串,而不是一个映射。你能展示一些列的示例值吗?
出现印刷错误 -- SELECT typeof(value_map)
将显示 value_map
的类型。 SELECT typeof('value_map')
显示 'value_map'
字符串文字的类型。
【参考方案1】:
如果键与element_at
一起存在,您可以在map
中查找值,如下所示:
SELECT element_at(value_map, 'element')
FROM ...
WHERE element_at(value_map, 'element') IS NOT NULL
【讨论】:
【参考方案2】:element_at
在这种情况下是模棱两可的——当没有这样的键或键确实存在并且与它关联的 NULL 时,它将返回 NULL。有保证的方法是contains(map_keys(my_map), 'mykey')
,诚然,它应该比原始变体慢一些。
【讨论】:
以上是关于检查 Presto 值映射中是不是存在键的主要内容,如果未能解决你的问题,请参考以下文章
在 Presto 中,如何检查我通过子查询获取的列表中是不是存在数组中的元素