Функция генератора табличных значений stack

Область применения:проверка помечены да Databricks SQL проверка помечены да Databricks Runtime

Разделяет expr1, …, exprN на numRows строк.

Синтаксис

stack(numRows, expr1 [, ...] )

Аргументы

  • numRows: литерал INTEGER больше 0, указывающий количество созданных строк.
  • exprN: выражение любого типа. Тип любого exprN должен соответствовать типу expr(N+numRows).

Возвраты

Набор numRows строк, включающий max(1, (N/numRows)) столбцы, созданные этой функцией. Неполная строка заполняется с помощью NULLs.

По умолчанию создаваемые столбцы называются col0, … col(n-1).

stackэквивалентен предложениюVALUES.

  • Применимо к: Databricks Runtime 12.1 и более ранних версий:проверка помечены да

    stack можно поместить только в список в SELECT качестве корневого элемента выражения или после бокового представления. При размещении функции в списке SELECT не должно быть другой функции генератора в том же SELECT списке или UNSUPPORTED_GENERATOR. MULTI_GENERATOR вызывается.

  • Применимо к:проверка помечены да Databricks SQL проверка помечены да Databricks Runtime 12.2 LTS и выше:

    Вызов из предложения LATERAL VIEW или SELECT списка не рекомендуется. Вместо этого вызовите stack как table_reference.

Примеры

Применимо к: Databricks Runtime 12.1 и более ранних версий:проверка помечены да

> SELECT 'hello', stack(2, 1, 2, 3) AS (first, second), 'world';
 hello 1  2    world
 hello 3  NULL world

> SELECT 'hello', stack(2, 1, 2, 3) AS (first, second), stack(2, 'a', 'b') AS (third) 'world';
 Error: UNSUPPORTED_GENERATOR.MULTI_GENERATOR

-- Equivalent usage of VALUES
> SELECT 'hello', s1.*, s2.*, 'world'
    FROM VALUES(1, 2), (3, NULL) AS s1(first, second),
         VALUES('a'), ('b') AS s2(third);
 hello  1   2       a   world
 hello  3   NULL    a   world
 hello  1   2       b   world
 hello  3   NULL    b   world

Применимо к:проверка помечены да Databricks SQL проверка помечены да Databricks Runtime 12.2 LTS и выше:

> SELECT 'hello', s.*, 'world'
    FROM stack(2, 1, 2, 3) AS s(first, second);
 hello 1  2    world
 hello 3  NULL world

> SELECT 'hello', s1.*, s2.*, 'world'
    FROM stack(2, 1, 2, 3) AS s1(first, second),
         stack(2, 'a', 'b') AS s2(third);
  hello 1  2    a  world
  hello 3  NULL a  world
  hello 1  2    b  world
  hello 3  NULL b  world