Функции для работы со словарями
DictCreate
Сконструировать пустой словарь. Передается два аргумента — для ключа и значения, в каждом из которых указывается строка с описанием типа данных, либо сам тип, полученный с помощью предназначенных для этого функций. Словарей с неизвестным типом ключа или значения в YQL не бывает. В качестве ключа может быть задан примитивный тип данных за исключением Yson
и Json
с необязательным признаком опциональности, или кортеж из них длины не менее два.
Документация по формату описания типа.
Примеры
SELECT DictCreate(String, Tuple<String,Double?>);
SELECT DictCreate(Tuple<Int32?,String>, OptionalType(DataType("String")));
DictItems
Получения содержимого словаря в виде списка кортежей с парами ключ-значение (List<Tuple<key_type,value_type>>
).
Примеры
SELECT DictItems(AsDict(AsTuple(1, AsList("foo", "bar"))));
-- [ ( 1, [ "foo", "bar" ] ) ]
DictKeys
Получения списка ключей словаря.
Примеры
SELECT DictKeys(AsDict(AsTuple(1, AsList("foo", "bar"))));
-- [ 1 ]
DictPayloads
Получения списка значений словаря.
Примеры
SELECT DictPayloads(AsDict(AsTuple(1, AsList("foo", "bar"))));
-- [ [ "foo", "bar" ] ]
DictLookup
Получение элемента словаря по ключу.
Примеры
SELECT DictLookup(AsDict(
AsTuple(1, AsList("foo", "bar")),
AsTuple(2, AsList("bar", "baz"))
), 1);
-- [ "foo", "bar" ]
DictContains
Проверка наличия элемента в словаре по ключу. Возвращает true или false.
Примеры
SELECT DictContains(AsDict(
AsTuple(1, AsList("foo", "bar")),
AsTuple(2, AsList("bar", "baz"))
), 42);
-- false
DictAggregate
Применить фабрику агрегационных функций для переданного словаря, в котором каждое значение является списком. Фабрика применяется отдельно внутри каждого ключа.
Если список является пустым, то результат агрегации будет такой же, как для пустой таблицы: 0 для функции COUNT
и NULL
для других функций.
Если в переданном словаре список по некоторому ключу является пустым, то такой ключ удаляется из результата.
Если переданный словарь является опциональным и содержит значение NULL
, то в результате также будет NULL
.
Аргументы:
- Словарь;
- Фабрика агрегационных функций.
Примеры
SELECT DictAggregate(AsDict(
AsTuple(1, AsList("foo", "bar")),
AsTuple(2, AsList("baz", "qwe"))),
AGGREGATION_FACTORY("Max"));
-- {1 : "foo", 2 : "qwe" }
SetIsDisjoint
Проверка того, что словарь и список или другой словарь не пересекаются по ключам.
Таким образом есть два варианта вызова:
- С аргументами
Dict<K,V1>
иList<K>
; - С аргументами
Dict<K,V1>
иDict<K,V2>
.
Примеры
SELECT SetIsDisjoint(ToSet(AsList(1, 2, 3)), AsList(7, 4)); -- true
SELECT SetIsDisjoint(ToSet(AsList(1, 2, 3)), ToSet(AsList(3, 4))); -- false
SetIntersection
Строит пересечение двух словарей по ключам.
Аргументы:
- Два словаря:
Dict<K,V1>
иDict<K,V2>
. - Необязательная функция, которая объединяет значения из исходных словарей для построения значений выходного словаря. Если тип такой функции
(K,V1,V2) -> U
, то типом результата будетDict<K,U>
. Если функция не задана, типом результата будетDict<K,Void>
, а значения из исходных словарей игнорируются.
Примеры
SELECT SetIntersection(ToSet(AsList(1, 2, 3)), ToSet(AsList(3, 4))); -- { 3 }
SELECT SetIntersection(
AsDict(AsTuple(1, "foo"), AsTuple(3, "bar")),
AsDict(AsTuple(1, "baz"), AsTuple(2, "qwe")),
($k, $a, $b) -> { RETURN AsTuple($a, $b) });
-- { 1 : ("foo", "baz") }
SetIncludes
Проверка того, что в ключи заданного словаря входят все элементы списка или ключи второго словаря.
Таким образом есть два варианта вызова:
- С аргументами
Dict<K,V1>
иList<K>
; - С аргументами
Dict<K,V1>
иDict<K,V2>
.
Примеры
SELECT SetIncludes(ToSet(AsList(1, 2, 3)), AsList(3, 4)); -- false
SELECT SetIncludes(ToSet(AsList(1, 2, 3)), ToSet(AsList(2, 3))); -- true
SetUnion
Строит объединение двух словарей по ключам.
Аргументы:
- Два словаря:
Dict<K,V1>
иDict<K,V2>
. - Необязательная функция, которая объединяет значения из исходных словарей для построения значений выходного словаря. Если тип такой функции
(K,V1?,V2?) -> U
, то типом результата будетDict<K,U>
. Если функция не задана, типом результата будетDict<K,Void>
, а значения из исходных словарей игнорируются.
Примеры
SELECT SetUnion(ToSet(AsList(1, 2, 3)), ToSet(AsList(3, 4))); -- { 1, 2, 3, 4 }
SELECT SetUnion(
AsDict(AsTuple(1, "foo"), AsTuple(3, "bar")),
AsDict(AsTuple(1, "baz"), AsTuple(2, "qwe")),
($k, $a, $b) -> { RETURN AsTuple($a, $b) });
-- { 1 : ("foo", "baz"), 2 : (null, "qwe"), 3 : ("bar", null) }
SetDifference
Строит словарь, в котором есть все ключи с соответствующими значениями первого словаря, для которых нет ключа во втором словаре.
Примеры
SELECT SetDifference(ToSet(AsList(1, 2, 3)), ToSet(AsList(3, 4))); -- { 1, 2 }
SELECT SetDifference(
AsDict(AsTuple(1, "foo"), AsTuple(2, "bar")),
ToSet(AsList(2, 3)));
-- { 1 : "foo" }
SetSymmetricDifference
Строит симметрическую разность двух словарей по ключам.
Аргументы:
- Два словаря:
Dict<K,V1>
иDict<K,V2>
. - Необязательная функция, которая объединяет значения из исходных словарей для построения значений выходного словаря. Если тип такой функции
(K,V1?,V2?) -> U
, то типом результата будетDict<K,U>
. Если функция не задана, типом результата будетDict<K,Void>
, а значения из исходных словарей игнорируются.
Примеры
SELECT SetSymmetricDifference(ToSet(AsList(1, 2, 3)), ToSet(AsList(3, 4))); -- { 1, 2, 4 }
SELECT SetSymmetricDifference(
AsDict(AsTuple(1, "foo"), AsTuple(3, "bar")),
AsDict(AsTuple(1, "baz"), AsTuple(2, "qwe")),
($k, $a, $b) -> { RETURN AsTuple($a, $b) });
-- { 2 : (null, "qwe"), 3 : ("bar", null) }