Pelatihan
Modul
Mengubah data dengan menerapkan pivot, unpivot, rollup, dan cube - Training
Konten ini adalah bagian dari Transformasi data dengan menerapkan pivot, unpivot, rollup, dan kubus.
Browser ini sudah tidak didukung.
Mutakhirkan ke Microsoft Edge untuk memanfaatkan fitur, pembaruan keamanan, dan dukungan teknis terkini.
Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: Databricks SQL
Databricks Runtime 12.2 LTS ke atas.
Mengubah baris dari referensi tabel sebelumnya dengan memutar grup kolom menjadi baris dan menggabungkan kolom yang tercantum: Kolom baru pertama menyimpan nama grup kolom asli (atau alias dari nama-nama tersebut) sebagai nilai. Kolom ini diikuti oleh sekelompok kolom dengan nilai dari masing-masing grup kolom.
UNPIVOT [ { INCLUDE NULLS | EXCLUDE NULLS } ]
{ single_value | multi_value }
( value_column
FOR unpivot_column IN ( { column_name [ column_alias ] } [, ...] ) )
[ table_alias ]
single_value
( value_column
FOR unpivot_column IN ( { column_name [ column_alias ] } [, ...] ) )
multi_value
( ( value_column [, ...] )
FOR unpivot_column IN ( { ( column_name [, ...] ) [ column_alias ] } [, ...] ) )
INCLUDE NULLS
atau EXCLUDE NULLS
Apakah, atau tidak untuk memfilter baris dengan NULL
di value_column
.
Default adalah EXCLUDE NULLS
.
Alias kolom yang tidak terdefinisi. Kolom ini akan menyimpan nilai-nilai.
Jenis ech value_column
adalah jenis yang paling jarang ditemui di antara jenis-jenis kolom column_name
yang sesuai.
Alias kolom yang tidak terdefinisi. Kolom ini akan menyimpan nama-nama column_name
yang diputar atau nama-nama column_alias
mereka.
Jenis unpivot_column
adalah STRING
.
Dalam kasus multi nilai UNPIVOT
, nilai akan menjadi perangkaian dari s yang dipisahkan '_'
column_name
, jika tidak column_alias
ada .
Mengidentifikasi kolom dalam relasi yang akan dibuka pivot-nya. Nama mungkin memenuhi syarat.
Semua column_name
harus berbagi jenis yang paling tidak umum.
Nama opsional yang digunakan dalam unpivot_column
.
Secara opsional menentukan label untuk tabel yang dihasilkan.
Jika table_alias
menyertakan column_identifier
jumlahnya harus cocok dengan jumlah kolom yang dihasilkan oleh UNPIVOT
.
Tabel sementara dari formulir berikut:
table_reference
kecuali yang dinamai sebagai column_name
s.unpivot_column
STRING
.value_column
jenis pencocokan column_name
yang paling tidak umum.- A single column UNPIVOT
> CREATE OR REPLACE TEMPORARY VIEW sales(location, year, q1, q2, q3, q4) AS
VALUES ('Toronto' , 2020, 100 , 80 , 70, 150),
('San Francisco', 2020, NULL, 20 , 50, 60),
('Toronto' , 2021, 110 , 90 , 80, 170),
('San Francisco', 2021, 70 , 120, 85, 105);
> SELECT *
FROM sales UNPIVOT INCLUDE NULLS
(sales FOR quarter IN (q1 AS `Jan-Mar`,
q2 AS `Apr-Jun`,
q3 AS `Jul-Sep`,
sales.q4 AS `Oct-Dec`));
location year quarter sales
—------------ —--- —------ —-----
Toronto 2020 Jan-Mar 100
Toronto 2020 Apr-Jun 80
Toronto 2020 Jul-Sep 70
Toronto 2020 Oct-Dec 150
San Francisco 2020 Jan-Mar null
San Francisco 2020 Apr-Jun 20
San Francisco 2020 Jul-Sep 50
San Francisco 2020 Oct-Dec 60
Toronto 2021 Jan-Mar 110
Toronto 2021 Apr-Jun 90
Toronto 2021 Jul-Sep 80
Toronto 2021 Oct-Dec 170
San Francisco 2021 Jan-Mar 70
San Francisco 2021 Apr-Jun 120
San Francisco 2021 Jul-Sep 85
San Francisco 2021 Oct-Dec 105
-- This is equivalent to:
> SELECT location, year,
inline(arrays_zip(array('Jan-Mar', 'Apr-Jun', 'Jul-Sep', 'Oct-Dec'),
array(q1 , q2 , q3 , q4)))
AS (quarter, sales)
FROM sales;
- A multi column UNPIVOT
> CREATE OR REPLACE TEMPORARY VIEW oncall
(year, week, area , name1 , email1 , phone1 , name2 , email2 , phone2) AS
VALUES (2022, 1 , 'frontend', 'Freddy', 'fred@alwaysup.org' , 15551234567, 'Fanny' , 'fanny@lwaysup.org' , 15552345678),
(2022, 1 , 'backend' , 'Boris' , 'boris@alwaysup.org', 15553456789, 'Boomer', 'boomer@lwaysup.org', 15554567890),
(2022, 2 , 'frontend', 'Franky', 'frank@lwaysup.org' , 15555678901, 'Fin' , 'fin@alwaysup.org' , 15556789012),
(2022, 2 , 'backend' , 'Bonny' , 'bonny@alwaysup.org', 15557890123, 'Bea' , 'bea@alwaysup.org' , 15558901234);
> SELECT *
FROM oncall UNPIVOT ((name, email, phone) FOR precedence IN ((name1, email1, phone1) AS primary,
(name2, email2, phone2) AS secondary));
year week area precedence name email phone
---- ---- -------- ---------- ------ ------------------ -----------
2022 1 frontend primary Freddy fred@alwaysup.org 15551234567
2022 1 frontend secondary Fanny fanny@lwaysup.org 15552345678
2022 1 backend primary Boris boris@alwaysup.org 15553456789
2022 1 backend secondary Boomer boomer@lwaysup.org 15554567890
2022 2 frontend primary Franky frank@lwaysup.org 15555678901
2022 2 frontend secondary Fin fin@alwaysup.org 15556789012
2022 2 backend primary Bonny bonny@alwaysup.org 15557890123
2022 2 backend secondary Bea bea@alwaysup.org 15558901234
-- This is equivalent to:
> SELECT year, week, area,
inline(arrays_zip(array('primary', 'secondary'),
array(name1, name2),
array(email1, email2),
array(phone1, phone2)))
AS (precedence, name, email, phone)
FROM oncall;
Pelatihan
Modul
Mengubah data dengan menerapkan pivot, unpivot, rollup, dan cube - Training
Konten ini adalah bagian dari Transformasi data dengan menerapkan pivot, unpivot, rollup, dan kubus.