7
votes

I am new to Presto, and can't quite figure out how to check if a key is present in a map. When I run a SELECT query, this error message is returned:

Key not present in map: element

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

Adding AND contains(value_map, 'element') does not work

The data type is a string array

SELECT typeof('value_map') FROM mytable 

returns varchar(9)

How would I only select records where 'element' is present in the value_map?

1
If the column type is a varchar, then it’s a string, not a map. Can you show some example values for the column? - David Phillips
There is a typographical error -- SELECT typeof(value_map) would show the type of the value_map. SELECT typeof('value_map') shows the type of the 'value_map' string literal. - Piotr Findeisen

1 Answers

21
votes

You can lookup a value in a map if the key is present with element_at, like this:

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