Примитивные типы данных

Примечание

Термины «простые» и «примитивные» типы данных используются как синонимы.

Типы данных

В YDB используются типы данных YQL. Некоторые из типов YQL поддерживаются с ограничениями — они могут использоваться только в вычислениях, но не могут быть типом столбца или использоваться в первичном ключе. Все столбцы, включая ключевые, могут содержать специальное значение NULL.

Предупреждение

Несмотря на возможность в части полей составного первичного ключа хранить NULL, мы настоятельно рекомендуем никогда так не делать.

В таблицах ниже приведены возможные варианты использования типов данных YQL в YDB.

Числовые

Тип Пояснение Используется в
запросах и
вычислениях
YQL
Используется в
качестве типа
данных столбца
Используется в
первичных
ключах
Поддерживает
возможность
сравнения
Bool Булевое значение Да Да Да Да
Int8 Целое число со знаком (от –27 до 27–1) Да Нет Нет Да
Int16 Целое число со знаком (от –215 до 215–1) Да Нет Нет Да
Int32 Целое число со знаком (от –231 до 231–1) Да Да Да Да
Int64 Целое число со знаком (от –263 до 263–1) Да Да Да Да
Uint8 Беззнаковое целое число (от 0 до 28–1) Да Да Да Да
Uint16 Беззнаковое целое число (от 0 до 216–1) Да Нет Нет Да
Uint32 Беззнаковое целое число (от 0 до 232–1) Да Да Да Да
Uint64 Беззнаковое целое число (от 0 до 264–1) Да Да Да Да
Float Число с плавающей точкой Да Да Нет Да
Decimal Число фиксированной точности, поддерживается Decimal(22,9) — 13 знаков в целой части, 9 в дробной Да Да Нет Да
Double Число двойной точности Да Да Нет Да

Строковые

Тип Пояснение Используется в
запросах и
вычислениях
YQL
Используется в
качестве типа
данных столбца
Используется в
первичных
ключах
Поддерживает
возможность
сравнения
String Может содержать произвольные бинарные данные Да Да Да Да
Utf8 Содержит текст в кодировке UTF-8 Да Да Да Да
Json Содержит JSON Да Да Нет Нет
Yson Содержит YSON Да Да Нет Нет
Uuid Содержит UUID Да Нет Нет Да

Максимальный размер значения в ячейке с любым строковым типом данных — около 4 МБ.

Дата и время

Тип Пояснение Используется в
запросах и
вычислениях
YQL
Используется в
качестве типа
данных столбца
Используется в
первичных
ключах
Поддерживает
возможность
сравнения
Date Точность до дней Да Нет Нет Да
Datetime Точность до секунд Да Нет Нет Да
Timestamp Точность до микросекунд Да Нет Нет Да
Interval Точность до микросекунд, допустимы значения интервалов — не более 24 часов Да Нет Нет Да
TzDate Точность до дней, содержит метку временной зоны Да Нет Нет Да
TzDatetime Содержит метку временной зоны, точность до секунд Да Нет Нет Да
TzTimestamp Содержит метку временной зоны, точность до микросекунд Да Нет Нет Да

Опциональные (nullable)

Любые типизированные данные в YQL, включая столбцы таблиц, бывают как гарантированно имеющие значение, так и потенциально пустые (что обозначается как NULL). Такие значения называют «опциональными» или в терминах SQL «nullable».

Наиболее распространённой операцией для таких типов данных является COALESCE, позволяющий оставить заполненные значения без изменений, а NULL заменить на указанное следом значение по умолчанию.

В текстовом виде опциональные типы выделяются вопросительным знаком в конце (например, String?) или как Optional<...>.

Контейнеры

Название Объявление типа Пример типа Пояснение
Список List<Type> List<Int32> Последовательность переменной длины, состоящая из элементов одного типа
Словарь Dict<KeyType,ValueType> Dict<String,Int32> Набор пар ключ—значение с фиксированным типом ключей и значений
Кортеж 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> Структура, про которую известно, что заполнен ровно один элемент.

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

Опциональные значения в некоторых контекстах также могут рассматриваться как один из видов контейнеров (Optional<Type>), который ведёт себя как список длины 0 или 1.

Для представления множеств следует использовать словарь с значениями типа VoidDict<T, Void>.

Приведение примитивных типов данных

Явное приведение

Явное приведение при помощи CAST:

Bool Int Uint Float Double Decimal String Utf8 Json Yson Uuid Date Datetime Timestamp Interval TzDate TzDatetime TzTimestamp
Bool Да1 Да1 Да1 Да1 Нет Да Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет
Int Да2 Да Да3 Да Да Да Нет Нет Нет Нет Да Да Да Да Нет Нет Нет
Uint Да2 Да Да Да Да Да Нет Нет Нет Нет Да Да Да Да Нет Нет Нет
Float Да2 Да Да Да Нет Да Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет
Double Да2 Да Да Да Нет Да Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет
Decimal Нет Да Да Да Да Да Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет
String Да Да Да Да Да Да Да Да Да Да Да Да Да Да Да Да Да
Utf8 Да Да Да Да Да Да Да Нет Нет Нет Да Да Да Да Да Да Да
Json Нет Нет Нет Нет Нет Нет Да Да Нет Нет Нет Нет Нет Нет Нет Нет Нет
Uuid Нет Нет Нет Нет Нет Нет Да Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет
Date Нет Да Да Да Да Нет Да Нет Нет Нет Нет Да Да Нет Да Да Да
Datetime Нет Да Да Да Да Нет Да Нет Нет Нет Нет Да Да Нет Да Да Да
Timestamp Нет Да Да Да Да Нет Да Нет Нет Нет Нет Да Да Нет Да Да Да
Interval Нет Да Да Да Да Нет Да Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет
TzDate Нет Нет Нет Нет Нет Нет Да Нет Нет Нет Нет Нет Нет Нет Нет Да Да
TzDatetime Нет Нет Нет Нет Нет Нет Да Нет Нет Нет Нет Нет Нет Нет Нет Да Да
TzTimestamp Нет Нет Нет Нет Нет Нет Да Нет Нет Нет Нет Нет Нет Нет Нет Да Да

Примечания к таблице:

  1. True => 1, False => 0.
  2. Всегда True. Исключение: 0 => False.
  3. Возможно только в случае неотрицательного значения.

Неявное приведение

Неявное приведение типов, которое возникает в базовых операциях (+-*/) между разными типами данных. В ячейках таблицы указан тип результата операции, если она возможна:

Bool Int Uint Float Double Decimal String Utf8 Json Yson Uuid Date Datetime Timestamp Interval TzDate TzDatetime TzTimestamp
Bool
Int Int Int Float Double
Uint Int Uint Float Double
Float Float Float Float Double
Double Double Double Double Double
Decimal Decimal
String
Utf8
Json
Uuid
Date Date
Datetime Datetime
Timestamp Timestamp
Interval Date Datetime Timestamp Interval TzDate TzDatetime TzTimestamp
TzDate TzDate
TzDatetime TzDatetime
TzTimestamp TzTimestamp