Функции работы с 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 в это время.
Пример
Запрос:
Результат: