Функции работы с 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
.
Возвращаемое значение
Строка.
Пример использования
Результат:
Результат:
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 бит), чтобы различать ID в пределах одной миллисекунды. Для любой заданной метки времени (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 в это время.
Пример
Запрос:
Результат: