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