Перейти к основному содержимому
Перейти к основному содержимому

Функции кодирования

char

Возвращает строку длиной в количество переданных аргументов, где каждый байт соответствует значению соответствующего аргумента. Принимает несколько аргументов числовых типов. Если значение аргумента выходит за пределы диапазона типа UInt8, оно преобразуется в UInt8 с возможным округлением и переполнением.

Синтаксис

Аргументы

  • number_1, number_2, ..., number_n — Числовые аргументы, интерпретируемые как целые числа. Типы: Int, Float.

Возвращаемое значение

  • строка заданных байтов. String.

Пример

Запрос:

Результат:

Вы можете создать строку произвольного кодирования, передав соответствующие байты. Вот пример для UTF-8:

Запрос:

Результат:

Запрос:

Результат:

hex

Возвращает строку, содержащую шестнадцатеричное представление аргумента.

Алиас: HEX.

Синтаксис

Функция использует заглавные буквы A-F и не использует никаких префиксов (например, 0x) или суффиксов (например, h).

Для целочисленных аргументов она выводит шестнадцатеричные цифры ("нibbles") от наиболее значимого к наименее значимому (в порядке большого порядка или "читаемом человеком"). Она начинает с наиболее значимого ненулевого байта (предваряющие нулевые байты опускаются), но всегда выводит оба десятичных разряда каждого байта, даже если ведущий разряд равен нулю.

Значения типа Date и DateTime форматируются как соответствующие целые числа (количество дней с момента эпохи для Date и значение Unix Timestamp для DateTime).

Для String и FixedString все байты просто кодируются как две шестнадцатеричные цифры. Нулевые байты не опускаются.

Значения типов Float и Decimal кодируются как их представление в памяти. Поскольку мы поддерживаем архитектуру с порядком байтов little-endian, они кодируются в little-endian. Нулевые предваряющие/окончательные байты не опускаются.

Значения типа UUID кодируются как строка в порядке большого порядка.

Аргументы

  • arg — Значение, которое нужно преобразовать в шестнадцатеричный формат. Типы: String, UInt, Float, Decimal, Date или DateTime.

Возвращаемое значение

  • Строка с шестнадцатеричным представлением аргумента. String.

Примеры

Запрос:

Результат:

Запрос:

Результат:

Запрос:

Результат:

Запрос:

Результат:

unhex

Выполняет обратную операцию по сравнению с hex. Он интерпретирует каждую пару шестнадцатеричных цифр (в аргументе) как число и преобразует его в байт, представляемый этим числом. Возвращаемое значение — двоичная строка (BLOB).

Если вы хотите преобразовать результат в число, вы можете использовать функции reverse и reinterpretAs<Type>.

примечание

Если функция unhex вызывается из clickhouse-client, двоичные строки отображаются с использованием UTF-8.

Алиас: UNHEX.

Синтаксис

Аргументы

  • arg — Строка, содержащая любое количество шестнадцатеричных цифр. String, FixedString.

Поддерживает как заглавные, так и строчные буквы A-F. Количество шестнадцатеричных цифр не обязательно должно быть четным. Если оно нечетное, последняя цифра интерпретируется как наименее значимая половина байта 00-0F. Если строка аргумента содержит что-либо, кроме шестнадцатеричных цифр, возвращается результат, определяемый реализацией (исключение не выбрасывается). Для числового аргумента обратное преобразование hex(N) не выполняется функцией unhex().

Возвращаемое значение

  • Двоичная строка (BLOB). String.

Пример

Запрос:

Результат:

Запрос:

Результат:

bin

Возвращает строку, содержащую двоичное представление аргумента.

Синтаксис

Алиас: BIN.

Для целочисленных аргументов она выводит двоичные цифры от наиболее значимого к наименее значимому (в порядке большого порядка или "читабельном человеком"). Она начинает с наиболее значимого ненулевого байта (предваряющие нулевые байты опускаются), но всегда выводит восемь цифр для каждого байта, даже если ведущий разряд равен нулю.

Значения типа Date и DateTime форматируются как соответствующие целые числа (количество дней с момента эпохи для Date и значение Unix Timestamp для DateTime).

Для String и FixedString все байты просто кодируются как восемь двоичных чисел. Нулевые байты не опускаются.

Значения типов Float и Decimal кодируются как их представление в памяти. Поскольку мы поддерживаем архитектуру с порядком байтов little-endian, они кодируются в little-endian. Нулевые предваряющие/окончательные байты не опускаются.

Значения типа UUID кодируются как строка в порядке большого порядка.

Аргументы

Возвращаемое значение

  • Строка с двоичным представлением аргумента. String.

Примеры

