مشاركة عبر


عبارة LATERAL VIEW

ينطبق على: وضع علامة Databricks SQL وضع علامة Databricks Runtime

يستخدم بالاقتران مع دوال المولد مثل EXPLODE، والذي ينشئ جدولا ظاهريا يحتوي على صف واحد أو أكثر. LATERAL VIEW تطبيق الصفوف على كل صف إخراج أصلي.

في Databricks SQL وبدءا من Databricks Runtime 12.2 يتم إهمال هذه العبارة. يجب استدعاء دالة منشئ قيم الجدول كدالة table_reference.

بناء الجملة

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

المعلمات

  • خارجي

    إذا OUTER تم تحديدها، فترجع قيمة خالية إذا كان صفيف/مخطط الإدخال فارغا أو خاليا.

  • generator_function

    دالة مولد (EXPLODE و INLINE وما إلى ذلك).

  • table_identifier

    الاسم المستعار ل generator_function، وهو اختياري.

  • column_identifier

    يسرد أسماء الأعمدة المستعارة ل generator_function، والتي يمكن استخدامها في صفوف الإخراج. يجب أن يتطابق عدد معرفات الأعمدة مع عدد الأعمدة التي تم إرجاعها بواسطة دالة المولد.

الأمثلة

> 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