Сгенерированный UUID содержит 48-битную временную метку в миллисекундах Unix, за которой следуют версия “7” (4 бита), счётчик (42 бита) для различения UUID в пределах одной миллисекунды (включая поле варианта “2”, 2 бита) и случайное поле (32 бита).
Для любой заданной временной метки (unix_ts_ms) счётчик начинается со случайного значения и увеличивается на 1 для каждого нового UUID, пока временная метка не изменится. В случае переполнения счётчика поле временной метки увеличивается на 1, а счётчик сбрасывается до нового случайного начального значения.
Функции генерации UUID гарантируют, что поле счётчика в пределах одной временной метки монотонно увеличивается при всех вызовах функций в параллельно выполняемых потоках и запросах.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
| unix_ts_ms |
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
| unix_ts_ms | ver | counter_high_bits |
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
|var| counter_low_bits |
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
| rand_b |
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
Сгенерированный 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).
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
|0| timestamp |
├─┼ ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
| | machine_id | machine_seq_num |
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
Добавленный в: v1.1.0
Принимает UUID в двоичном представлении, при необходимости с указанием формата через variant (по умолчанию — Big-endian), и возвращает строку из 36 символов в текстовом формате.
Синтаксис
UUIDNumToString(binary[, variant])
Аргументы
binary — Двоичное представление UUID. FixedString(16)
variant — Вариант в соответствии с RFC4122. 1 = Big-endian (по умолчанию), 2 = Microsoft. (U)Int*
Возвращаемое значение
Возвращает UUID в виде строки. String
Примеры
Пример использования
SELECT
'a/<@];!~p{jTj={)' AS bytes,
UUIDNumToString(toFixedString(bytes, 16)) AS uuid
┌─bytes────────────┬─uuid─────────────────────────────────┐
│ a/<@];!~p{jTj={) │ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │
└──────────────────┴──────────────────────────────────────┘
Вариант Microsoft
SELECT
'@</a;]~!p{jTj={)' AS bytes,
UUIDNumToString(toFixedString(bytes, 16), 2) AS uuid
┌─bytes────────────┬─uuid─────────────────────────────────┐
│ @</a;]~!p{jTj={) │ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │
└──────────────────┴──────────────────────────────────────┘
Добавленный в: v1.1.0
Принимает строку из 36 символов в формате xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx и возвращает FixedString(16) с её двоичным представлением; при необходимости формат можно указать с помощью variant (по умолчанию — Big-endian).
Синтаксис
UUIDStringToNum(string[, variant = 1])
Аргументы
string — Строка или строка фиксированной длины из 36 символов String или FixedString(36)
variant — Вариант согласно RFC4122. 1 = Big-endian (по умолчанию), 2 = Microsoft. (U)Int*
Возвращаемое значение
Возвращает двоичное представление string. FixedString(16)
Примеры
Пример использования
SELECT
'612f3c40-5d3b-217e-707b-6a546a3d7b29' AS uuid,
UUIDStringToNum(uuid) AS bytes
┌─uuid─────────────────────────────────┬─bytes────────────┐
│ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ a/<@];!~p{jTj={) │
└──────────────────────────────────────┴──────────────────┘
Вариант Microsoft
SELECT
'612f3c40-5d3b-217e-707b-6a546a3d7b29' AS uuid,
UUIDStringToNum(uuid, 2) AS bytes
┌─uuid─────────────────────────────────┬─bytes────────────┐
│ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ @</a;]~!p{jTj={) │
└──────────────────────────────────────┴──────────────────┘
Добавленный в: v24.5.0
Принимает UUID и возвращает его двоичное представление в виде FixedString(16); при необходимости формат можно задать через variant (по умолчанию — Big-endian).
Эта функция заменяет вызов двух отдельных функций UUIDStringToNum(toString(uuid)), поэтому для извлечения байтов из UUID не требуется промежуточное преобразование UUID в строку.
Синтаксис
UUIDToNum(uuid[, variant = 1])
Аргументы
Возвращаемое значение
Возвращает двоичное представление UUID. FixedString(16)
Примеры
Пример использования
SELECT
toUUID('612f3c40-5d3b-217e-707b-6a546a3d7b29') AS uuid,
UUIDToNum(uuid) AS bytes
┌─uuid─────────────────────────────────┬─bytes────────────┐
│ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ a/<@];!~p{jTj={) │
└──────────────────────────────────────┴──────────────────┘
Вариант Microsoft
SELECT
toUUID('612f3c40-5d3b-217e-707b-6a546a3d7b29') AS uuid,
UUIDToNum(uuid, 2) AS bytes
┌─uuid─────────────────────────────────┬─bytes────────────┐
│ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ @</a;]~!p{jTj={) │
└──────────────────────────────────────┴──────────────────┘
Добавленный в: v24.5.0
Возвращает компонент временной метки из UUID версии 7.
Синтаксис
UUIDv7ToDateTime(uuid[, timezone])
Аргументы
Возвращаемое значение
Возвращает временную метку с точностью до миллисекунд. Если UUID не является корректным UUID версии 7, возвращает 1970-01-01 00:00:00.000. DateTime64(3)
Примеры
Пример использования
SELECT UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'))
┌─UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'))─┐
│ 2024-04-22 15:30:29.048 │
└──────────────────────────────────────────────────────────────────┘
С указанием часового пояса
SELECT UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'), 'America/New_York')
┌─UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'), 'America/New_York')─┐
│ 2024-04-22 11:30:29.048 │
└─────────────────────────────────────────────────────────────────────────────────────┘
Добавленный в: v21.10.0
Преобразует DateTime64 в первый Snowflake ID для указанного момента времени.
Синтаксис
dateTime64ToSnowflake(value)
Аргументы
Возвращаемое значение
Возвращает входное значение, преобразованное в первый Snowflake ID для этого момента времени. Int64
Примеры
Пример использования
WITH toDateTime64('2021-08-15 18:57:56.492', 3, 'Asia/Shanghai') AS dt64 SELECT dateTime64ToSnowflake(dt64);
┌─dateTime64ToSnowflake(dt64)─┐
│ 1426860704886947840 │
└─────────────────────────────┘
Добавленный в: v24.6.0
Преобразует значение DateTime64 в первый Snowflake ID, соответствующий заданному моменту времени.
Синтаксис
dateTime64ToSnowflakeID(value[, epoch])
Аргументы
value — Дата и время. DateTime64
epoch — Эпоха для Snowflake ID в миллисекундах с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. UInt*
Возвращаемое значение
Входное значение, преобразованное в UInt64
Примеры
простой
SELECT dateTime64ToSnowflakeID(toDateTime64('2021-08-15 18:57:56', 3, 'Asia/Shanghai'))
Добавленный в: v21.10.0
Преобразует значение DateTime в первый Snowflake ID для указанного момента времени.
Синтаксис
dateTimeToSnowflake(value)
Аргументы
Возвращаемое значение
Возвращает входное значение в виде первого Snowflake ID для данного момента времени. Int64
Примеры
Пример использования
WITH toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt SELECT dateTimeToSnowflake(dt);
┌─dateTimeToSnowflake(dt)─┐
│ 1426860702823350272 │
└─────────────────────────┘
Добавленный в: v24.6.0
Преобразует значение DateTime в первый Snowflake ID для заданного момента времени.
Синтаксис
dateTimeToSnowflakeID(value[, epoch])
Аргументы
value — Дата и время. DateTime
epoch — эпоха Snowflake ID в миллисекундах с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. UInt*
Возвращаемое значение
Входное значение, преобразованное в UInt64
Примеры
простой
SELECT dateTimeToSnowflakeID(toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai'))
Добавленный в: v25.8.0
Преобразует значение DateTime в UUIDv7 для указанного момента времени.
Подробные сведения о структуре UUID, управлении счётчиком и гарантиях параллелизма см. в разделе “Генерация UUIDv7”.
По состоянию на сентябрь 2025 года UUID версии 7 имеют статус черновика, и их структура может измениться в будущем.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает UUIDv7. UUID
Примеры
Пример использования
SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai'));
┌─dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai'))─┐
│ 018f05af-f4a8-778f-beee-1bedbc95c93b │
└─────────────────────────────────────────────────────────────────────────┘
несколько UUID для одной и той же временной метки
SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56'));
SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56'));
┌─dateTimeToUUIDv7(t⋯08-15 18:57:56'))─┐
│ 017b4b2d-7720-76ed-ae44-bbcc23a8c550 │
└──────────────────────────────────────┘
┌─dateTimeToUUIDv7(t⋯08-15 18:57:56'))─┐
│ 017b4b2d-7720-76ed-ae44-bbcf71ed0fd3 │
└──────────────────────────────────────┘
Добавленный в: v24.6.0
Генерирует Snowflake ID.
Функция generateSnowflakeID гарантирует, что значение поля счётчика в пределах одной временной метки монотонно увеличивается при всех вызовах функции в параллельно выполняющихся потоках и запросах.
Подробности реализации см. в разделе “Генерация Snowflake ID”.
Синтаксис
generateSnowflakeID([expr, [machine_id]])
Аргументы
expr — Произвольное выражение, используемое для обхода устранения общих подвыражений, если функция вызывается в запросе несколько раз. Значение выражения не влияет на возвращаемый Snowflake ID. Необязательно. - machine_id — Идентификатор машины; используются младшие 10 бит. Int64. Необязательно.
Возвращаемое значение
Возвращает Snowflake ID. UInt64
Примеры
Пример использования
CREATE TABLE tab (id UInt64)
ENGINE = MergeTree()
ORDER BY tuple();
INSERT INTO tab SELECT generateSnowflakeID();
SELECT * FROM tab;
┌──────────────────id─┐
│ 7199081390080409600 │
└─────────────────────┘
Генерация нескольких Snowflake ID для каждой строки
SELECT generateSnowflakeID(1), generateSnowflakeID(2);
┌─generateSnowflakeID(1)─┬─generateSnowflakeID(2)─┐
│ 7199081609652224000 │ 7199081609652224001 │
└────────────────────────┴────────────────────────┘
С выражением и идентификатором машины
SELECT generateSnowflakeID('expr', 1);
┌─generateSnowflakeID('expr', 1)─┐
│ 7201148511606784002 │
└────────────────────────────────┘
Добавленный в: v1.1.0
Генерирует UUID версии 4 UUID.
Синтаксис
Аргументы
expr — Необязательный. Произвольное выражение, используемое для обхода устранения общих подвыражений, если функция вызывается в запросе несколько раз. Значение выражения не влияет на возвращаемый UUID.
Возвращаемое значение
Возвращает UUIDv4. UUID
Примеры
Пример использования
SELECT generateUUIDv4(number) FROM numbers(3);
┌─generateUUIDv4(number)───────────────┐
│ fcf19b77-a610-42c5-b3f5-a13c122f65b6 │
│ 07700d36-cb6b-4189-af1d-0972f23dc3bc │
│ 68838947-1583-48b0-b9b7-cf8268dd343d │
└──────────────────────────────────────┘
Устранение общих подвыражений
SELECT generateUUIDv4(1), generateUUIDv4(1);
┌─generateUUIDv4(1)────────────────────┬─generateUUIDv4(2)────────────────────┐
│ 2d49dc6e-ddce-4cd0-afb8-790956df54c1 │ 2d49dc6e-ddce-4cd0-afb8-790956df54c1 │
└──────────────────────────────────────┴──────────────────────────────────────┘
Добавленный в: v24.5.0
Генерирует UUID версии 7 типа UUID.
Подробные сведения о структуре UUID, управлении счётчиком и гарантиях параллелизма см. в разделе “Генерация UUIDv7”.
По состоянию на сентябрь 2025 года UUID версии 7 имеют статус черновика, и их структура в будущем может измениться.
Синтаксис
Аргументы
expr — Необязательный. Произвольное выражение, используемое для отключения устранения общих подвыражений, если функция вызывается в запросе несколько раз. Значение выражения не влияет на возвращаемый UUID. Any
Возвращаемое значение
Возвращает UUIDv7. UUID
Примеры
Пример использования
SELECT generateUUIDv7(number) FROM numbers(3);
┌─generateUUIDv7(number)───────────────┐
│ 019947fb-5766-7ed0-b021-d906f8f7cebb │
│ 019947fb-5766-7ed0-b021-d9072d0d1e07 │
│ 019947fb-5766-7ed0-b021-d908dca2cf63 │
└──────────────────────────────────────┘
Устранение общих подвыражений
SELECT generateUUIDv7(1), generateUUIDv7(1);
┌─generateUUIDv7(1)────────────────────┬─generateUUIDv7(1)────────────────────┐
│ 019947ff-0f87-7d88-ace0-8b5b3a66e0c1 │ 019947ff-0f87-7d88-ace0-8b5b3a66e0c1 │
└──────────────────────────────────────┴──────────────────────────────────────┘
Добавленный в: v24.6.0
Возвращает компонент временной метки Snowflake ID в виде значения типа DateTime.
Синтаксис
snowflakeIDToDateTime(value[, epoch[, time_zone]])
Аргументы
value — Snowflake ID. UInt64
epoch — Необязательно. Эпоха Snowflake ID в миллисекундах, отсчитываемых с 1970-01-01. Значение по умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. UInt*
time_zone — Необязательно. Часовой пояс. Функция разбирает time_string с учетом часового пояса. String
Возвращаемое значение
Возвращает компонент временной метки значения value. DateTime
Примеры
Пример использования
SELECT snowflakeIDToDateTime(7204436857747984384) AS res
┌─────────────────res─┐
│ 2024-06-06 10:59:58 │
└─────────────────────┘
Добавленный в: v24.6.0
Возвращает компонент временной метки Snowflake ID в виде значения типа DateTime64.
Синтаксис
snowflakeIDToDateTime64(value[, epoch[, time_zone]])
Аргументы
value — Snowflake ID. UInt64
epoch — Необязательно. Эпоха Snowflake ID в миллисекундах с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. UInt*
time_zone — Необязательно. Часовой пояс. Функция интерпретирует time_string в соответствии с часовым поясом. String
Возвращаемое значение
Возвращает компонент временной метки из value в виде DateTime64 с scale = 3, то есть с точностью до миллисекунд. DateTime64
Примеры
Пример использования
SELECT snowflakeIDToDateTime64(7204436857747984384) AS res
┌─────────────────res─┐
│ 2024-06-06 10:59:58 │
└─────────────────────┘
Добавленный в: v21.10.0
Извлекает компонент временной метки из Snowflake ID в формате DateTime.
Синтаксис
snowflakeToDateTime(value[, time_zone])
Аргументы
value — Snowflake ID. Int64
time_zone — Необязательно. Часовой пояс. Функция разбирает time_string с учетом часового пояса. String
Возвращаемое значение
Возвращает компонент временной метки значения value. DateTime
Примеры
Пример использования
SELECT snowflakeToDateTime(CAST('1426860702823350272', 'Int64'), 'UTC');
┌─snowflakeToDateTime(CAST('1426860702823350272', 'Int64'), 'UTC')─┐
│ 2021-08-15 10:57:56 │
└──────────────────────────────────────────────────────────────────┘
Добавленный в: v21.10.0
Извлекает компонент временной метки из Snowflake ID в формате DateTime64.
Синтаксис
snowflakeToDateTime64(value[, time_zone])
Аргументы
value — Snowflake ID. Int64
time_zone — Необязательно. Часовой пояс. Функция разбирает time_string с учётом часового пояса. String
Возвращаемое значение
Возвращает компонент временной метки значения value. DateTime64(3)
Примеры
Пример использования
SELECT snowflakeToDateTime64(CAST('1426860802823350272', 'Int64'), 'UTC');
┌─snowflakeToDateTime64(CAST('1426860802823350272', 'Int64'), 'UTC')─┐
│ 2021-08-15 10:58:19.841 │
└────────────────────────────────────────────────────────────────────┘
Добавленный в: v21.1.0
Преобразует значение типа String в тип UUID. Если преобразование не удаётся, вместо генерации ошибки возвращает UUID по умолчанию.
Эта функция пытается разобрать строку из 36 символов в стандартном формате UUID (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Если строку не удаётся преобразовать в корректный UUID, функция возвращает указанное значение UUID по умолчанию.
Синтаксис
toUUIDOrDefault(string, default)
Аргументы
string — строка из 36 символов или FixedString(36), которую нужно преобразовать в UUID. - default — значение UUID, которое возвращается, если первый аргумент не удаётся преобразовать в тип UUID.
Возвращаемое значение
Возвращает преобразованный UUID в случае успеха или UUID по умолчанию, если преобразование не удалось. UUID
Примеры
При успешном преобразовании возвращается разобранный UUID
SELECT toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0'));
┌─toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0'))─┐
│ 61f0c404-5cb3-11e7-907b-a6006ad3dba0 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────┘
В случае неудачного преобразования возвращается UUID по умолчанию
SELECT toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0'));
┌─toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0'))─┐
│ 59f0c404-5cb3-11e7-907b-a6006ad3dba0 │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Добавленный в: v20.12.0
Преобразует входное значение в значение типа UUID, но в случае ошибки возвращает NULL.
Аналогична toUUID, но при ошибках преобразования возвращает NULL вместо того, чтобы генерировать исключение.
Поддерживаемые аргументы:
- Строковые представления UUID в стандартном формате (8-4-4-4-12 шестнадцатеричных цифр).
- Строковые представления UUID без дефисов (32 шестнадцатеричные цифры).
Неподдерживаемые аргументы (возвращают NULL):
- Недопустимые строковые форматы.
- Типы, отличные от строковых.
- Некорректные UUID.
Синтаксис
Аргументы
x — Строковое представление UUID. String
Возвращаемое значение
Возвращает UUID при успешном выполнении, в противном случае — NULL. UUID или NULL
Примеры
Примеры использования
SELECT
toUUIDOrNull('550e8400-e29b-41d4-a716-446655440000') AS valid_uuid,
toUUIDOrNull('invalid-uuid') AS invalid_uuid
┌─valid_uuid───────────────────────────┬─invalid_uuid─┐
│ 550e8400-e29b-41d4-a716-446655440000 │ ᴺᵁᴸᴸ │
└──────────────────────────────────────┴──────────────┘
Последнее изменение 10 июня 2026 г.