dotProduct
Добавленный в: v21.11.0
Вычисляет скалярное произведение двух векторов (кортежей или массивов одинакового размера). Возвращает сумму произведений соответствующих элементов.
Синтаксис
dotProduct(vector1, vector2)Псевдонимы: scalarProduct
Аргументы
vector1— Первый вектор.Array(T)илиTuple(T)vector2— Второй вектор. Должен быть того же размера, что и первый.Array(T)илиTuple(T)
Возвращаемое значение
Возвращает скалярное произведение двух векторов. Для двух массивов BFloat16 накопление выполняется в Float32, и результат также возвращается как Float32. (U)Int* или Float* или Decimal
Примеры
Базовое использование
SELECT dotProduct((1, 2), (3, 4))11flattenTuple
Добавленный в: v22.6.0
Преобразует именованный вложенный кортеж в плоский. Элементами возвращаемого кортежа являются пути входного кортежа.
Синтаксис
flattenTuple(input)Аргументы
input— Именованный вложенный кортеж, который нужно развернуть.Tuple(n1 T1[, n2 T2, ... ])
Возвращаемое значение
Возвращает выходной кортеж, элементы которого представляют собой пути из исходного входного значения. Tuple(T)
Примеры
Пример использования
CREATE TABLE tab(t Tuple(a UInt32, b Tuple(c String, d UInt32))) ENGINE = MergeTree ORDER BY tuple();
INSERT INTO tab VALUES ((3, ('c', 4)));
SELECT flattenTuple(t) FROM tab;┌─flattenTuple(t)─┐
│ (3,'c',4) │
└─────────────────┘tuple
Добавленный в: v1.1.0
Возвращает кортеж, объединяя входные аргументы.
Для столбцов C1, C2, … с типами T1, T2, … возвращается кортеж именованного типа Tuple(C1 T1, C2 T2, …), содержащий эти столбцы, если их имена уникальны и могут использоваться как идентификаторы без кавычек; в противном случае возвращается Tuple(T1, T2, …). Выполнение этой функции не требует дополнительных затрат. Tuple обычно используются как промежуточные значения для аргументов операторов IN или для создания списка формальных параметров лямбда-функций. Tuple нельзя записывать в таблицу.
Функция реализует оператор (x, y, ...).
Синтаксис
tuple([t1[, t2[ ...]])Аргументы
- Отсутствуют.
Возвращаемое значение
Примеры
обычный
SELECT tuple(1, 2)(1,2)tupleConcat
Добавленный в: v23.8.0
Объединяет Tuple, переданные в качестве аргументов.
Синтаксис
tupleConcat(tuple1[, tuple2, [...]])Аргументы
tupleN— Произвольное количество аргументов типа Tuple.Tuple(T)
Возвращаемое значение
Возвращает Tuple, содержащий все элементы входных Tuple. Tuple(T)
Примеры
Пример использования
SELECT tupleConcat((1, 2), ('a',), (true, false))(1,2,'a',true,false)tupleDivide
Добавленный в: v21.11.0
Вычисляет поэлементное деление двух или более Tuple одинакового размера слева направо.
Синтаксис
tupleDivide(t1, t2[, tN, ...])Аргументы
t1— Первый входной кортеж.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)t2, ..., tN— Один или несколько дополнительных входных Tuple. Все Tuple должны иметь одинаковую длину.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)
Возвращаемое значение
Возвращает кортеж, содержащий результаты поэлементного деления. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
Два Tuple
SELECT tupleDivide((1, 2), (2, 3))(0.5,0.6666666666666666)Три Tuple
SELECT tupleDivide((100.0, 60.0), (5.0, 3.0), (2.0, 4.0))(10,5)tupleDivideByNumber
Добавленный в: v21.11.0
Возвращает кортеж, все элементы которого разделены на число.
Синтаксис
tupleDivideByNumber(tuple, number)Аргументы
tuple— Кортеж для деления.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)number— Делитель.(U)Int*илиFloat*илиDecimal
Возвращаемое значение
Возвращает кортеж с элементами, полученными в результате деления. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
Базовое использование
SELECT tupleDivideByNumber((1, 2), 0.5)(2,4)tupleElement
Добавленный в: v1.1.0
Извлекает элемент из кортежа по индексу или имени.
Для доступа по индексу ожидается числовой индекс, начиная с 1. Для доступа по имени имя элемента можно указать в виде строки (работает только для именованных кортежей).
Поддерживаются отрицательные индексы. В этом случае выбирается соответствующий элемент с нумерацией от конца. Например, tuple.-1 — это последний элемент в кортеже.
Необязательный третий аргумент задает значение по умолчанию, которое возвращается вместо того, чтобы генерировать исключение, если запрашиваемый элемент не существует. Все аргументы должны быть константами.
Эта функция не имеет накладных расходов во время выполнения и реализует операторы x.index и x.name.
Синтаксис
tupleElement(tuple, index|name[, default_value])Аргументы
tuple— Кортеж или массив кортежей.Tuple(T)илиArray(Tuple(T))index— Индекс столбца, нумерация с 1.const UInt8/16/32/64name— Имя элемента.const Stringdefault_value— Значение по умолчанию, возвращаемое, если индекс выходит за границы или элемент отсутствует.Any
Возвращаемое значение
Возвращает элемент по указанному индексу или имени. Any
Примеры
Доступ по индексу
SELECT tupleElement((1, 'hello'), 2)helloИндексация с отрицательными индексами
SELECT tupleElement((1, 'hello'), -1)helloИменованный кортеж с таблицей
CREATE TABLE example (values Tuple(name String, age UInt32)) ENGINE = Memory;
INSERT INTO example VALUES (('Alice', 30));
SELECT tupleElement(values, 'name') FROM example;AliceСо значением по умолчанию
SELECT tupleElement((1, 2), 5, 'not_found')not_foundСинтаксис оператора
SELECT (1, 'hello').2hellotupleHammingDistance
Добавленный в: v21.1.0
Возвращает расстояние Хэмминга между двумя Tuple одинаковой длины.
Синтаксис
tupleHammingDistance(t1, t2)Аргументы
Возвращаемое значение
Возвращает расстояние Хэмминга. UInt8/16/32/64
Примеры
Пример использования
SELECT tupleHammingDistance((1, 2, 3), (3, 2, 1))2С MinHash для обнаружения почти одинаковых строк
SELECT tupleHammingDistance(wordShingleMinHash(string), wordShingleMinHashCaseInsensitive(string)) FROM (SELECT 'ClickHouse is a column-oriented database management system for online analytical processing of queries.' AS string)2tupleIntDiv
Добавленный в: v23.8.0
Выполняет поэлементное целочисленное деление двух или более Tuple одинакового размера последовательно слева направо. Возвращает Tuple частных. Если какой-либо Tuple содержит нецелочисленные элементы, результат вычисляется с округлением до ближайшего целого для каждого нецелочисленного делимого или делителя. Деление на 0 вызывает исключение.
Синтаксис
tupleIntDiv(t1, t2[, tN, ...])Аргументы
t1— Первый входной Tuple.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)t2, ..., tN— Один или несколько дополнительных входных Tuple. Все Tuple должны быть одинакового размера.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)
Возвращаемое значение
Возвращает Tuple целочисленных частных. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
Два Tuple
SELECT tupleIntDiv((15, 10, 5), (5, 5, 5))(3,2,1)С типом Decimal
SELECT tupleIntDiv((15, 10, 5), (5.5, 5.5, 5.5))(2,1,0)Три Tuple
SELECT tupleIntDiv((120, 60), (4, 3), (2, 4))(15,5)tupleIntDivByNumber
Добавленный в: v23.8.0
Выполняет целочисленное деление кортежа числителей на заданный знаменатель и возвращает кортеж частных. Если один из входных параметров содержит нецелые элементы, результат вычисляется с округлением до ближайшего целого для каждого нецелого числителя или делителя. При делении на 0 будет сгенерировано исключение.
Синтаксис
tupleIntDivByNumber(tuple_num, div)Аргументы
tuple_num— Кортеж значений делимого.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)div— Значение делителя.(U)Int*илиFloat*илиDecimal
Возвращаемое значение
Возвращает кортеж частных. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
Базовое использование
SELECT tupleIntDivByNumber((15, 10, 5), 5)(3,2,1)С десятичными числами
SELECT tupleIntDivByNumber((15.2, 10.7, 5.5), 5.8)(2,1,0)tupleIntDivOrZero
Добавленный в: v23.8.0
Как и tupleIntDiv, выполняет поэлементное целочисленное деление двух или более Tuple одинакового размера слева направо.
В случае деления на 0 для этого элемента возвращает 0 вместо того, чтобы генерировать исключение.
Если любой Tuple содержит нецелочисленные элементы, результат вычисляется путем округления каждого нецелочисленного числителя или делителя до ближайшего целого числа.
Синтаксис
tupleIntDivOrZero(t1, t2[, tN, ...])Аргументы
t1— Первый входной Tuple.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)t2, ..., tN— Один или несколько дополнительных входных Tuple. Все Tuple должны иметь одинаковый размер.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)
Возвращаемое значение
Возвращает Tuple целочисленных частных. Для любого элемента, где делитель равен 0, возвращает 0. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
С нулевыми делителями
SELECT tupleIntDivOrZero((5, 10, 15), (0, 0, 0))(0,0,0)Три Tuple
SELECT tupleIntDivOrZero((120, 60), (4, 3), (2, 4))(15,5)tupleIntDivOrZeroByNumber
Добавленный в: v23.8.0
Как и tupleIntDivByNumber, выполняет целочисленное деление кортежа числителей на заданный делитель и возвращает кортеж частных.
При делении на ноль не вызывает ошибку, а вместо этого возвращает нулевое частное.
Если кортеж или div содержат нецелочисленные элементы, результат вычисляется с округлением каждого нецелочисленного числителя или делителя до ближайшего целого.
Синтаксис
tupleIntDivOrZeroByNumber(tuple_num, div)Аргументы
tuple_num— Кортеж значений числителя.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)div— Значение делителя.(U)Int*илиFloat*илиDecimal
Возвращаемое значение
Возвращает кортеж частных; для частных, где делитель равен 0, возвращается 0. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
Базовое использование
SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 5)(3,2,1)При нулевом делителе
SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 0)(0,0,0)tupleMinus
Добавленный в: v21.11.0
Вычисляет поэлементную разность двух или более Tuple одинакового размера; операция применяется слева направо.
Синтаксис
tupleMinus(t1, t2[, tN, ...])Псевдонимы: vectorDifference
Аргументы
t1— Первый входной Tuple.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)t2, ..., tN— Один или несколько последующих входных Tuple. Все Tuple должны иметь одинаковую длину.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)
Возвращаемое значение
Возвращает Tuple с поэлементными разностями. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
Два Tuple
SELECT tupleMinus((1, 2), (2, 3))(-1,-1)Три Tuple
SELECT tupleMinus((10, 10), (3, 4), (2, 1))(5,5)tupleModulo
Добавленный в: v23.8.0
Возвращает Tuple с поэлементными остатками от деления двух или более Tuple одинакового размера; операция применяется слева направо.
Синтаксис
tupleModulo(t1, t2[, tN, ...])Аргументы
t1— Первый входной Tuple.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)t2, ..., tN— Один или несколько дополнительных входных Tuple. Все Tuple должны иметь одинаковую длину.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)
Возвращаемое значение
Возвращает Tuple с поэлементными остатками от деления. При делении на ноль генерируется исключение. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
Два Tuple
SELECT tupleModulo((15, 10, 5), (5, 3, 2))(0,1,1)Три Tuple
SELECT tupleModulo((10, 20), (7, 9), (3, 5))(0,2)tupleModuloByNumber
Добавленный в: v23.8.0
Возвращает кортеж остатков от деления элементов кортежа на заданный делитель.
Синтаксис
tupleModuloByNumber(tuple_num, div)Аргументы
tuple_num— Кортеж элементов делимого.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)div— Значение делителя.(U)Int*илиFloat*илиDecimal
Возвращаемое значение
Возвращает кортеж остатков от деления. При делении на ноль возникает ошибка. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
Базовое использование
SELECT tupleModuloByNumber((15, 10, 5), 2)(1,0,1)tupleMultiply
Добавленный в: v21.11.0
Вычисляет поэлементное произведение двух или более Tuple одного размера.
Синтаксис
tupleMultiply(t1, t2[, tN, ...])Аргументы
t1— Первый входной Tuple.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)t2, ..., tN— Один или несколько дополнительных входных Tuple. Все Tuple должны иметь одинаковую длину.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)
Возвращаемое значение
Возвращает Tuple, содержащий произведения соответствующих элементов. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
Два Tuple
SELECT tupleMultiply((1, 2), (2, 3))(2,6)Три Tuple
SELECT tupleMultiply((1, 2), (2, 3), (1, 2))(2,12)tupleMultiplyByNumber
Добавленный в: v21.11.0
Возвращает кортеж, все элементы которого умножены на число.
Синтаксис
tupleMultiplyByNumber(tuple, number)Аргументы
tuple— Кортеж для умножения.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)number— Множитель.(U)Int*илиFloat*илиDecimal
Возвращаемое значение
Возвращает кортеж с умноженными элементами. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
Базовое использование
SELECT tupleMultiplyByNumber((1, 2), -2.1)(-2.1,-4.2)tupleNames
Добавленный в: v24.8.0
Преобразует кортеж в массив имён столбцов. Для кортежа вида Tuple(a T, b T, ...) возвращает массив строк, представляющих именованные столбцы кортежа. Если элементы кортежа не имеют явных имён, в качестве имён столбцов вместо них будут использоваться их индексы.
Синтаксис
tupleNames(tuple)Аргументы
- Нет.
Возвращаемое значение
Примеры
обычный
SELECT tupleNames(tuple(1 as a, 2 as b))['1','2']tupleNegate
Добавленный в: v21.11.0
Вычисляет значения, противоположные элементам кортежа.
Синтаксис
tupleNegate(t)Аргументы
t— кортеж, к которому применяется отрицание.Tuple((U)Int*)orTuple(Float*)orTuple(Decimal)
Возвращаемое значение
Возвращает кортеж с результатом отрицания. Tuple((U)Int*) or Tuple(Float*) or Tuple(Decimal)
Примеры
Базовое использование
SELECT tupleNegate((1, 2))(-1,-2)tuplePlus
Добавленный в: v21.11.0
Вычисляет поэлементную сумму двух или более Tuple одинаковой длины.
Синтаксис
tuplePlus(t1, t2[, tN, ...])Псевдонимы: vectorSum
Аргументы
t1— Первый входной Tuple.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)t2, ..., tN— Один или несколько дополнительных входных Tuple. Все Tuple должны быть одинакового размера.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)
Возвращаемое значение
Возвращает Tuple с поэлементными суммами. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
Два Tuple
SELECT tuplePlus((1, 2), (2, 3))(3,5)Три Tuple
SELECT tuplePlus((1, 2), (2, 3), (3, 4))(6,9)tuplePositiveModuloByNumber
Добавленный в: v26.4.0
Возвращает кортеж положительных остатков от деления элементов кортежа на заданный делитель. В отличие от tupleModuloByNumber, результат всегда неотрицательный.
Синтаксис
tuplePositiveModuloByNumber(tuple_num, div)Аргументы
tuple_num— Tuple значений числителя.Tuple((U)Int*)илиTuple(Float*)илиTuple(Decimal)div— Значение делителя.(U)Int*илиFloat*илиDecimal
Возвращаемое значение
Возвращает Tuple неотрицательных остатков. Tuple((U)Int*) или Tuple(Float*) или Tuple(Decimal)
Примеры
Базовое использование
SELECT tuplePositiveModuloByNumber((15, 10, 5), 2)(1,0,1)tupleToNameValuePairs
Добавленный в: v21.9.0
Преобразует кортеж в массив пар (имя, значение).
Например, кортеж Tuple(n1 T1, n2 T2, ...) преобразуется в Array(Tuple('n1', T1), Tuple('n2', T2), ...).
Все значения в кортеже должны быть одного типа.
Синтаксис
tupleToNameValuePairs(tuple)Аргументы
tuple— Именованный кортеж со значениями любых типов.Tuple(n1 T1[, n2 T2, ...])
Возвращаемое значение
Возвращает массив из пар (name, value). Array(Tuple(String, T))
Примеры
Именованный кортеж
SELECT tupleToNameValuePairs(tuple(1593 AS user_ID, 2502 AS session_ID))[('1',1593),('2',2502)]Безымянный кортеж
SELECT tupleToNameValuePairs(tuple(3, 2, 1))[('1',3),('2',2),('3',1)]untuple
Выполняет синтаксическую подстановку элементов кортежа в месте вызова.
Имена результирующих столбцов зависят от реализации и могут меняться. Не следует полагаться на конкретные имена столбцов после untuple.
Синтаксис
untuple(x)Вы можете использовать выражение EXCEPT, чтобы исключить столбцы из результата запроса.
Аргументы
x— функцияtuple, столбец или кортеж элементов. Tuple.
Возвращаемое значение
- Отсутствует.
Примеры
Входная таблица:
┌─key─┬─v1─┬─v2─┬─v3─┬─v4─┬─v5─┬─v6────────┐
│ 1 │ 10 │ 20 │ 40 │ 30 │ 15 │ (33,'ab') │
│ 2 │ 25 │ 65 │ 70 │ 40 │ 6 │ (44,'cd') │
│ 3 │ 57 │ 30 │ 20 │ 10 │ 5 │ (55,'ef') │
│ 4 │ 55 │ 12 │ 7 │ 80 │ 90 │ (66,'gh') │
│ 5 │ 30 │ 50 │ 70 │ 25 │ 55 │ (77,'kl') │
└─────┴────┴────┴────┴────┴────┴───────────┘Пример использования столбца типа Tuple в качестве параметра функции untuple:
SELECT untuple(v6) FROM kv;┌─_ut_1─┬─_ut_2─┐
│ 33 │ ab │
│ 44 │ cd │
│ 55 │ ef │
│ 66 │ gh │
│ 77 │ kl │
└───────┴───────┘Пример использования выражения EXCEPT:
SELECT untuple((* EXCEPT (v2, v3),)) FROM kv;┌─key─┬─v1─┬─v4─┬─v5─┬─v6────────┐
│ 1 │ 10 │ 30 │ 15 │ (33,'ab') │
│ 2 │ 25 │ 40 │ 6 │ (44,'cd') │
│ 3 │ 57 │ 10 │ 5 │ (55,'ef') │
│ 4 │ 55 │ 80 │ 90 │ (66,'gh') │
│ 5 │ 30 │ 25 │ 55 │ (77,'kl') │
└─────┴────┴────┴────┴───────────┘Функции расстояния
Описание всех поддерживаемых функций приведено в документации по функциям расстояния.