Compartilhar via


Cláusula LATERAL VIEW

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

Usada em conjunto com funções de gerador, como EXPLODE, que gera uma tabela virtual contendo uma ou mais linhas. LATERAL VIEW aplica as linhas a cada linha de saída original.

No Databricks SQL e a partir do Databricks Runtime 12.2, essa cláusula foi preterida. Você deve invocar uma função de gerador valorizado por tabela como table_reference.

Sintaxe

LATERAL VIEW [ OUTER ] generator_function ( expression [, ...] ) [ table_identifier ] AS column_identifier [, ...]

Parâmetros

  • OUTER

    Se OUTER for especificado, retorna NULL se uma matriz ou mapa de entrada estiver vazio ou nulo.

  • generator_function

    Uma função de gerador (EXPLODE, INLINE etc.).

  • table_identifier

    O alias para generator_function, que é opcional.

  • column_identifier

    Lista os aliases da coluna de generator_function, que podem ser usados em linhas de saída. O número de identificadores de coluna deve corresponder ao número de colunas retornado pela função de gerador.

Exemplos

> CREATE TABLE person (id INT, name STRING, age INT, class INT, address STRING);
> INSERT INTO person VALUES
    (100, 'John', 30, 1, 'Street 1'),
    (200, 'Mary', NULL, 1, 'Street 2'),
    (300, 'Mike', 80, 3, 'Street 3'),
    (400, 'Dan', 50, 4, 'Street 4');

> SELECT * FROM person
    LATERAL VIEW EXPLODE(ARRAY(30, 60)) tableName AS c_age
    LATERAL VIEW EXPLODE(ARRAY(40, 80)) AS d_age;
   id    name     age    class     address    c_age    d_age
 ------ ------- ------- -------- ----------- -------- --------
  100    John    30      1        Street 1    30       40
  100    John    30      1        Street 1    30       80
  100    John    30      1        Street 1    60       40
  100    John    30      1        Street 1    60       80
  200    Mary    NULL    1        Street 2    30       40
  200    Mary    NULL    1        Street 2    30       80
  200    Mary    NULL    1        Street 2    60       40
  200    Mary    NULL    1        Street 2    60       80
  300    Mike    80      3        Street 3    30       40
  300    Mike    80      3        Street 3    30       80
  300    Mike    80      3        Street 3    60       40
  300    Mike    80      3        Street 3    60       80
  400    Dan     50      4        Street 4    30       40
  400    Dan     50      4        Street 4    30       80
  400    Dan     50      4        Street 4    60       40
  400    Dan     50      4        Street 4    60       80

> SELECT c_age, COUNT(1) FROM person
     LATERAL VIEW EXPLODE(ARRAY(30, 60)) AS c_age
     LATERAL VIEW EXPLODE(ARRAY(40, 80)) AS d_age
     GROUP BY c_age;
  c_age    count(1)
 -------- -----------
  60       8
  30       8

SELECT * FROM person
    LATERAL VIEW EXPLODE(ARRAY()) tableName AS c_age;
  id    name    age    class    address    c_age
 ----- ------- ------ -------- ---------- --------

> SELECT * FROM person
     LATERAL VIEW OUTER EXPLODE(ARRAY()) tableName AS c_age;
   id    name     age    class     address    c_age
 ------ ------- ------- -------- ----------- --------
  100    John    30      1        Street 1    NULL
  200    Mary    NULL    1        Street 2    NULL
  300    Mike    80      3        Street 3    NULL
  400    Dan     50      4        Street 4    NULL