LATERAL VIEW záradék

A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime

Az olyan generátorfüggvényekkel együtt használatos, mint a EXPLODE, amely egy vagy több sort tartalmazó virtuális táblát hoz létre. LATERAL VIEW az egyes eredeti kimeneti sorokra alkalmazza a sorokat.

A Databricks SQL-ben és a Databricks Runtime 12.2-től kezdve ez a záradék elavult. Egy táblaértékű generátorfüggvényt table_reference formájában kell meghívnia.

Szintaxis

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

Paraméterek

  • KÜLSŐ

    Ha OUTER meg van adva, null értéket ad vissza, ha egy bemeneti tömb/térkép üres vagy null értékű.

  • generator_function

    Generátorfüggvény (EXPLODE, INLINE stb.). Ha a függvény nem generátorfüggvény, Azure Databricks UNSUPPORTED_GENERATOR. NOT_GENERATOR.

  • table_identifier

    Az generator_function alias, amely nem kötelező.

  • column_identifier

    A generator_functionoszlop álneveit sorolja fel, amelyeket a kimeneti sorokban lehet használni. Az oszlopazonosítók számának meg kell egyeznie a generátorfüggvény által visszaadott oszlopok számával. Ha az oszlopazonosítók száma nem egyezik a generátor kimeneti oszlopával, Azure Databricks UDTF_ALIAS_NUMBER_MISMATCH.

Gyakori hibafeltételek

Példák

> 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