---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.4
alternate:
  - https://ydb.tech/docs/en/yql/reference/types/containers.md
  - https://ydb.tech/docs/ru/yql/reference/types/containers.md
sourcePath: ru/core/yql/reference/types/containers.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Контейнеры

YQL поддерживает контейнерные типы для определения сложных структур данных различной организации.
Значения контейнерных типов могут быть переданы в запросы YQL в качестве входных параметров, либо возвращены из запросов YQL в качестве выходных колонок набора результатов.
Контейнерные типы не могут быть использованы в качестве типов данных колонок таблиц.

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

При необходимости контейнеры можно вкладывать друг в друга в произвольных комбинациях, например `List<Tuple<Int32,Int32>>`.

[Опциональные значения](https://ydb.tech/docs/ru/yql/reference/types/optional.md) в некоторых контекстах также могут рассматриваться как один из видов контейнеров (`Optional<Type>`), который ведёт себя как список длины 0 или 1.

Для создания литералов контейнеров списка, словаря, множества, кортежа, структуры можно использовать [операторную запись](https://ydb.tech/docs/ru/yql/reference/builtins/basic.md#containerliteral).
Для создания литерала варианта над кортежем или структурой используется функция [Variant](https://ydb.tech/docs/ru/yql/reference/builtins/basic.md#variant).
Для создания литерала перечисления используется функция [Enum](https://ydb.tech/docs/ru/yql/reference/builtins/basic.md#enum).

Для обращения к элементам контейнера используется [точка или квадратные скобки](https://ydb.tech/docs/ru/yql/reference/syntax/expressions.md#items-access), в зависимости от его типа.
