Condividi tramite


clausola LATERAL VIEW

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime

Usato insieme a funzioni del generatore, ad esempio EXPLODE, che genera una tabella virtuale contenente una o più righe. LATERAL VIEW applica le righe a ogni riga di output originale.

In Databricks SQL e a partire da Databricks Runtime 12.2 questa clausola è deprecata. È necessario richiamare una funzione generatrice di valori di tabella come table_reference.

Sintassi

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

Parametri

  • OUTER

    Se OUTER specificato, restituisce null se una matrice o una mappa di input è vuota o null.

  • generator_function

    Funzione generatore (EXPLODE, INLINE e così via). Se la funzione non è una funzione generatore, Azure Databricks genera UNSUPPORTED_GENERATOR. NOT_GENERATOR.

  • table_identifier

    Alias per generator_function, facoltativo.

  • column_identifier

    Elenca gli alias di colonna di generator_function, che possono essere usati nelle righe di output. Il numero di identificatori di colonna deve corrispondere al numero di colonne restituite dalla funzione generatore. Se il numero di identificatori di colonna non corrisponde alle colonne di output del generatore, Azure Databricks genera UDTF_ALIAS_NUMBER_MISMATCH.

Condizioni di errore comuni

Esempi

> 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