Контейнеры
YQL поддерживает контейнерные типы для определения сложных структур данных различной организации.
Значения контейнерных типов могут быть переданы в запросы YQL в качестве входных параметров, либо возвращены из запросов YQL в качестве выходных колонок набора результатов.
Контейнерные типы не могут быть использованы в качестве типов данных колонок таблиц.
Тип | Объявление,пример | Описание |
---|---|---|
Список | List<Type> ,List<Int32> |
Последовательность переменной длины, состоящая из элементов одного типа. |
Словарь | Dict<KeyType, ValueType> ,Dict<String,Int32> |
Набор пар ключ—значение с фиксированным типом ключей и значений. |
Множество | Set<KeyType> ,Set<String> |
Набор элементов с фиксированным типом, является частным случаем словаря с типом значения Void . |
Кортеж | Tuple<Type1, ..., TypeN> ,Tuple<Int32,Double> |
Набор безымянных элементов фиксированной длины с указанными типами всех элементов. |
Структура | Struct<Name1:Type1, ..., NameN:TypeN> , Struct<Name:String,Age:Int32> |
Набор именованных полей с указанными типами значений, фиксированный на момент начала запроса (то есть обязательно не зависящий от данных). |
Поток | Stream<Type> , Stream<Int32> |
Однопроходной итератор по значениям одного типа. Не является сериализуемым. |
Вариант над кортежем | Variant<Type1, Type2> , Variant<Int32,String> |
Кортеж, про который известно, что заполнен ровно один элемент. |
Вариант над структурой | Variant<Name1:Type1, Name2:Type2> ,Variant<value:Int32,error:String> |
Структура, про которую известно, что заполнен ровно один элемент. |
Перечисление | Enum<Name1, Name2> ,Enum<value,error> |
Контейнер, в котором выбран ровно один элемент перечисления, который определяется только своим именем. |
При необходимости контейнеры можно вкладывать друг в друга в произвольных комбинациях, например List<Tuple<Int32,Int32>>
.
Опциональные значения в некоторых контекстах также могут рассматриваться как один из видов контейнеров (Optional<Type>
), который ведёт себя как список длины 0 или 1.
Для создания литералов контейнеров списка, словаря, множества, кортежа, структуры можно использовать операторную запись.
Для создания литерала варианта над кортежем или структурой используется функция Variant.
Для создания литерала перечисления используется функция Enum.
Для обращения к элементам контейнера используется точка или квадратные скобки, в зависимости от его типа.