Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Checking if key exists in Presto value map

Tags:

presto

trino

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?

like image 846
the_darkside Avatar asked Mar 29 '19 22:03

the_darkside


2 Answers

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
like image 184
Piotr Findeisen Avatar answered Nov 05 '22 06:11

Piotr Findeisen


element_at is ambiguous in that case -- it'll return NULL when either there's no such key or the key does exist and has NULL associated with it. A guaranteed approach is contains(map_keys(my_map), 'mykey'), which admittedly should be a bit slower than the original variant.

like image 36
ribitskiyb Avatar answered Nov 05 '22 06:11

ribitskiyb