Утилиты
Утилиты — это функции для работы с данными различных типов, которые сложно отнести к конкретной категории. Их описания собраны в этом разделе.
hash()
Описание |
Возвращает хеш данных из |
Использование |
|
Посмотреть пример
SELECT
hash('Tengri') AS hash;
+----------------------+
| hash |
+----------------------+
| 15418814193266442000 |
+----------------------+
unnest()
Описание |
Разворачивает списки или структуры из |
Использование |
|
Применение функции к списку дает одну строку на каждый элемент списка. Обычные скалярные выражения в том же выражении SELECT
повторяются для каждой выводимой строки.
Когда несколько списков разворачиваются в одном выражении SELECT
, они разворачиваются каждый в отдельный столбец. Если один список длиннее другого, более короткий список заполняется значениями NULL
.
Функция изменяет кардинальность данных. |
Параметры
-
recursive := true
Включает рекурсивный режим. Если этот режим включен (значениеtrue
), то функция полностью разворачивает списки, а затем полностью разворачивает вложенные структуры. Это может быть полезно для полного "уплощения" столбцов, которые содержат списки внутри списков или структуры внутри списков. Обратите внимание, что списки внутри структур не разворачиваются.Подробнее о параметре на примерах
Покажем работу этого параметра на двух примерах с одними и теми же данными с включенным параметром и без него:
SELECT unnest([[1, 2, 3], [4, 5]], recursive := true) AS result;
+--------+ | result | +--------+ | 1 | +--------+ | 2 | +--------+ | 3 | +--------+ | 4 | +--------+ | 5 | +--------+
SELECT unnest([[1, 2, 3], [4, 5]]) AS result;
+---------+ | result | +---------+ | {1,2,3} | +---------+ | {4,5} | +---------+
-
max_depth := <num>
Параметрmax_depth
позволяет ограничить максимальную глубину рекурсивного развертывания. Рекурсивный режим автоматически включен, если указана максимальная глубина.Подробнее о параметре на примерах
Покажем работу этого параметра на трех примерах с одними и теми же данными: с глубиной развертывания по умолчанию (
1
), с глубиной развертывания2
и с глубиной развертывания3
:SELECT unnest([[['T', 'e'], ['n', 'g']], [['r', 'i'], []], [['!', '!', '!']]]) AS result;
+-------------------------+ | result | +-------------------------+ | {['T', 'e'],['n', 'g']} | +-------------------------+ | {['r', 'i'],[]} | +-------------------------+ | {['!', '!', '!']} | +-------------------------+
SELECT unnest([[['T', 'e'], ['n', 'g']], [['r', 'i'], []], [['!', '!', '!']]], max_depth := 2) AS result;
+---------+ | result | +---------+ | {T,e} | +---------+ | {n,g} | +---------+ | {r,i} | +---------+ | {} | +---------+ | {!,!,!} | +---------+
SELECT unnest([[['T', 'e'], ['n', 'g']], [['r', 'i'], []], [['!', '!', '!']]], max_depth := 3) AS result;
+--------+ | result | +--------+ | T | +--------+ | e | +--------+ | n | +--------+ | g | +--------+ | r | +--------+ | i | +--------+ | ! | +--------+ | ! | +--------+ | ! | +--------+
Посмотреть еще примеры
SELECT
unnest([1,2,3]) AS numbers,
unnest(['a','b','c']) AS letters;
+---------+---------+
| numbers | letters |
+---------+---------+
| 1 | a |
+---------+---------+
| 2 | b |
+---------+---------+
| 3 | c |
+---------+---------+
SELECT
unnest([1,2,3]) AS numbers,
unnest(['a','b']) AS letters;
+---------+---------+
| numbers | letters |
+---------+---------+
| 1 | a |
+---------+---------+
| 2 | b |
+---------+---------+
| 3 | null |
+---------+---------+
SELECT
unnest([{'column_a': 1, 'column_b': 84},
{'column_a': 100, 'column_b': NULL, 'column_c':22}],
recursive := true);
+----------+----------+----------+
| column_a | column_b | column_c |
+----------+----------+----------+
| 1 | 84 | null |
+----------+----------+----------+
| 100 | null | 22 |
+----------+----------+----------+
SELECT
unnest([{'column_a': 1, 'column_b': 84},
{'column_a': 100, 'column_b': NULL, 'column_c':22}])
AS result;
+-----------------------------------------------------+
| result |
+-----------------------------------------------------+
| {"column_a": 1, "column_b": 84, "column_c": null} |
+-----------------------------------------------------+
| {"column_a": 100, "column_b": null, "column_c": 22} |
+-----------------------------------------------------+