Bagikan melalui


stack fungsi penghasil nilai tabel

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

Memisahkan expr1, …, exprN ke dalam numRows baris.

Sintaks

stack(numRows, expr1 [, ...] )

Argumen

  • numRows: Nilai literal INTEGER yang lebih besar dari 0 yang menentukan jumlah baris yang dihasilkan.
  • exprN: Ekspresi dengan jenis apapun. Jenis exprN apa pun harus sesuai dengan jenis dari expr(N+numRows).

Pengembalian

Sekumpulan baris numRows yang mencakup kolom max(1, (N/numRows)) yang dihasilkan oleh fungsi ini. Baris yang tidak lengkap diisi dengan NULL sebagai isian.

Secara default, kolom yang dihasilkan diberi nama col0, … col(n-1).

stack setara dengan VALUES klausa.

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

    stack 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 yang sama, atau UNSUPPORTED_GENERATOR.MULTI_GENERATOR akan muncul.

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

    Penggunaan dari klausa LATERAL VIEW atau daftar SELECT sudah tidak digunakan lagi. Sebagai gantinya, panggil stack sebagai table_reference.

Contoh

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

> SELECT 'hello', stack(2, 1, 2, 3) AS (first, second), 'world';
 hello 1  2    world
 hello 3  NULL world

> SELECT 'hello', stack(2, 1, 2, 3) AS (first, second), stack(2, 'a', 'b') AS (third) 'world';
 Error: UNSUPPORTED_GENERATOR.MULTI_GENERATOR

-- Equivalent usage of VALUES
> SELECT 'hello', s1.*, s2.*, 'world'
    FROM VALUES(1, 2), (3, NULL) AS s1(first, second),
         VALUES('a'), ('b') AS s2(third);
 hello  1   2       a   world
 hello  3   NULL    a   world
 hello  1   2       b   world
 hello  3   NULL    b   world

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

> SELECT 'hello', s.*, 'world'
    FROM stack(2, 1, 2, 3) AS s(first, second);
 hello 1  2    world
 hello 3  NULL world

> SELECT 'hello', s1.*, s2.*, 'world'
    FROM stack(2, 1, 2, 3) AS s1(first, second),
         stack(2, 'a', 'b') AS s2(third);
  hello 1  2    a  world
  hello 3  NULL a  world
  hello 1  2    b  world
  hello 3  NULL b  world