Запрос:

Результат:

Запрос:

Результат:

Запрос:

Результат:

Запрос:

Результат:

unbin

Интерпретирует каждую пару двоичных цифр (в аргументе) как число и преобразует его в байт, представляемый этим числом. Функция выполняет противоположную операцию к bin.

Синтаксис

Алиас: UNBIN.

Для числового аргумента unbin() не возвращает обратное значение bin(). Если вы хотите преобразовать результат в число, вы можете использовать функции reverse и reinterpretAs<Type>.

примечание

Если функция unbin вызывается из clickhouse-client, двоичные строки отображаются с использованием UTF-8.

Поддерживает двоичные цифры 0 и 1. Количество двоичных цифр не обязательно должно быть кратным восьми. Если строка аргумента содержит что-либо, кроме двоичных цифр, возвращается результат, определяемый реализацией (исключение не выбрасывается).

Аргументы

  • arg — Строка, содержащая любое количество двоичных цифр. String.

Возвращаемое значение

  • Двоичная строка (BLOB). String.

Примеры

Запрос:

Результат:

Запрос:

Результат:

bitmaskToList(num)

Принимает целое число. Возвращает строку, содержащую список степеней двойки, которые в сумме дают исходное число. Они разделены запятыми без пробелов в текстовом формате, в порядке возрастания.

bitmaskToArray(num)

Принимает целое число. Возвращает массив чисел UInt64, содержащий список степеней двойки, которые в сумме дают исходное число. Числа в массиве расположены в порядке возрастания.

bitPositionsToArray(num)

Принимает целое число и преобразует его в беззнаковое целое. Возвращает массив чисел UInt64, содержащий список позиций битов аргумента, которые равны 1, в порядке возрастания.

Синтаксис

Аргументы

  • arg — Целочисленное значение. Int/UInt.

Возвращаемое значение

  • Массив, содержащий список позиций битов, которые равны 1, в порядке возрастания. Array(UInt64).

Пример

Запрос:

Результат:

Запрос:

Результат:

mortonEncode

Вычисляет код Мортон (ZCurve) для списка беззнаковых целых чисел.

Функция имеет два режима работы:

  • Простой
  • Расширенный

Простой режим

Принимает до 8 беззнаковых целых чисел в качестве аргументов и производит код UInt64.

Синтаксис

Параметры

Возвращаемое значение

Пример

Запрос:

Результат:

Расширенный режим

Принимает маску диапазона (tuple) в качестве первого аргумента и до 8 беззнаковых целых чисел в качестве других аргументов.

Каждое число в маске настраивает степень расширения диапазона:
1 - без расширения
2 - 2x расширение
3 - 3x расширение
...
До 8x расширения.

Синтаксис

Параметры

Примечание: при использовании столбцов для аргументов маска диапазона должна оставаться константой.

Возвращаемое значение

Пример

Расширение диапазона может быть полезным, когда вам нужна подобная распределенность для аргументов с сильно различающимися диапазонами (или кардинальностями) Например: 'IP Address' (0...FFFFFFFF) и 'Country code' (0...FF).

Запрос:

Результат:

Примечание: размер кортежа должен соответствовать количеству других аргументов.

Пример

Код Мортон для одного аргумента всегда сам по себе:

Запрос:

Результат:

Пример

Также возможно расширить один аргумент:

Запрос:

Результат:

Пример

Вы также можете использовать имена столбцов в функции.

Запрос:

Сначала создайте таблицу и вставьте данные.

Используйте имена столбцов вместо констант в качестве аргументов для mortonEncode

Запрос:

Результат:

детали реализации

Пожалуйста, обратите внимание, что вы можете уместить лишь ограниченное количество битов информации в коде Мортон, так как UInt64 имеет. Два аргумента будут иметь диапазон максимум 2^32 (64/2) каждый, три аргумента — диапазон максимум 2^21 (64/3) каждый и так далее. Все переполнения будут обрезаны до нуля.

mortonDecode

Декодирует код Мортон (ZCurve) в соответствующий кортеж беззнаковых целых чисел.

Как и функция mortonEncode, эта функция имеет два режима работы:

  • Простой
  • Расширенный

Простой режим

Принимает размер результирующего кортежа в качестве первого аргумента и код в качестве второго аргумента.

Синтаксис

Параметры

  • tuple_size: целочисленное значение не более 8.
  • code: UInt64 код.

Возвращаемое значение

Пример

Запрос:

Результат:

Расширенный режим

Принимает маску диапазона (tuple) в качестве первого аргумента и код в качестве второго аргумента. Каждое число в маске настраивает степень уменьшения диапазона:
1 - без уменьшения
2 - 2x уменьшение
3 - 3x уменьшение
...
До 8x уменьшения.

