Поделиться через


функция генератора с табличным значением 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 только как корень выражения или после LATERAL VIEW. При размещении генерирующей функции в списке 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