Функции для работы с 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 старший нулевой бит), за которым следует id машины (10 бит) и счетчик (12 бит) для различения ID в пределах миллисекунды. Для данного временного штампа (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).
generateUUIDv4
Синтаксис
Аргументы
expr
— Произвольное выражение, используемое для обхода удаления общих подвыражений, если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый UUID. Необязательно.
Возвращаемое значение
Значение типа UUIDv4.
Пример
Сначала создайте таблицу с колонкой типа UUID, затем вставьте сгенерированный UUIDv4 в таблицу.
Результат:
Пример с несколькими UUID, сгенерированными на строку
generateUUIDv7
Смотрите раздел "Генерация UUIDv7" для получения подробной информации о структуре UUID, управлении счетчиком и гарантиях производительности.
По состоянию на апрель 2024 года UUID версии 7 находятся в статусе черновика, и их структура может измениться в будущем.
Синтаксис
Аргументы
expr
— Произвольное выражение, используемое для обхода удаления общих подвыражений, если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый UUID. Необязательно.
Возвращаемое значение
Значение типа UUIDv7.
Пример
Сначала создайте таблицу с колонкой типа UUID, затем вставьте сгенерированный UUIDv7 в таблицу.
Результат:
Пример с несколькими UUID, сгенерированными на строку
dateTimeToUUIDv7
Преобразует значение DateTime в UUIDv7 в указанное время.
Смотрите раздел "Генерация UUIDv7" для получения подробной информации о структуре UUID, управлении счетчиком и гарантиях производительности.
По состоянию на апрель 2024 года UUID версии 7 находятся в статусе черновика, и их структура может измениться в будущем.
Синтаксис
Аргументы
value
— Дата с временем. DateTime.
Возвращаемое значение
Значение типа UUIDv7.
Пример
Результат:
Пример с несколькими UUID для одного и того же временного штампа
Результат
Функция гарантирует, что несколько вызовов с одним и тем же временным штампом генерируют уникальные, монотонно увеличивающиеся UUID.
empty
Проверяет, пуст ли входной UUID.
Синтаксис
UUID считается пустым, если он содержит все нули (нулевой UUID).
Функция также работает для Массивов и Строк.
Аргументы
x
— UUID. UUID.
Возвращаемое значение
- Возвращает
1
для пустого UUID или0
для непустого UUID. UInt8.
Пример
Для генерации значения UUID ClickHouse предоставляет функцию generateUUIDv4.
Запрос:
Результат:
notEmpty
Проверяет, не пуст ли входной UUID.
Синтаксис
UUID считается пустым, если он содержит все нули (нулевой UUID).
Функция также работает для Массивов или Строк.
Аргументы
x
— UUID. UUID.
Возвращаемое значение
- Возвращает
1
для непустого UUID или0
для пустого UUID. UInt8.
Пример
Для генерации значения UUID ClickHouse предоставляет функцию generateUUIDv4.
Запрос:
Результат:
toUUID
Преобразует значение типа String в UUID.
Возвращаемое значение
Значение типа UUID.
Пример использования
Результат:
toUUIDOrDefault
Аргументы
string
— Строка из 36 символов или FixedString(36). String.default
— UUID, который будет использоваться в качестве значения по умолчанию, если первый аргумент не может быть преобразован в тип UUID. UUID.
Возвращаемое значение
UUID
Возвращаемое значение
Значение типа UUID.
Примеры использования
В первом примере возвращается аргумент, преобразованный в тип UUID, так как он может быть преобразован:
Результат:
Во втором примере возвращается второй аргумент (предоставленный UUID по умолчанию), так как первый аргумент не может быть преобразован в тип UUID:
Результат:
toUUIDOrNull
Принимает аргумент типа String и пытается разобрать его в UUID. Если это не удалось, возвращает NULL.
Возвращаемое значение
Значение типа Nullable(UUID).
Пример использования
Результат:
toUUIDOrZero
Принимает аргумент типа String и пытается разобрать его в UUID. Если это не удалось, возвращает нулевой UUID.
Возвращаемое значение
Значение типа UUID.
Пример использования
Результат:
UUIDStringToNum
Принимает string
, содержащую 36 символов в формате xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
, и возвращает FixedString(16) в качестве его бинарного представления, с форматом, опционально указанным через variant
(по умолчанию Big-endian
).
Синтаксис
Аргументы
string
— String из 36 символов или FixedStringvariant
— Целое число, представляющее вариант, как указано в RFC4122. 1 =Big-endian
(по умолчанию), 2 =Microsoft
.
Возвращаемое значение
FixedString(16)
Примеры использования
Результат:
Результат:
UUIDNumToString
Принимает binary
, содержащий бинарное представление UUID, с форматом, опционально указанным через variant
(по умолчанию Big-endian
), и возвращает строку, содержащую 36 символов в текстовом формате.
Синтаксис
Аргументы
binary
— FixedString(16) в качестве бинарного представления UUID.variant
— Целое число, представляющее вариант, как указано в RFC4122. 1 =Big-endian
(по умолчанию), 2 =Microsoft
.
Возвращаемое значение
String.
Пример использования
Результат:
Результат:
UUIDToNum
Принимает UUID и возвращает его бинарное представление в виде FixedString(16), с форматом, опционально указанным через variant
(по умолчанию Big-endian
). Эта функция заменяет вызовы двух отдельных функций UUIDStringToNum(toString(uuid))
, так что промежуточное преобразование из UUID в строку не требуется для извлечения байтов из UUID.
Синтаксис
Аргументы
uuid
— UUID.variant
— Целое число, представляющее вариант, как указано в RFC4122. 1 =Big-endian
(по умолчанию), 2 =Microsoft
.
Возвращаемое значение
Бинарное представление UUID.
Примеры использования
Результат:
Результат:
UUIDv7ToDateTime
Возвращает компонент временного штампа UUID версии 7.
Синтаксис
Аргументы
uuid
— UUID версии 7.timezone
— Имя часового пояса для возвращаемого значения (необязательно). String.
Возвращаемое значение
- Временной штамп с точностью до миллисекунд. Если UUID не является действительным UUID версии 7, возвращает 1970-01-01 00:00:00.000. DateTime64(3).
Примеры использования
Результат:
Результат:
serverUUID
Возвращает случайный UUID, сгенерированный во время первого запуска сервера ClickHouse. UUID хранится в файле uuid
в директории сервера ClickHouse (например, /var/lib/clickhouse/
) и сохраняется между перезапусками сервера.
Синтаксис
Возвращаемое значение
- UUID сервера. UUID.
generateSnowflakeID
Генерирует Snowflake ID. Эта функция гарантирует, что поле счетчика в пределах временного штампа монотонно увеличивается во всех вызовах функций в параллельно работающих потоках и запросах.
Смотрите раздел "Генерация Snowflake ID" для получения подробной информации о реализации.
Синтаксис
Аргументы
expr
— Произвольное выражение, используемое для обхода удаления общих подвыражений, если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый Snowflake ID. Необязательно.machine_id
— ID машины, используются 10 младших битов. Int64. Необязательно.
Возвращаемое значение
Значение типа UInt64.
Пример
Сначала создайте таблицу с колонкой типа UInt64, затем вставьте сгенерированный Snowflake ID в таблицу.
Результат:
Пример с несколькими Snowflake ID, сгенерированными на строку
Пример с выражением и ID машины
snowflakeToDateTime
Эта функция устарела и может быть использована только в том случае, если настройка allow_deprecated_snowflake_conversion_functions включена. Функция будет удалена в будущем.
Пожалуйста, используйте функцию snowflakeIDToDateTime вместо этого.
Извлекает компонент временного штампа Snowflake ID в формате DateTime.
Синтаксис
Аргументы
value
— Snowflake ID. Int64.time_zone
— Часовой пояс. Функция разбираетtime_string
в соответствии с часовым поясом. Необязательно. String.
Возвращаемое значение
- Компонент временного штампа
value
как значение DateTime.
Пример
Запрос:
Результат:
snowflakeToDateTime64
Эта функция устарела и может быть использована только в том случае, если настройка allow_deprecated_snowflake_conversion_functions включена. Функция будет удалена в будущем.
Пожалуйста, используйте функцию snowflakeIDToDateTime64 вместо этого.
Извлекает компонент временного штампа Snowflake ID в формате DateTime64.
Синтаксис
Аргументы
value
— Snowflake ID. Int64.time_zone
— Часовой пояс. Функция разбираетtime_string
в соответствии с часовым поясом. Необязательно. String.
Возвращаемое значение
- Компонент временного штампа
value
как значение DateTime64 с масштабом = 3, т.е. с точностью до миллисекунд.
Пример
Запрос:
Результат:
dateTimeToSnowflake
Эта функция устарела и может быть использована только в том случае, если настройка allow_deprecated_snowflake_conversion_functions включена. Функция будет удалена в будущем.
Пожалуйста, используйте функцию dateTimeToSnowflakeID вместо этого.
Преобразует значение DateTime в первый Snowflake ID в указанное время.
Синтаксис
Аргументы
value
— Дата с временем. DateTime.
Возвращаемое значение
- Входное значение, преобразованное в тип Int64 как первый Snowflake ID в это время.
Пример
Запрос:
Результат:
dateTime64ToSnowflake
Эта функция устарела и может быть использована только в том случае, если настройка allow_deprecated_snowflake_conversion_functions включена. Функция будет удалена в будущем.
Пожалуйста, используйте функцию dateTime64ToSnowflakeID вместо этого.
Преобразует DateTime64 в первый Snowflake ID в указанное время.
Синтаксис
Аргументы
value
— Дата с временем. DateTime64.
Возвращаемое значение
- Входное значение, преобразованное в тип Int64 как первый Snowflake ID в это время.
Пример
Запрос:
Результат:
snowflakeIDToDateTime
Возвращает компонент временного штампа Snowflake ID как значение типа DateTime.
Синтаксис
Аргументы
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.
Пример
Запрос:
Результат:
snowflakeIDToDateTime64
Возвращает компонент временного штампа Snowflake ID как значение типа DateTime64.
Синтаксис
Аргументы
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 с масштабом = 3, т.е. с точностью до миллисекунд.
Пример
Запрос:
Результат:
dateTimeToSnowflakeID
Преобразует значение DateTime в первый Snowflake ID в указанное время.
Синтаксис
Аргументы
value
— Дата с временем. DateTime.epoch
- Эпоха Snowflake ID в миллисекундах с 1970-01-01. По умолчанию 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. Необязательно. UInt*.
Возвращаемое значение
- Входное значение, преобразованное в UInt64 как первый Snowflake ID в это время.
Пример
Запрос:
Результат:
dateTime64ToSnowflakeID
Преобразует DateTime64 в первый Snowflake ID в указанное время.
Синтаксис
Аргументы
value
— Дата с временем. DateTime64.epoch
- Эпоха Snowflake ID в миллисекундах с 1970-01-01. По умолчанию 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. Необязательно. UInt*.
Возвращаемое значение
- Входное значение, преобразованное в UInt64 как первый Snowflake ID в это время.
Пример
Запрос:
Результат: