Delen via


Clausule LATERAL VIEW

Van toepassing op: vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

Wordt gebruikt in combinatie met generatorfuncties zoals EXPLODE, waarmee een virtuele tabel met een of meer rijen wordt gegenereerd. LATERAL VIEW past de rijen toe op elke oorspronkelijke uitvoerrij.

In Databricks SQL en te beginnen met Databricks Runtime 12.2 is deze component afgeschaft. U moet een generatorfunctie met tabelwaarden aanroepen als een table_reference.

Syntaxis

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

Parameters

  • BUITEN

    Als OUTER dit is opgegeven, wordt null geretourneerd als een invoermatrix/toewijzing leeg of null is.

  • generator_function

    Een generatorfunctie (EXPLODE, INLINE, enzovoort).

  • table_identifier

    De alias voor generator_function, die optioneel is.

  • column_identifier

    Geeft een lijst van de kolomaliassen van generator_function, die kunnen worden gebruikt in uitvoerrijen. Het aantal kolom-id's moet overeenkomen met het aantal kolommen dat door de generatorfunctie wordt geretourneerd.

Voorbeelden

> 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