6.17. Map Functions and Operators
Subscript Operator: []
The []
operator is used to retrieve the value corresponding to a given key from a map:
- SELECT name_to_age_map['Bob'] AS bob_age;
Map Functions
cardinality
(x) → bigint
Returns the cardinality (size) of the mapx
.
elementat
(_map<K, V>, key) → V
Returns value for givenkey
, orNULL
if the key is not contained in the map.
map
() → map<unknown, unknown>
Returns an empty map.- SELECT map(); — {}
- SELECT map(); — {}
map
(array<K>, array<V>) → map<K,V>
Returns a map created using the given key/value arrays.- SELECT map(ARRAY[1,3], ARRAY[2,4]); — {1 -> 2, 3 -> 4}
See alsomap_agg()
andmultimap_agg()
for creating a map as an aggregation.- SELECT map(ARRAY[1,3], ARRAY[2,4]); — {1 -> 2, 3 -> 4}
mapfrom_entries
(_array<row<K, V>>) → map<K,V>
Returns a map created from the given array of entries.- SELECT mapfrom_entries(ARRAY[(1, 'x'), (2, 'y')]); — {1 -> 'x', 2 -> 'y'}
- SELECT mapfrom_entries(ARRAY[(1, 'x'), (2, 'y')]); — {1 -> 'x', 2 -> 'y'}
multimap_from_entries
(_array<row<K, V>>) → map<K,array<V>>
Returns a multimap created from the given array of entries. Each key can be associated with multiple values.- SELECT multimapfrom_entries(ARRAY[(1, 'x'), (2, 'y'), (1, 'z')]); — {1 -> ['x', 'z'], 2 -> ['y']}
- SELECT multimapfrom_entries(ARRAY[(1, 'x'), (2, 'y'), (1, 'z')]); — {1 -> ['x', 'z'], 2 -> ['y']}
map_entries
(_map<K, V>) → array<row<K,V>>
Returns an array of all entries in the given map.- SELECT mapentries(MAP(ARRAY[1, 2], ARRAY['x', 'y'])); — [ROW(1, 'x'), ROW(2, 'y')]
- SELECT mapentries(MAP(ARRAY[1, 2], ARRAY['x', 'y'])); — [ROW(1, 'x'), ROW(2, 'y')]
map_concat
(_map1<K, V>, map2<K, V>, …, mapN<K, V>) → map<K,V>
Returns the union of all the given maps. If a key is found in multiple given maps,that key’s value in the resulting map comes from the last one of those maps.
mapfilter
(_map<K, V>, function<K, V, boolean>) → MAP<K,V>
Constructs a map from those entries ofmap
for whichfunction
returns true:- SELECT mapfilter(MAP(ARRAY[], ARRAY[]), (k, v) -> true); — {}
SELECT map_filter(MAP(ARRAY[10, 20, 30], ARRAY['a', NULL, 'c']), (k, v) -> v IS NOT NULL); — {10 -> a, 30 -> c}
SELECT map_filter(MAP(ARRAY['k1', 'k2', 'k3'], ARRAY[20, 3, 15]), (k, v) -> v > 10); — {k1 -> 20, k3 -> 15}
- SELECT mapfilter(MAP(ARRAY[], ARRAY[]), (k, v) -> true); — {}
map_keys
(_x<K, V>) → array<K>
Returns all the keys in the mapx
.
mapvalues
(_x<K, V>) → array<V>
Returns all the values in the mapx
.
mapzip_with
(_map<K, V1>, map<K, V2>, function<K, V1, V2, V3>) → map<K, V3>
Merges the two given maps into a single map by applyingfunction
to the pair of values with the same key.For keys only presented in one map, NULL will be passed as the value for the missing key.- SELECT mapzip_with(MAP(ARRAY[1, 2, 3], ARRAY['a', 'b', 'c']), — {1 -> ad, 2 -> be, 3 -> cf}
MAP(ARRAY[1, 2, 3], ARRAY['d', 'e', 'f']),
(k, v1, v2) -> concat(v1, v2));
SELECT map_zip_with(MAP(ARRAY['k1', 'k2'], ARRAY[1, 2]), — {k1 -> ROW(1, null), k2 -> ROW(2, 4), k3 -> ROW(null, 9)}
MAP(ARRAY['k2', 'k3'], ARRAY[4, 9]),
(k, v1, v2) -> (v1, v2));
SELECT map_zip_with(MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 8, 27]), — {a -> a1, b -> b4, c -> c9}
MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 2, 3]),
(k, v1, v2) -> k || CAST(v1/v2 AS VARCHAR));
- SELECT mapzip_with(MAP(ARRAY[1, 2, 3], ARRAY['a', 'b', 'c']), — {1 -> ad, 2 -> be, 3 -> cf}
transform_keys
(_map<K1, V>, function<K1, V, K2>) → map<K2,V>
Returns a map that appliesfunction
to each entry ofmap
and transforms the keys:- SELECT transformkeys(MAP(ARRAY[], ARRAY[]), (k, v) -> k + 1); — {}
SELECT transform_keys(MAP(ARRAY [1, 2, 3], ARRAY ['a', 'b', 'c']), (k, v) -> k + 1); — {2 -> a, 3 -> b, 4 -> c}
SELECT transform_keys(MAP(ARRAY ['a', 'b', 'c'], ARRAY [1, 2, 3]), (k, v) -> v * v); — {1 -> 1, 4 -> 2, 9 -> 3}
SELECT transform_keys(MAP(ARRAY ['a', 'b'], ARRAY [1, 2]), (k, v) -> k || CAST(v as VARCHAR)); — {a1 -> 1, b2 -> 2}
SELECT transform_keys(MAP(ARRAY [1, 2], ARRAY [1.0, 1.4]), — {one -> 1.0, two -> 1.4}
(k, v) -> MAP(ARRAY[1, 2], ARRAY['one', 'two'])[k]);
- SELECT transformkeys(MAP(ARRAY[], ARRAY[]), (k, v) -> k + 1); — {}
transform_values
(_map<K, V1>, function<K, V1, V2>) → map<K, V2>
Returns a map that appliesfunction
to each entry ofmap
and transforms the values:- SELECT transformvalues(MAP(ARRAY[], ARRAY[]), (k, v) -> v + 1); — {}
SELECT transform_values(MAP(ARRAY [1, 2, 3], ARRAY [10, 20, 30]), (k, v) -> v + k); — {1 -> 11, 2 -> 22, 3 -> 33}
SELECT transform_values(MAP(ARRAY [1, 2, 3], ARRAY ['a', 'b', 'c']), (k, v) -> k * k); — {1 -> 1, 2 -> 4, 3 -> 9}
SELECT transform_values(MAP(ARRAY ['a', 'b'], ARRAY [1, 2]), (k, v) -> k || CAST(v as VARCHAR)); — {a -> a1, b -> b2}
SELECT transform_values(MAP(ARRAY [1, 2], ARRAY [1.0, 1.4]), — {1 -> one_1.0, 2 -> two_1.4}
(k, v) -> MAP(ARRAY[1, 2], ARRAY['one', 'two'])[k] || '' || CAST(v AS VARCHAR));
- SELECT transformvalues(MAP(ARRAY[], ARRAY[]), (k, v) -> v + 1); — {}