Функции для работы с UUID
generateUUIDv4
Синтаксис
Аргументы
expr
— Произвольное выражение, используемое для обхода устранения общих подпроцессов, если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый UUID. Необязательно.
Возвращаемое значение
Значение типа UUIDv4.
Пример
Сначала создайте таблицу с колонкой типа UUID, затем вставьте сгенерированный UUIDv4 в таблицу.
Результат:
Пример с несколькими UUID, сгенерированными на строку
generateUUIDv7
Сгенерированный UUID содержит текущую метку времени Unix в миллисекундах (48 бит), за которой следует версия "7" (4 бита), счетчик (42 бита) для различения UUID в пределах одной миллисекунды (включая поле варианта "2", 2 бита) и случайное поле (32 бита). Для данной метки времени (unix_ts_ms) счетчик начинается с случайного значения и увеличивается на 1 для каждого нового UUID, пока метка времени не изменится. В случае переполнения счетчика поле метки времени увеличивается на 1, и счетчик сбрасывается на случайное новое стартовое значение.
Функция generateUUIDv7
гарантирует, что поле счетчика в пределах метки времени увеличивается монотонно во всех вызовах функции в параллельно работающих потоках и запросах.
С апреля 2024 года UUID версии 7 находятся в статусе черновика, и их структура может измениться в будущем.
Синтаксис
Аргументы
expr
— Произвольное выражение, используемое для обхода устранения общих подпроцессов, если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый UUID. Необязательно.
Возвращаемое значение
Значение типа UUIDv7.
Пример
Сначала создайте таблицу с колонкой типа UUID, затем вставьте сгенерированный UUIDv7 в таблицу.
Результат:
Пример с несколькими 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 содержит текущую метку времени Unix в миллисекундах (41 + 1 старшие нулевые бита), за которой следует идентификатор машины (10 бит) и счетчик (12 бит) для различения идентификаторов в пределах одной миллисекунды. Для данной метки времени (unix_ts_ms) счетчик начинается с 0 и увеличивается на 1 для каждого нового Snowflake ID, пока метка времени не изменится. В случае переполнения счетчика поле метки времени увеличивается на 1, и счетчик сбрасывается на 0.
Функция generateSnowflakeID
гарантирует, что поле счетчика в пределах метки времени увеличивается монотонно во всех вызовах функции в параллельно работающих потоках и запросах.
Сгенерированные Snowflake ID основаны на эпохе UNIX 1970-01-01. Хотя стандарт или рекомендация относительно эпохи Snowflake ID не существует, реализации в других системах могут использовать другую эпоху, например, Twitter/X (2010-11-04) или Mastodon (2015-01-01).
Синтаксис
Аргументы
expr
— Произвольное выражение, используемое для обхода устранения общих подпроцессов, если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый Snowflake ID. Необязательно.machine_id
— Идентификатор машины, используются 10 младших битов. Int64. Необязательно.
Возвращаемое значение
Значение типа UInt64.
Пример
Сначала создайте таблицу с колонкой типа UInt64, затем вставьте сгенерированный Snowflake ID в таблицу.
Результат:
Пример с несколькими Snowflake ID, сгенерированными на строку
Пример с выражением и идентификатором машины
snowflakeToDateTime
Эта функция устарела и может использоваться только при включенной настройке allow_deprecated_snowflake_conversion_functions. Функция будет удалена в будущем.
Извлекает компонент метки времени из Snowflake ID в формате DateTime.
Синтаксис
Аргументы
value
— Snowflake ID. Int64.time_zone
— Временная зона. Функция разбираетtime_string
в соответствии с временной зоной. Необязательно. String.
Возвращаемое значение
- Компонент метки времени
value
в виде значения DateTime.
Пример
Запрос:
Результат:
snowflakeToDateTime64
Эта функция устарела и может использоваться только при включенной настройке allow_deprecated_snowflake_conversion_functions. Функция будет удалена в будущем.
Извлекает компонент метки времени из Snowflake ID в формате DateTime64.
Синтаксис
Аргументы
value
— Snowflake ID. Int64.time_zone
— Временная зона. Функция разбираетtime_string
в соответствии с временной зоной. Необязательно. String.
Возвращаемое значение
- Компонент метки времени
value
в виде значения DateTime64 с масштабом = 3, т.е. точностью до миллисекунд.
Пример
Запрос:
Результат:
dateTimeToSnowflake
Эта функция устарела и может использоваться только при включенной настройке allow_deprecated_snowflake_conversion_functions. Функция будет удалена в будущем.
Преобразует значение DateTime в первый Snowflake ID в заданное время.
Синтаксис
Аргументы
value
— Дата с временем. DateTime.
Возвращаемое значение
- Входное значение преобразуется в тип Int64 как первый Snowflake ID в это время.
Пример
Запрос:
Результат:
dateTime64ToSnowflake
Эта функция устарела и может использоваться только при включенной настройке allow_deprecated_snowflake_conversion_functions. Функция будет удалена в будущем.
Преобразует 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 в это время.
Пример
Запрос:
Результат: