LATERAL VIEW-Klausel
Gilt für: Databricks SQL Databricks Runtime
Wird in Verbindung mit Generatorfunktionen wie EXPLODE
verwendet, die eine virtuelle Tabelle mit mindestens einer Zeile generiert. LATERAL VIEW
wendet die Zeilen auf jede ursprüngliche Ausgabezeile an.
In Databricks SQL und ab Databricks Runtime 12.2 ist diese Klausel veraltet. Sie sollten eine Tabellenwert-Generatorfunktion als table_reference aufrufen.
Syntax
LATERAL VIEW [ OUTER ] generator_function ( expression [, ...] ) [ table_identifier ] AS column_identifier [, ...]
Parameter
OUTER
Bei Angabe von
OUTER
wird NULL zurückgegeben, wenn ein Eingabearray/eine Eingabezuordnung leer oder NULL ist.-
Eine Generatorfunktion (EXPLODE, INLINE usw.).
-
Der Alias für
generator_function
(optional). -
Listet die Spaltenaliase von
generator_function
auf, die in Ausgabezeilen verwendet werden können. Die Anzahl der Spaltenbezeichner muss mit der Anzahl der Spalten übereinstimmen, die von der Generatorfunktion zurückgegeben werden.
Beispiele
> 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