Утилиты

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

coalesce()

Описание

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

Использование

coalesce(argument1[, argument2, ...])

Если в единственном аргументе значение NULL, то возвращается NULL.

Посмотреть пример
SELECT
    coalesce(NULL, 'Tengri', NULL) AS result_1,
    coalesce(NULL, '', NULL) AS result_2,
    coalesce('Tengri') AS result_3,
    coalesce(NULL) AS result_4;
+----------+----------+----------+----------+
| result_1 | result_2 | result_3 | result_4 |
+----------+----------+----------+----------+
| Tengri   |          | Tengri   | null     |
+----------+----------+----------+----------+

generate_series()

Описание

Создает список значений в диапазоне между start и stop.

Использование

generate_series([start,] stop[, step])

Параметры start и stop обрабатываются как "включительные".
Значение по умолчанию для start — 0, для step — 1.

Посмотреть пример
SELECT
    generate_series(10) AS stop,
    generate_series(5, 10) AS start_stop,
    generate_series(5, 10, 2) AS start_stop_step;
+--------------------------+----------------+-----------------+
| stop                     | start_stop     | start_stop_step |
+--------------------------+----------------+-----------------+
| {0,1,2,3,4,5,6,7,8,9,10} | {5,6,7,8,9,10} | {5,7,9}         |
+--------------------------+----------------+-----------------+

hash()

Описание

Возвращает хеш данных из argument в виде числа.

Использование

hash(argument)

Посмотреть пример
SELECT
    hash('Tengri') AS hash;
+----------------------+
|         hash         |
+----------------------+
| 15418814193266442000 |
+----------------------+

unnest()

Описание

Разворачивает списки или структуры из argument в множество отдельных значений.

Использование

unnest(argument) [, recursive := true] [, max_depth := <num>]

Применение функции к списку дает одну строку на каждый элемент списка. Обычные скалярные выражения в том же выражении 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} |
+-----------------------------------------------------+