Функции для работы с кортежами
tuple
Функция, позволяющая сгруппировать несколько столбцов. Для столбцов, имеющих типы T1, T2, ... возвращает кортеж типа Tuple(T1, T2, ...), содержащий эти столбцы. Выполнение функции ничего не стоит. Кортежи обычно используются как промежуточное значение в качестве аргумента операторов IN, или для создания списка формальных параметров лямбда-функций. Кортежи не могут быть записаны в таблицу.
С помощью функции реализуется оператор (x, y, ...)
.
Синтаксис
tuple(x, y, ...)
tupleElement
Функция, позволяющая достать столбец из кортежа. N - индекс столбца начиная с 1. N долж но быть константой. N должно быть целым строго положительным числом не большим размера кортежа. Выполнение функции ничего не стоит.
С помощью функции реализуется оператор x.N
.
Синтаксис
tupleElement(tuple, n)
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') │
└─────┴────┴────┴────┴───────────┘
Смотрите также
tupleHammingDistance
Возвращает расстояние Хэмминга между двумя кортежами одинакового размера.
Синтаксис
tupleHammingDistance(tuple1, tuple2)
Аргументы
Кортежи должны иметь одинаковый размер и тип элементов.
Возвращаемое значение
- Расстояние Хэмминга.
Тип: UInt8.
Примеры
Запрос:
SELECT tupleHammingDistance((1, 2, 3), (3, 2, 1)) AS HammingDistance;
Результат:
┌─HammingDistance─┐
│ 2 │
└─────────────────┘
Может быть использовано с функциями MinHash для проверки строк на совпадение:
SELECT tupleHammingDistance(wordShingleMinHash(string), wordShingleMinHashCaseInsensitive(string)) as HammingDistance FROM (SELECT 'Clickhouse is a column-oriented database management system for online analytical processing of queries.' AS string);
Результат:
┌─HammingDistance─┐
│ 2 │
└─────────────────┘
tupleToNameValuePairs
Приводит именованный кортеж к списку пар (имя, значение). Для Tuple(a T, b T, ..., c T)
возвращает Array(Tuple(String, T), ...)
, где Strings
— это названия именованных полей, а T
— это соответствующие значения. Все значения в кортеже должны быть одинакового типа.
Синтаксис
tupleToNameValuePairs(tuple)
Аргументы
tuple
— именованный кортеж. Tuple с любым типом значений.
Возвращаемое значение
- Список пар (имя, значение).
Тип: Array(Tuple(String, ...)).
Пример
Запрос:
CREATE TABLE tupletest (`col` Tuple(user_ID UInt64, session_ID UInt64) ENGINE = Memory;
INSERT INTO tupletest VALUES (tuple( 100, 2502)), (tuple(1,100));
SELECT tupleToNameValuePairs(col) FROM tupletest;
Результат:
┌─tupleToNameValuePairs(col)────────────┐
│ [('user_ID',100),('session_ID',2502)] │
│ [('user_ID',1),('session_ID',100)] │
└───────────────────────────────────────┘
С помощью этой функции можно выводить столбцы в виде строк:
CREATE TABLE tupletest (`col` Tuple(CPU Float64, Memory Float64, Disk Float64)) ENGINE = Memory;
INSERT INTO tupletest VALUES(tuple(3.3, 5.5, 6.6));
SELECT arrayJoin(tupleToNameValuePairs(col))FROM tupletest;
Результат:
┌─arrayJoin(tupleToNameValuePairs(col))─┐
│ ('CPU',3.3) │
│ ('Memory',5.5) │
│ ('Disk',6.6) │
└─────────────────────────────────────── ┘
Если в функцию передается обычный кортеж, ClickHouse использует индексы значений в качестве имен:
SELECT tupleToNameValuePairs(tuple(3, 2, 1));
Результат:
┌─tupleToNameValuePairs(tuple(3, 2, 1))─┐
│ [('1',3),('2',2),('3',1)] │
└───────────────────────────────────────┘
tuplePlus
Вычисляет сумму соответствующих значений двух кортежей одинакового размера.
Синтаксис
tuplePlus(tuple1, tuple2)
Синоним: vectorSum
.
Аргументы
Возвращаемое значение