Функции для работы с UUID
Генерация UUIDv7
Сгенерированный UUID содержит 48-битный таймстамп в миллисекундах Unix-времени, за которым следуют версия «7» (4 бита), счётчик (42 бита) для различения UUID в пределах одной миллисекунды (включая поле варианта «2» — 2 бита) и случайное поле (32 бита).
Для любого заданного таймстампа (unix_ts_ms) счётчик начинается со случайного значения и увеличивается на 1 для каждого нового UUID до тех пор, пока таймстамп не изменится. В случае переполнения счётчика поле таймстампа увеличивается на 1, а счётчик сбрасывается на новое случайное начальное значение.
Функции генерации UUID гарантируют, что поле счётчика в пределах одного таймстампа монотонно возрастает во всех вызовах функции в параллельно выполняющихся потоках и запросах.
Генерация Snowflake ID
Сгенерированный Snowflake ID содержит текущую Unix-метку времени в миллисекундах (41 бит + 1 старший нулевой бит), за которой следуют идентификатор машины (10 бит) и счётчик (12 бит) для различения идентификаторов в пределах одной миллисекунды. Для любой заданной метки времени (unix_ts_ms) счётчик начинается с 0 и увеличивается на 1 для каждого нового Snowflake ID до изменения метки времени. В случае переполнения счётчика поле метки времени увеличивается на 1, а счётчик сбрасывается в 0.
Сгенерированные Snowflake ID основаны на эпохе UNIX 1970-01-01. Хотя не существует стандарта или рекомендаций для эпохи Snowflake ID, реализации в других системах могут использовать другую эпоху, например Twitter/X (2010-11-04) или Mastodon (2015-01-01).
UUIDNumToString
Введена в версии: v1.1
Принимает двоичное представление UUID, формат которого может быть дополнительно указан с помощью параметра variant (по умолчанию — Big-endian), и возвращает строку длиной 36 символов в текстовом формате.
Синтаксис
Аргументы
binary— Двоичное представление UUID.FixedString(16)variant— Вариант, как указано в RFC4122. 1 =Big-endian(по умолчанию), 2 =Microsoft.(U)Int*
Возвращаемое значение
Возвращает UUID в виде строки. String
Примеры
Пример использования
Вариант Microsoft
UUIDStringToNum
Появилась в версии v1.1
Принимает строку из 36 символов в формате xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx и возвращает FixedString(16) как её двоичное представление; формат может быть при необходимости задан параметром variant (по умолчанию Big-endian).
Синтаксис
Аргументы
string— строка или фиксированная строка длиной 36 символовStringилиFixedString(36)variant— вариант, определённый в RFC4122. 1 =Big-endian(по умолчанию), 2 =Microsoft.(U)Int*
Возвращаемое значение
Возвращает двоичное представление string. FixedString(16)
Примеры
Пример использования
Вариант Microsoft
UUIDToNum
Введена в: v24.5
Принимает UUID и возвращает его двоичное представление в виде FixedString(16), при этом его формат может быть дополнительно указан параметром variant (по умолчанию Big-endian).
Эта функция заменяет сочетание вызовов UUIDStringToNum(toString(uuid)), поэтому для извлечения байтов из UUID не требуется промежуточное преобразование UUID в строку.
Синтаксис
Аргументы
uuid— UUID.StringилиFixedStringvariant— вариант, как указано в RFC4122. 1 =Big-endian(по умолчанию), 2 =Microsoft.(U)Int*
Возвращаемое значение
Возвращает двоичное представление UUID. FixedString(16)
Примеры
Пример использования
Вариант от Microsoft
UUIDv7ToDateTime
Добавлена в: v24.5
Возвращает компонент отметки времени UUID версии 7.
Синтаксис
Аргументы
uuid— UUID версии 7.Stringtimezone— необязательный параметр. Название часового пояса для возвращаемого значения.String
Возвращаемое значение
Возвращает метку времени с точностью до миллисекунд. Если UUID не является корректным UUID версии 7, возвращает 1970-01-01 00:00:00.000. DateTime64(3)
Примеры
Пример использования
С учётом часового пояса
dateTime64ToSnowflake
Появилась в версии: v21.10
Эта функция устарела и может использоваться только в том случае, если включена настройка allow_deprecated_snowflake_conversion_functions.
Функция будет удалена в какой‑то момент в будущем.
Используйте вместо неё функцию dateTime64ToSnowflakeID.
Преобразует DateTime64 в первый Snowflake ID для заданного момента времени.
Синтаксис
Аргументы
value— дата и время.DateTime64
Возвращаемое значение
Возвращает входное значение, преобразованное в первый Snowflake ID, соответствующий этому моменту времени. Int64
Примеры
Пример использования
dateTime64ToSnowflakeID
Добавлено в версии: v24.6
Преобразует значение DateTime64 в первый идентификатор Snowflake ID для заданного момента времени.
Синтаксис
Аргументы
value— Дата и время.DateTime64epoch— Эпоха идентификатора Snowflake в миллисекундах, отсчитываемых с 1970-01-01. Значение по умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657.UInt*
Возвращаемое значение
Входное значение, преобразованное в тип UInt64
Примеры
Простой пример
dateTimeToSnowflake
Добавлено в: v21.10
Эта функция устарела и может использоваться только в том случае, если включена настройка allow_deprecated_snowflake_conversion_functions.
Функция будет удалена в будущем.
Вместо неё используйте функцию dateTimeToSnowflakeID.
Преобразует значение DateTime в первый Snowflake ID для заданного момента времени.
Синтаксис
Аргументы
value— Дата и время.DateTime
Возвращаемое значение
Возвращает первый возможный Snowflake ID для этого момента времени. Int64
Примеры
Пример использования
dateTimeToSnowflakeID
Добавлено в версии: v24.6
Преобразует значение DateTime в первый Snowflake ID в заданный момент времени.
Синтаксис
Аргументы
value— дата и время.DateTimeepoch— эпоха идентификатора Snowflake в миллисекундах, прошедших с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657.UInt*
Возвращаемое значение
Значение на входе, преобразованное в UInt64
Примеры
простой
dateTimeToUUIDv7
Введена в версии: v25.9
Преобразует значение DateTime в UUIDv7 в заданный момент времени.
См. раздел «Генерация UUIDv7» для подробностей о структуре UUID, управлении счётчиком и гарантиях при параллельном выполнении.
По состоянию на сентябрь 2025 года UUID версии 7 находятся в статусе черновика, и их структура может измениться в будущем.
Синтаксис
Аргументы
value— Дата и время.DateTime
Возвращаемое значение
Возвращает UUIDv7. UUID
Примеры
Пример использования
несколько UUID для одной и той же временной метки
generateSnowflakeID
Появилась в версии v24.6
Генерирует Snowflake ID.
Функция generateSnowflakeID гарантирует, что поле счётчика внутри метки времени монотонно увеличивается во всех вызовах функции, выполняющихся в параллельных потоках и запросах.
См. раздел "Генерация Snowflake ID" для подробностей реализации.
Синтаксис
Аргументы
expr— Произвольное выражение, используемое для обхода устранения общих подвыражений, если функция вызывается несколько раз в одном запросе. Значение выражения не влияет на возвращаемый Snowflake ID. Необязательный параметр.machine_id— Идентификатор машины, используются младшие 10 бит. Int64. Необязательный параметр.
Возвращаемое значение
Возвращает Snowflake ID. UInt64
Примеры
Пример использования
Несколько идентификаторов Snowflake, создаваемых для каждой строки
С выражением и идентификатором машины
generateUUIDv4
Добавлена в версии: v1.1
Синтаксис
Аргументы
expr— Необязательный параметр. Произвольное выражение, используемое для обхода механизма устранения общих подвыражений, если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый UUID.
Возвращаемое значение
Возвращает UUIDv4. UUID
Примеры
Пример использования
Устранение общих подвыражений
generateUUIDv7
Добавлено в: v24.5
Генерирует UUID версии 7 (UUID).
См. раздел "Генерация UUIDv7" для получения подробной информации о структуре UUID, управлении счётчиком и гарантиях при конкурентном доступе.
По состоянию на сентябрь 2025 года UUID версии 7 имеют статус черновика, и их структура может измениться в будущем.
Синтаксис
Аргументы
expr— Необязательный параметр. Произвольное выражение, используемое для обхода устранения общих подвыражений, если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый UUID.Any
Возвращаемое значение
Возвращает UUIDv7. UUID
Примеры
Пример использования
Устранение общих подвыражений
snowflakeIDToDateTime
Введена в версии: v24.6
Возвращает компонент временной метки идентификатора Snowflake ID как значение типа DateTime.
Синтаксис
Аргументы
value— Snowflake ID.UInt64epoch— Необязательный аргумент. Эпоха Snowflake ID в миллисекундах, прошедших с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657.UInt*time_zone— Необязательный аргумент. Часовой пояс. Функция интерпретируетtime_stringв соответствии с часовым поясом.String
Возвращаемое значение
Возвращает компонент метки времени из value. DateTime
Примеры
Пример использования
snowflakeIDToDateTime64
Добавлена в: v24.6
Возвращает компонент метки времени Snowflake ID в виде значения типа DateTime64.
Синтаксис
Аргументы
value— Snowflake ID.UInt64epoch— Необязательный параметр. Эпоха Snowflake ID в миллисекундах с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657.UInt*time_zone— Необязательный параметр. Часовой пояс. Функция интерпретируетtime_stringв соответствии с этим часовым поясом.String
Возвращаемое значение
Возвращает компонент метки времени из value как DateTime64 с масштабом 3, то есть с точностью до миллисекунд. DateTime64
Примеры
Пример использования
snowflakeToDateTime
Введена в версии v21.10
Эта функция устарела и может использоваться только в том случае, если включена настройка allow_deprecated_snowflake_conversion_functions.
Функция будет удалена в будущем.
Используйте вместо неё функцию snowflakeIDToDateTime.
Извлекает часть временной метки из Snowflake ID в формате DateTime.
Синтаксис
Аргументы
value— Snowflake ID.Int64time_zone— Необязательный параметр. Timezone. Функция интерпретируетtime_stringв указанном часовом поясе.String
Возвращаемое значение
Возвращает компонент метки времени значения value. DateTime
Примеры
Пример использования
snowflakeToDateTime64
Появилась в: v21.10
Эта функция устарела и может использоваться только в том случае, если включена настройка allow_deprecated_snowflake_conversion_functions.
Функция будет удалена в одной из будущих версий.
Вместо неё используйте функцию snowflakeIDToDateTime64.
Извлекает компонент отметки времени из Snowflake ID и возвращает его в формате DateTime64.
Синтаксис
Аргументы
value— Snowflake ID.Int64time_zone— необязательный параметр. Timezone. Функция разбираетtime_stringв соответствии с часовым поясом.String
Возвращаемое значение
Возвращает компонент метки времени из value. DateTime64(3)
Примеры
Пример использования
toUUIDOrDefault
Добавлена в: v21.1
Преобразует значение типа String в тип UUID. Если преобразование не удаётся, возвращает значение UUID по умолчанию вместо генерации ошибки.
Эта функция пытается разобрать строку длиной 36 символов в стандартном формате UUID (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). Если строку нельзя преобразовать в допустимый UUID, функция возвращает переданное значение UUID по умолчанию.
Синтаксис
Аргументы
string— строка длиной 36 символов или FixedString(36), которая будет преобразована в UUID.default— значение UUID, которое возвращается, если первый аргумент не может быть преобразован к типу UUID.
Возвращаемое значение
Возвращает преобразованный UUID при успешном выполнении или значение UUID по умолчанию при ошибке преобразования. UUID
Примеры
Успешное преобразование возвращает распарсенный UUID
При ошибке преобразования возвращается UUID по умолчанию
toUUIDOrNull
Добавлено в: v20.12
Преобразует входное значение в значение типа UUID, но в случае ошибки возвращает NULL.
Аналогично toUUID, но возвращает NULL вместо генерации исключения при ошибках преобразования.
Поддерживаемые аргументы:
- Строковые представления UUID в стандартном формате (8-4-4-4-12 шестнадцатеричных цифр).
- Строковые представления UUID без дефисов (32 шестнадцатеричные цифры).
Неподдерживаемые аргументы (возвращают NULL):
- Некорректные строковые форматы.
- Типы данных, отличные от строковых.
- Некорректные UUID.
Синтаксис
Аргументы
x— строковое представление UUID.String
Возвращаемое значение
Возвращает значение UUID, если преобразование прошло успешно, в противном случае — NULL. UUID или NULL
Примеры
Примеры использования