klausa LATERAL VIEW

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Digunakan bersama dengan fungsi generator seperti EXPLODE, yang menghasilkan tabel virtual yang berisi satu atau beberapa baris. LATERAL VIEW menerapkan baris tersebut ke setiap baris output asli.

Di Databricks SQL dan dimulai dengan Databricks Runtime 12.2 klausa ini tidak digunakan lagi. Anda harus memanggil fungsi generator yang menghasilkan nilai tabel sebagai referensi_tabel.

Sintaks

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

Parameter

  • OUTER

    Jika OUTER ditentukan, mengembalikan null jika array/peta input kosong atau null.

  • generator_function

    Fungsi generator (EXPLODE, INLINE, dll.). Jika fungsi ini bukan fungsi generator, Azure Databricks menaikkan UNSUPPORTED_GENERATOR. NOT_GENERATOR.

  • table_identifier

    Alias yang opsional untuk generator_function.

  • column_identifier

    Mencantumkan alias kolom generator_function, yang dapat digunakan dalam baris output. Jumlah pengidentifikasi kolom harus cocok dengan jumlah kolom yang dikembalikan oleh fungsi generator. Jika jumlah pengidentifikasi kolom tidak cocok dengan kolom output generator, Azure Databricks menaikkan UDTF_ALIAS_NUMBER_MISMATCH.

Kondisi kesalahan umum

Contoh

> 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