Compartilhar via


inline_outer Função geradora com valor de tabela

Aplica-se a: marca de seleção positiva SQL do Databricks marca de seleção positiva Runtime do Databricks

Detalha uma matriz de structs em uma tabela com semântica OUTER.

Sintaxe

inline_outer(expr)

Argumentos

  • expr: uma expressão ARRAY < STRUCT >.

Um conjunto de linhas compostas pelos campos nos elementos struct da matriz expr. As colunas produzidas por inline são os nomes dos campos.

Se expr for NULL uma única linha com NULLs para cada coluna será produzida.

  • Aplica-se a: verificação marcada como sim Databricks Runtime 12.1 e anterior:

    inline_outer só pode ser colocado na lista SELECT como a raiz de uma expressão ou seguindo uma EXIBIÇÃO LATERAL. Ao colocar a função na lista SELECT, não deve haver nenhuma outra função de gerador na mesma lista SELECT ou um UNSUPPORTED_GENERATOR. MULTI_GENERATOR será gerado.

  • Aplica-se a: verificação marcada como sim SQL do Databricks verificação marcada como sim Databricks Runtime 12.2 LTS e versões posteriores:

    A invocação a partir da cláusula EXIBIÇÃO LATERAL ou da lista SELECT foi preterida. Em vez disso, invoque inline_outer como uma table_reference.

Exemplos

aplica-se a: verificação marcada como sim Databricks Runtime 12.1 e anteriores:

> SELECT inline_outer(array(struct(1, 'a'), struct(2, 'b'))), 'Spark SQL';
 1  a Spark SQL
 2  b Spark SQL

> SELECT inline_outer(array(struct(1, 'a'), struct(1, 'b'))),
         inline_outer(array(struct('c', 1.0), struct('d', 2.0))),
         'Spark SQL';
 1  a Spark SQL
 2  b Spark SQL
Error: UNSUPPORTED_GENERATOR.MULTI_GENERATOR

Aplica-se a: verificação marcada como sim SQL do Databricks verificação marcada como sim Databricks Runtime 12.2 LTS e versões posteriores:

> SELECT i.*, 'Spark SQL'
    FROM inline_outer(array(struct(1, 'a'), struct(2, 'b'))) AS i;
 1  a Spark SQL
 2  b Spark SQL

> SELECT i1.*, i2.*, 'Spark SQL'
   FROM  inline_outer(array(struct(1, 'a'), struct(1, 'b'))) AS i1,
         inline_outer(array(struct('c', 1.0), struct('d', 2.0))) AS i2;
 1      a       c       1.0     Spark SQL
 1      b       c       1.0     Spark SQL
 1      a       d       2.0     Spark SQL
 1      b       d       2.0     Spark SQL