Расширение диапазона может быть полезным, когда вам нужна похожая распределенность для аргументов с сильно различающимися диапазонами (или кардинальностями) Например: 'IP Address' (0...FFFFFFFF) и 'Country code' (0...FF). Как и в функции кодирования, это ограничено максимум 8 числами.

Пример

Код Мортон для одного аргумента всегда равен самому аргументу:

Запрос:

Результат:

Пример

Также возможно уменьшить один аргумент:

Запрос:

Результат:

Пример

Функция также принимает столбец кодов в качестве второго аргумента:

Сначала создайте таблицу и вставьте данные.

Запрос:

Используйте имена столбцов вместо констант в качестве аргументов для mortonDecode

Запрос:

Результат:

hilbertEncode

Вычисляет код для кривой Хилберта для списка беззнаковых целых чисел.

Функция имеет два режима работы:

  • Простой
  • Расширенный

Простой режим

Простой: принимает до 2 беззнаковых целых чисел в качестве аргументов и производит код UInt64.

Синтаксис

Параметры

Возвращаемое значение

  • Код UInt64

Тип: UInt64

Пример

Запрос:

Результат:

Расширенный режим

Принимает маску диапазона (tuple) в качестве первого аргумента и до 2 беззнаковых целых чисел в качестве других аргументов.

Каждое число в маске настраивает количество бит, на которые соответствующий аргумент будет сдвинут влево, фактически масштабируя аргумент в пределах его диапазона.

Синтаксис

Параметры

Примечание: при использовании столбцов для аргументов маска диапазона должна оставаться константой.

Возвращаемое значение

  • Код UInt64

Тип: UInt64

Пример

Расширение диапазона может быть полезным, когда вам нужна похожая распределенность для аргументов с сильно различающимися диапазонами (или кардинальностями) Например: 'IP Address' (0...FFFFFFFF) и 'Country code' (0...FF).

Запрос:

Результат:

Примечание: размер кортежа должен соответствовать количеству других аргументов.

Пример

Для одного аргумента без кортежа функция возвращает сам аргумент в качестве индекса Хилберта, так как не нужно масштабирование по размерностям.

Запрос:

Результат:

Пример

Если один аргумент передан с кортежем, указывающим сдвиги битов, функция сдвигает аргумент влево на заданное количество битов.

Запрос:

Результат:

Пример

Функция также принимает столбцы в качестве аргументов:

Запрос:

Сначала создайте таблицу и вставьте данные.

Используйте имена столбцов вместо констант в качестве аргументов для hilbertEncode

Запрос:

Результат:

детали реализации

Пожалуйста, обратите внимание, что вы можете уместить лишь ограниченное количество битов информации в код Хилберта, как это имеет UInt64. Два аргумента будут иметь диапазон максимум 2^32 (64/2) каждый. Все переполнения будут обрезаны до нуля.

hilbertDecode

Декодирует индекс кривой Хилберта обратно в кортеж беззнаковых целых чисел, представляющих координаты в многомерном пространстве.

Как и функция hilbertEncode, эта функция имеет два режима работы:

  • Простой
  • Расширенный

Простой режим

Принимает до 2 беззнаковых целых чисел в качестве аргументов и производит код UInt64.

Синтаксис

Параметры

  • tuple_size: целочисленное значение не более 2.
  • code: UInt64 код.

Возвращаемое значение

  • tuple указанного размера.

Тип: UInt64

Пример

Запрос:

Результат:

Расширенный режим

Принимает маску диапазона (tuple) в качестве первого аргумента и до 2 беззнаковых целых чисел в качестве других аргументов. Каждое число в маске настраивает количество бит, на которые соответствующий аргумент будет сдвинут влево, фактически масштабируя аргумент в пределах его диапазона.

Расширение диапазона может быть полезным, когда вам нужна похожая распределенность для аргументов с сильно различающимися диапазонами (или кардинальностями) Например: 'IP Address' (0...FFFFFFFF) и 'Country code' (0...FF). Как и в функции кодирования, это ограничено максимум 8 числами.

Пример

Код Хилберта для одного аргумента всегда сам аргуемент (как кортеж).

Запрос:

Результат:

Пример

Один аргумент с кортежем, указывающим сдвиги битов, будет сдвинут вправо соответственно.

Запрос:

Результат:

Пример

Функция принимает также столбец кодов в качестве второго аргумента:

Сначала создайте таблицу и вставьте данные.

Запрос:

Используйте имена столбцов вместо констант в качестве аргументов для hilbertDecode

Запрос:

Результат: