BSI
- Тип индекса может быть одним из
UInt8,UInt16илиUInt32. Примечание: с учетом производительности 64-битной реализации Roaring Bitmap формат BSI не поддерживаетUInt64/Int64. - Тип значения может быть одним из
Int8,Int16,Int32,Int64,UInt8,UInt16,UInt32,UInt64,Float32илиFloat64. Примечание: тип значения не расширяется автоматически. Например, если использоватьUInt8в качестве типа значения, любая сумма, превышающая диапазонUInt8, приведет к переполнению, а не к переходу к более широкому типу; аналогично, операции над целыми числами будут давать целочисленные результаты (например, деление не будет автоматически преобразовано в число с плавающей точкой). Поэтому важно заранее продумать и выбрать тип значения. На практике часто используются типы с плавающей точкой (Float32/Float64). - Операции можно выполнять только над двумя векторами с одинаковыми типами индекса и значения.
- Нижележащее хранилище использует Bit-Sliced Index, при этом индексы хранятся в битмапах. В качестве конкретной реализации битмапа используется Roaring Bitmap. Рекомендуется по возможности концентрировать индексы в нескольких контейнерах Roaring Bitmap, чтобы максимально повысить степень сжатия и производительность запросов.
- Механизм Bit-Sliced Index преобразует значение в двоичный вид. Для типов с плавающей точкой преобразование использует представление с фиксированной точкой, что может приводить к потере точности. Точность можно настроить, задав число битов, используемых для дробной части; по умолчанию это 24 бита, чего достаточно для большинства сценариев. При создании NumericIndexedVector можно настроить число битов для целой и дробной частей с помощью агрегатной функции groupNumericIndexedVector с
-State. - Для индексов возможны три состояния: ненулевое значение, нулевое значение и отсутствие. В NumericIndexedVector сохраняются только ненулевые и нулевые значения. Кроме того, в покомпонентных операциях между двумя NumericIndexedVectors значение отсутствующего индекса считается равным 0. В случае деления результат равен нулю, если делитель равен нулю.
Создание объекта numericIndexedVector
groupNumericIndexedVector с -State.
Можно добавить суффикс -if, чтобы задать дополнительное условие.
Агрегатная функция будет обрабатывать только те строки, которые удовлетворяют этому условию.
Второй способ — построить её из Map с помощью numericIndexedVectorBuild.
Функция groupNumericIndexedVectorState позволяет настраивать количество битов целой и дробной части с помощью параметров, тогда как numericIndexedVectorBuild такой возможности не предоставляет.
groupNumericIndexedVector
Float64. Если добавить суффикс State, функция вернёт объект NumericIndexedVector.
Синтаксис
type: String, необязательно. Задаёт формат хранения. В настоящее время поддерживается только'BSI'.integer_bit_num:UInt32, необязательно. Используется только для формата хранения'BSI'; этот параметр задаёт количество битов, используемых для целой части. Если тип индекса целочисленный, значение по умолчанию соответствует числу битов, используемых для хранения индекса. Например, если тип индекса — UInt16, то значениеinteger_bit_numпо умолчанию равно 16. Для типов индекса Float32 и Float64 значение integer_bit_num по умолчанию равно 40, поэтому целая часть представимых данных находится в диапазоне[-2^39, 2^39 - 1]. Допустимый диапазон —[0, 64].fraction_bit_num:UInt32, необязательно. Используется только для формата хранения'BSI'; этот параметр задаёт количество битов, используемых для дробной части. Если тип значения целочисленный, значение по умолчанию равно 0; если тип значения — Float32 или Float64, значение по умолчанию равно 24. Допустимый диапазон —[0, 24].- Также есть ограничение: допустимый диапазон для integer_bit_num + fraction_bit_num —
[0, 64]. col1: Индексный столбец. Поддерживаемые типы:UInt8/UInt16/UInt32/Int8/Int16/Int32.col2: Столбец значений. Поддерживаемые типы:Int8/Int16/Int32/Int64/UInt8/UInt16/UInt32/UInt64/Float32/Float64.
Float64, представляющее сумму всех значений.
Пример
Тестовые данные:
Документация ниже сгенерирована из системной таблицы
system.functions.numericIndexedVectorAllValueSum
numericIndexedVector.
Синтаксис
Float64
Примеры
Пример использования
Query
Response
numericIndexedVectorBuild
map— сопоставление индексов со значениями.Map
AggregateFunction
Примеры
Пример использования
Query
Response
numericIndexedVectorCardinality
numericIndexedVector.
Синтаксис
UInt64
Примеры
Пример использования
Query
Response
numericIndexedVectorGetValue
v—numericIndexedVectori— Индекс, по которому нужно получить значение.(U)Int*
(U)Int* или Float*
Примеры
Пример использования
Query
Response
numericIndexedVectorPointwiseAdd
v1—numericIndexedVectorv2— Числовая константа или объектnumericIndexedVector.(U)Int*,Float*илиnumericIndexedVector
numericIndexedVector.
Примеры
Пример использования
Query
Response
numericIndexedVectorPointwiseDivide
v1—numericIndexedVectorv2— Числовая константа или объектnumericIndexedVector.(U)Int*,Float*илиnumericIndexedVector
numericIndexedVector
Примеры
Пример использования
Query
Response
numericIndexedVectorPointwiseEqual
v1—numericIndexedVectorv2— Числовая константа или объектnumericIndexedVector.(U)Int*,Float*илиnumericIndexedVector
numericIndexedVector
Примеры
Query
Response
numericIndexedVectorPointwiseGreater
v1—numericIndexedVectorv2— числовая константа или объектnumericIndexedVector.(U)Int*илиFloat*илиnumericIndexedVector
numericIndexedVector.
Примеры
Пример использования
Query
Response
numericIndexedVectorPointwiseGreaterEqual
v1—numericIndexedVectorv2— Числовая константа или объектnumericIndexedVector.(U)Int*,Float*илиnumericIndexedVector
numericIndexedVector.
Примеры
Пример использования
Query
Response
numericIndexedVectorPointwiseLess
numericIndexedVector и другим numericIndexedVector либо числовой константой.
В результате получается numericIndexedVector, содержащий индексы, в которых значение первого вектора меньше значения второго, при этом все соответствующие значения устанавливаются в 1.
Синтаксис
v1—numericIndexedVectorv2— Числовая константа или объектnumericIndexedVector.(U)Int*,Float*илиnumericIndexedVector
numericIndexedVector.
Примеры
Пример использования
Query
Response
numericIndexedVectorPointwiseLessEqual
v1—numericIndexedVectorv2— числовая константа или объектnumericIndexedVectorтипа(U)Int*илиFloat*
numericIndexedVector
Примеры
Пример использования
Query
Response
numericIndexedVectorPointwiseMultiply
numericIndexedVector либо на другой numericIndexedVector, либо на числовую константу.
Синтаксис
v1—numericIndexedVectorv2— Числовая константа или объектnumericIndexedVector.(U)Int*илиFloat*илиnumericIndexedVector
numericIndexedVector. numericIndexedVector
Примеры
Query
Response
numericIndexedVectorPointwiseNotEqual
v1—numericIndexedVectorv2— Числовая константа или объектnumericIndexedVector.(U)Int*,Float*илиnumericIndexedVector
numericIndexedVector. numericIndexedVector
Примеры
Пример использования
Query
Response
numericIndexedVectorPointwiseSubtract
numericIndexedVector и другим numericIndexedVector либо числовой константой.
Синтаксис
v1—numericIndexedVectorv2— Числовая константа или объектnumericIndexedVector.(U)Int*илиFloat*илиnumericIndexedVector
numericIndexedVector.
Примеры
Пример использования
Query
Response
numericIndexedVectorShortDebugString
numericIndexedVector в формате JSON.
Эта функция в основном используется для отладки.
Синтаксис
String
Примеры
Пример использования
Query
Response
numericIndexedVectorToMap
Map
Примеры
Пример использования
Query
Response