Bagikan melalui


explode_outer fungsi generator bernilai meja

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

Mengembalikan sekumpulan baris dengan membuka sarang collection menggunakan semantik luar.

Dalam Databricks SQL dan Databricks Runtime 13.3 LTS dan di atas fungsi ini mendukung pemanggilan parameter bernama.

Sintaks

explode_outer(collection)

Argumen

  • collection: Ekspresi ARRAY atau MAP .

Mengembalikan

Sekumpulan baris yang terdiri dari elemen array atau kunci dan nilai peta. Kolom yang dihasilkan oleh explode_outer array diberi nama col. Kolom untuk peta dipanggil key dan value.

Jika collection adalah NULL satu baris dengan NULLs untuk nilai array atau peta dihasilkan. Untuk tidak mengembalikan baris saat collectionNULL menggunakan fungsi explode().

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

    explode_outer hanya dapat ditempatkan dalam daftar SELECT sebagai akar ekspresi atau mengikuti LATERAL VIEW. Saat menempatkan fungsi dalam SELECT daftar, tidak boleh ada fungsi generator lain dalam daftar atau UNSUPPORTED_GENERATOR yang samaSELECT. 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 explode_outer sebagai table_reference.

Contoh

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

> SELECT explode_outer(array(10, 20)) AS elem, 'Spark';
 10 Spark
 20 Spark

> SELECT explode_outer(collection => array(10, 20)) AS elem, 'Spark';
 10 Spark
 20 Spark

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

> SELECT explode_outer(cast(NULL AS array<int>)), 'Spark';
 NULL   Spark

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

-- The difference between explode() and explode_outer() is that explode_outer() returns NULL if the array is NULL.
> SELECT explode_outer(c1) AS elem, 'Spark' FROM VALUES(array(10, 20)), (null) AS T(c1);
 10   Spark
 20   Spark
 NULL Spark

> SELECT explode(c1) AS elem, 'Spark' FROM VALUES(array(10, 20)), (null) AS T(c1);
 10 Spark
 20 Spark

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

> SELECT elem, 'Spark' FROM explode_outer(array(10, 20)) AS t(elem);
 10 Spark
 20 Spark

> SELECT num, val, 'Spark' FROM explode_outer(map(1, 'a', 2, 'b')) AS t(num, val);
 1   a   Spark
 2   b   Spark

> SELECT * FROM explode_outer(array(1, 2)), explode_outer(array(3, 4));
 1   3
 1   4
 2   3
 2   4

> SELECT * FROM explode_outer(cast(NULL AS array<int>));
 NULL

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