cláusula LATERAL VIEW

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime

Se usa junto con funciones de generador, como EXPLODE, que genera una tabla virtual que contiene una o varias filas. LATERAL VIEW aplica las filas a cada fila de salida original.

En Databricks SQL y a partir de Databricks Runtime 12.2, esta cláusula está en desuso. Debe invocar una función de generador con valores de tabla como table_reference.

Sintaxis

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

Parámetros

  • OUTER

    Si OUTER se especifica, devuelve NULL si una matriz o asignación de entrada está vacía o tiene el valor de NULL.

  • generator_function

    Una función de generador (EXPLODE, INLINE, etc.). Si la función no es una función de generador, Azure Databricks genera UNSUPPORTED_GENERATOR. NOT_GENERATOR.

  • table_identifier

    Alias de generator_function, que es opcional.

  • column_identifier

    Enumera los alias de columna de generator_function, que se pueden usar en las filas de salida. El número de identificadores de columna debe coincidir con el número de columnas devueltas por la función del generador. Si el número de identificadores de columna no coincide con las columnas de salida del generador, Azure Databricks genera UDTF_ALIAS_NUMBER_MISMATCH.

Condiciones de error comunes

Ejemplos

> 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