posexplode fungsi generator dengan nilai tabel

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

Mengembalikan sekumpulan baris dengan membongkar expr dan memberikan penomoran pada posisi-posisinya.

Dalam Databricks SQL dan Databricks Runtime 16.1 ke atas fungsi ini mendukung pemanggilan parameter bernama.

Sintaks

posexplode(collection)

Argumen

  • collection: Ekspresi ARRAY atau MAP .

Mengembalikan

Sekumpulan baris yang terdiri dari posisi dan elemen array atau kunci dan nilai peta. Kolom yang dihasilkan oleh posexplode array diberi nama pos dan col. Kolom untuk peta disebut pos, key dan value.

Jika collection tidak ada NULL baris yang diproduksi.

  • Berlaku untuk:centang ditandai ya Databricks Runtime 12.1 dan yang lebih lama:

    posexplode hanya dapat ditempatkan dalam daftar SELECT sebagai akar ekspresi atau mengikuti LATERAL VIEW. Saat menempatkan fungsi dalam daftar SELECT, tidak boleh ada fungsi generator lain dalam daftar SELECT atau UNSUPPORTED_GENERATOR yang sama. MULTI_GENERATOR dibesarkan.

  • Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime 12.2 LTS ke atas:

    Pemanggilan dari klausa LATERAL VIEW atau daftar SELECT tidak digunakan lagi. Sebagai gantinya, panggil posexplode sebagai table_reference.

Contoh

Berlaku untuk:centang ditandai ya Databricks Runtime 12.1 dan yang lebih lama:

> SELECT posexplode(array(10, 20)) AS elem, 'Spark';
 0  10 Spark
 1  20 Spark

> SELECT posexplode(map(1, 'a', 2, 'b')) AS (num, val), 'Spark';
 0  1   a   Spark
 1  2   b   Spark

> SELECT posexplode(array(1, 2)), posexplode(array(3, 4));
  Error: UNSUPPORTED_GENERATOR.MULTI_GENERATOR

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime 12.2 LTS ke atas:

> SELECT pos, col FROM posexplode(array(10, 20));
 0  10
 1  20

> SELECT pos, key, value FROM posexplode(map(10, 'a', 20, 'b'));
 0  10   a
 1  22   b

> SELECT p1.*, p2.* FROM posexplode(array(1, 2)) AS p1, posexplode(array(3, 4)) AS p2;
 0  1  0  3
 0  1  1  4
 1  2  0  3
 1  2  1  4

-- Using lateral correlation in Databricks 12.2 and above
> SELECT p1.*, p2.* FROM posexplode(array(1, 2)) AS p1, LATERAL posexplode(array(3 * p1.col, 4 * p1.col)) AS p2;
 0      1  0  3
 0      1  1  4
 1      2  0  6
 1      2  1  8