Menggunakan tampilan materialisasi di Databricks SQL
Penting
Fitur ini ada di Pratinjau Publik.
Artikel ini menjelaskan cara membuat dan menggunakan tampilan materialisasi di Databricks SQL untuk meningkatkan performa dan mengurangi biaya beban kerja pemrosesan dan analisis data Anda.
Apa itu tampilan materialisasi?
Di Databricks SQL, tampilan materialisasi adalah tabel terkelola Unity Catalog yang memungkinkan pengguna untuk melakukan prakompeksi hasil berdasarkan versi terbaru data dalam tabel sumber. Tampilan materialisasi pada Azure Databricks berbeda dari implementasi lain karena hasil yang dikembalikan mencerminkan status data ketika tampilan materialisasi terakhir di-refresh daripada selalu memperbarui hasil saat tampilan materialisasi dikueri. Anda dapat me-refresh tampilan terwujud secara manual atau menjadwalkan refresh.
Tampilan materialisasi sangat kuat untuk beban kerja pemrosesan data seperti pemrosesan ekstrak, transformasi, dan pemuatan (ETL). Tampilan materialisasi menyediakan cara sederhana dan deklaratif untuk memproses data untuk kepatuhan, koreksi, agregasi, atau pengambilan data perubahan umum (CDC). Tampilan materialisasi mengurangi biaya dan meningkatkan latensi kueri dengan melakukan pra-komputasi kueri lambat dan komputasi yang sering digunakan. Tampilan materialisasi juga memungkinkan transformasi yang mudah digunakan dengan membersihkan, memperkaya, dan mendenormalisasi tabel dasar. Tampilan materialisasi dapat mengurangi biaya sambil memberikan pengalaman pengguna akhir yang disederhanakan karena, dalam beberapa kasus, mereka dapat secara bertahap menghitung perubahan dari tabel dasar.
Tampilan materialisasi pertama kali didukung pada Databricks Data Intelligence Platform dengan peluncuran Delta Live Tables. Saat Anda membuat tampilan materialisasi di gudang Databricks SQL, alur Delta Live Tables dibuat untuk memproses refresh ke tampilan materialisasi. Anda dapat memantau status operasi refresh di UI Tabel Langsung Delta, API Tabel Langsung Delta, atau CLI Tabel Langsung Delta. Lihat Menampilkan status refresh tampilan materialisasi.
Persyaratan
Anda harus menggunakan gudang Databricks SQL yang mendukung Unity Catalog untuk membuat dan me-refresh tampilan materialisasi.
Ruang kerja Anda harus berada di wilayah tanpa server yang diaktifkan.
Untuk mempelajari tentang pembatasan saat menggunakan tampilan materialisasi dengan Databricks SQL, lihat Batasan.
Membuat tampilan materialisasi
Untuk membuat tampilan materialisasi, gunakan CREATE MATERIALIZED VIEW
pernyataan . Lihat MEMBUAT TAMPILAN MATERIALISASI dalam referensi Databricks SQL. Untuk mengirimkan pernyataan buat, gunakan editor SQL di UI Azure Databricks, Databricks SQL CLI, atau Databricks SQL API.
Catatan
Pengguna yang membuat tampilan materialisasi adalah pemilik tampilan materialisasi dan harus memiliki izin berikut:
SELECT
hak istimewa pada tabel dasar yang dirujuk oleh tampilan materialisasi.USE CATALOG
danUSE SCHEMA
hak istimewa pada katalog dan skema yang berisi tabel sumber untuk tampilan materialisasi.USE CATALOG
danUSE SCHEMA
hak istimewa pada katalog target dan skema untuk tampilan materialisasi.CREATE TABLE
hak istimewa padaCREATE MATERIALIZED VIEW
skema yang berisi tampilan materialisasi.
Contoh berikut membuat tampilan mv1
materialisasi dari tabel base_table1
dasar :
CREATE MATERIALIZED VIEW mv1
AS SELECT
date, sum(sales) AS sum_of_sales
FROM
table1
GROUP BY
date;
Bagaimana tampilan materialisasi dibuat?
Operasi tampilan CREATE
materialisasi Databricks SQL menggunakan gudang Databricks SQL untuk membuat dan memuat data dalam tampilan materialisasi. Karena membuat tampilan materialisasi adalah operasi sinkron di gudang Databricks SQL, CREATE MATERIALIZED VIEW
perintah memblokir hingga tampilan materialisasi dibuat dan beban data awal selesai. Alur Delta Live Tables secara otomatis dibuat untuk setiap tampilan materialisasi Databricks SQL. Saat tampilan materialisasi di-refresh, pembaruan ke alur Tabel Langsung Delta mulai memproses refresh.
Memuat data dari sistem eksternal
Databricks merekomendasikan pemuatan data eksternal menggunakan Federasi Lakehouse untuk sumber data yang didukung. Untuk informasi tentang memuat data dari sumber yang tidak didukung oleh Federasi Lakehouse, lihat Opsi format data.
Merefresh tampilan materialisasi
Operasi REFRESH
me-refresh tampilan materialisasi untuk mencerminkan perubahan terbaru pada tabel dasar. Untuk me-refresh tampilan materialisasi, gunakan REFRESH MATERIALIZED VIEW
pernyataan . Lihat REFRESH (TAMPILAN MATERIALISASI dan TABEL STREAMING) di referensi Databricks SQL. Untuk mengirimkan pernyataan refresh, gunakan editor SQL di UI Azure Databricks, Databricks SQL CLI, atau Databricks SQL API.
Hanya pemilik yang dapat REFRESH
mewujudkan tampilan.
Contoh berikut me-refresh tampilan materialisasi mv1
:
REFRESH MATERIALIZED VIEW mv1;
Bagaimana tampilan materialisasi Databricks SQL disegarkan?
Tampilan materialisasi Databricks SQL menggunakan Tabel Langsung Delta untuk operasi refresh. Saat tampilan materialisasi di-refresh, pembaruan ke alur Delta Live Tables yang mengelola tampilan materialisasi mulai memproses refresh.
Refresh tampilan materialisasi Databricks SQL bersifat asinkron. Saat refresh tampilan materialisasi dimulai, pekerjaan latar belakang dimulai pada kluster Delta Live Tables dan perintah kembali segera sebelum pemuatan data selesai.
Karena refresh dikelola oleh alur Delta Live Tables, gudang Databricks SQL yang digunakan untuk membuat tampilan materialisasi tidak digunakan dan tidak perlu berjalan selama operasi refresh.
Beberapa kueri dapat disegarkan secara bertahap. Lihat Penyegaran inkremental dari tampilan materialisasi. Jika refresh inkremental tidak dapat dilakukan, refresh penuh dilakukan sebagai gantinya.
Menjadwalkan refresh tampilan materialisasi
Anda dapat mengonfigurasi tampilan materialisasi Databricks SQL untuk di-refresh secara otomatis berdasarkan jadwal yang ditentukan. Konfigurasikan jadwal ini dengan SCHEDULE
klausul saat Anda membuat tampilan materialisasi atau menambahkan jadwal dengan pernyataan ALTER VIEW . Saat jadwal dibuat, pekerjaan Databricks baru secara otomatis dikonfigurasi untuk memproses pembaruan. Anda dapat melihat jadwal kapan saja dengan DESCRIBE EXTENDED
pernyataan.
Memperbarui definisi tampilan materialisasi
Untuk memperbarui definisi tampilan materialisasi, Anda harus terlebih dahulu menghilangkannya, lalu membuat ulang tampilan materialisasi.
Menghilangkan tampilan materialisasi
Catatan
Untuk mengirimkan perintah untuk menghilangkan tampilan materialisasi, Anda harus menjadi pemilik tampilan materialisasi tersebut.
Untuk menghilangkan tampilan materialisasi, gunakan pernyataan DROP VIEW . Untuk mengirimkan DROP
pernyataan, Anda dapat menggunakan editor SQL di UI Azure Databricks, Databricks SQL CLI, atau Databricks SQL API. Contoh berikut menghilangkan tampilan materialisasi mv1
:
DROP MATERIALIZED VIEW mv1;
Menjelaskan tampilan materialisasi
Untuk mengambil kolom dan jenis data untuk tampilan materialisasi, gunakan DESCRIBE
pernyataan . Untuk mengambil kolom, jenis data, dan metadata seperti pemilik, lokasi, waktu pembuatan, dan status refresh untuk tampilan materialisasi, gunakan DESCRIBE EXTENDED
. Untuk mengirimkan DESCRIBE
pernyataan, gunakan editor SQL di UI Azure Databricks, Databricks SQL CLI, atau Databricks SQL API.
Menampilkan status refresh tampilan materialisasi
Catatan
Karena alur Tabel Langsung Delta mengelola refresh tampilan materialisasi, ada latensi yang dikeluarkan oleh waktu mulai untuk alur. Waktu ini mungkin dalam detik hingga menit, selain waktu yang diperlukan untuk melakukan refresh.
Anda dapat melihat status refresh tampilan materialisasi dengan melihat alur yang mengelola tampilan materialisasi di UI Tabel Langsung Delta atau dengan melihat Informasi Refresh yang dikembalikan oleh DESCRIBE EXTENDED
perintah untuk tampilan materialisasi.
Anda juga bisa menampilkan riwayat refresh tampilan materialisasi dengan mengkueri log peristiwa Tabel Langsung Delta. Lihat Menampilkan riwayat refresh untuk tampilan materialisasi.
Menampilkan status refresh di UI Tabel Langsung Delta
Secara default, alur Tabel Langsung Delta yang mengelola tampilan materialisasi tidak terlihat di UI Tabel Langsung Delta. Untuk melihat alur di UI Tabel Langsung Delta, Anda harus langsung mengakses tautan ke halaman detail Alur alur. Untuk mengakses tautan:
- Jika Anda mengirimkan
REFRESH
perintah di editor SQL, ikuti tautan di panel Hasil . - Ikuti tautan yang dikembalikan oleh
DESCRIBE EXTENDED
pernyataan. - Pada tab silsilah untuk tampilan materialisasi, klik Alur lalu klik tautan alur.
Menghentikan refresh aktif
Untuk menghentikan refresh aktif di UI Tabel Langsung Delta, di halaman Detail alur klik Hentikan untuk menghentikan pembaruan alur. Anda juga dapat menghentikan refresh dengan Databricks CLI atau OPERASI POST /api/2.0/pipelines/{pipeline_id}/stop di PIPElines API.
Mengontrol akses ke tampilan materialisasi
Tampilan materialisasi mendukung kontrol akses yang kaya untuk mendukung berbagi data sambil menghindari mengekspos data yang berpotensi privat. Pemilik tampilan materialisasi dapat memberikan SELECT
hak istimewa kepada pengguna lain. Pengguna dengan SELECT
akses ke tampilan materialisasi tidak memerlukan SELECT
akses ke tabel yang dirujuk oleh tampilan materialisasi. Kontrol akses ini memungkinkan berbagi data sambil mengontrol akses ke data yang mendasar.
Memberikan hak istimewa ke tampilan materialisasi
Untuk memberikan akses ke tampilan materialisasi, gunakan GRANT
pernyataan:
GRANT
privilege_type [, privilege_type ] ...
ON <mv_name> TO principal;
privilege_type dapat berupa:
SELECT
- pengguna dapatSELECT
mewujudkan tampilan.REFRESH
- pengguna dapatREFRESH
mewujudkan tampilan. Refresh dijalankan menggunakan izin pemilik.
Contoh berikut membuat tampilan materialisasi dan memberikan hak istimewa pilih dan refresh kepada pengguna:
CREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;
Mencabut hak istimewa dari tampilan materialisasi
Untuk mencabut akses dari tampilan materialisasi, gunakan REVOKE
pernyataan :
REVOKE
privilege_type [, privilege_type ]
ON <name> FROM principal;
Ketika SELECT
hak istimewa pada tabel dasar dicabut dari pemilik tampilan materialisasi atau pengguna lain yang telah diberikan SELECT
hak istimewa ke tampilan materialisasi, atau tabel dasar dihilangkan, pemilik tampilan materialisasi atau akses yang diberikan pengguna masih dapat mengkueri tampilan materialisasi. Namun, perilaku berikut terjadi:
- Pemilik tampilan materialisasi atau orang lain yang kehilangan akses ke tampilan materialisasi tidak
REFRESH
lagi dapat melihat materialisasi tersebut, dan tampilan materialisasi akan menjadi kedaluarsa. - Jika diotomatisasi dengan jadwal, jadwal berikutnya
REFRESH
gagal atau tidak dijalankan.
Contoh berikut mencabut SELECT
hak istimewa dari mv1
:
REVOKE SELECT ON mv1 FROM user1;
Penyegaran tampilan materialisasi inkremental
Tampilan materialisasi selalu mengembalikan hasil yang benar secara semantik untuk kueri yang menentukan berdasarkan versi rekam jepret terbaru data yang tersedia dalam tabel dasar pada saat refresh terakhir. Jika memungkinkan, hasil diperbarui secara bertahap, tetapi hasilnya identik dengan hasil yang akan dikirimkan dengan komputasi ulang penuh.
Meskipun kueri apa pun dapat ditentukan dalam tampilan materialisasi, hanya sebagian kueri yang disegarkan secara bertahap. Jika tampilan materialisasi tidak dapat disegarkan secara bertahap, proses refresh menggunakan refresh penuh sebagai gantinya. Untuk menentukan mode mana yang digunakan, lihat Menentukan apakah refresh inkremental atau penuh digunakan.
Jenis tampilan materialisasi apa yang disegarkan secara bertahap?
Catatan
Tampilan materialisasi yang mengkueri jenis tabel dasar tertentu memiliki cakupan refresh inkremental yang lebih besar. Lihat (Tingkat Lanjut) Menentukan tampilan materialisasi yang dapat disegarkan secara bertahap.
Berikut ini menjelaskan ekspresi, kata kunci, dan klausa yang mendukung refresh inkremental.
- Tampilan materialisasi hanya dapat mengkueri satu tabel atau melakukan
INNER JOIN
danUNION ALL
(atau kombinasiINNER JOIN
danUNION ALL
) pada beberapa tabel. - Tampilan materialisasi harus memiliki
GROUP BY
dalam klausa pilih utama. - Klausa tampilan
SELECT
materialisasi hanya dapat mencakup fungsi agregat berikut:- JUMLAH
- COUNT
- Fungsi yang digunakan dalam kueri untuk membuat tampilan materialisasi harus deterministik. Misalnya, penggunaan
CURRENT_TIMESTAMP
tidak diizinkan.
Berikut ini menjelaskan batasan untuk refresh penayangan yang diwujudkan secara inkremental.
- Refresh inkremental tidak didukung untuk tampilan materialisasi yang mencakup:
- Fungsi jendela.
HAVING
Klausul.- Subkueri dalam
SELECT
klausa atauWHERE
. LEFT JOIN
s atauOUTER JOIN
s.
- Refresh bertahap tidak didukung untuk tampilan materialisasi yang dibuat menggunakan fitur perjalanan waktu Delta Lake.
Selain itu, umpan data perubahan diperlukan pada tabel dasar tampilan materialisasi, kecuali untuk kasus penggunaan tingkat lanjut tertentu. Untuk mengaktifkan ubah umpan data pada tabel dasar, atur delta.enableChangeDataFeed
properti tabel menggunakan sintaks berikut:
ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
(Tingkat Lanjut) Menentukan tampilan materialisasi yang dapat disegarkan secara bertahap
Berikut ini menjelaskan kasus penggunaan tingkat lanjut di mana tampilan materialisasi dapat disegarkan secara bertahap. Umpan data perubahan tidak diperlukan untuk refresh inkremental dalam kasus penggunaan tingkat lanjut berikut.
Catatan
Batasan berikut masih berlaku untuk kasus penggunaan yang dijelaskan di sini:
- Fungsi yang digunakan dalam kueri untuk membuat tampilan materialisasi harus deterministik. Misalnya, penggunaan
CURRENT_TIMESTAMP
tidak diizinkan. - Tampilan materialisasi tidak dapat dibuat menggunakan fitur perjalanan waktu Delta Lake.
LEFT JOIN
s danOUTER JOIN
s tidak didukung.
Kueri atas tabel dengan partisi
Tampilan materialisasi dapat memanfaatkan partisi untuk menghindari refresh penuh. Ketika tampilan materialisasi berbagi kunci partisi yang sama dengan tabel dasarnya, tampilan materialisasi dapat mendeteksi partisi yang diubah dan memodifikasi hanya partisi dalam tampilan materialisasi yang diperlukan untuk mewujudkan hasilnya. Untuk tabel besar, ini mungkin menghemat waktu dan sumber daya yang signifikan.
Berikut ini adalah ekspresi, kata kunci, dan klausul yang mendukung refresh inkremental saat menentukan tampilan materialisasi pada tabel dengan partisi. Dalam skenario berikut, tampilan materialisasi "dipartisi bersama" dengan tabel dasar jika tampilan materialisasi berbagi setidaknya satu kunci partisi dengan tabel dasar.
- Tampilan terwujud yang dipartisi dapat mengkueri satu tabel.
- Tampilan materialisasi harus dipartisi bersama dengan tabel dasar.
- Tampilan materialisasi yang dipartisi dapat melakukan
UNION ALL
lebih dari beberapa tabel.- Tampilan materialisasi harus dipartisi bersama dengan semua tabel dasar.
- Tampilan materialisasi yang dipartisi dapat menggunakan
INNER JOIN
pada tabel fakta dengan tabel dimensi.- Tampilan materialisasi harus dipartisi bersama dengan tabel fakta.
- Tabel dimensi tidak diperlukan untuk dipartisi. Jika pembaruan terdeteksi pada tabel dimensi, tampilan materialisasi sepenuhnya disegarkan.
Kueri atas tabel yang hanya ditambahkan
Pola umum untuk tabel di lapisan perunggu adalah bahwa baris baru hanya dimasukkan ke dalam tabel. Tampilan materialisasi secara otomatis mendeteksi tabel dasar khusus tambahan dan me-refresh secara bertahap dengan memasukkan hanya baris baru ke dalam tampilan materialisasi. Untuk tabel besar, ini mungkin menghemat waktu dan sumber daya yang signifikan.
Berikut ini diperlukan untuk mendukung refresh inkremental saat menentukan tampilan materialisasi di atas tabel khusus tambahan:
- Tampilan materialisasi hanya dapat mengkueri satu tabel atau
INNER JOIN
danUNION ALL
(atau kombinasiINNER JOIN and UNION ALL
) pada beberapa tabel. - Tabel dasar harus hanya ditambahkan.
- Jika baris diperbarui atau dihapus ke dalam tabel dasar tampilan materialisasi oleh sistem eksternal, tampilan materialisasi sepenuhnya disegarkan.
Menampilkan riwayat refresh untuk tampilan materialisasi
Untuk melihat status REFRESH
operasi pada tampilan materialisasi, termasuk refresh saat ini dan sebelumnya, kueri log peristiwa Tabel Langsung Delta:
SELECT
*
FROM
event_log(TABLE(<fully-qualified-table-name>))
WHERE
event_type = "update_progress"
ORDER BY
timestamp desc;
Ganti <fully-qualified-table-name>
dengan nama tampilan materialisasi yang sepenuhnya memenuhi syarat, termasuk katalog dan skema.
Lihat Apa itu log peristiwa Delta Live Tables?.
Menentukan apakah refresh inkremental atau penuh digunakan
Untuk mengoptimalkan performa refresh tampilan materialisasi, Azure Databricks menggunakan model biaya untuk memilih teknik yang digunakan untuk refresh. Tabel berikut ini menjelaskan teknik-teknik ini:
Teknik | Refresh inkremental? | Deskripsi |
---|---|---|
FULL_RECOMPUTE |
No | Tampilan materialisasi sepenuhnya dikomputasi ulang |
NO_OP |
Tidak berlaku | Tampilan materialisasi tidak diperbarui karena tidak ada perubahan pada tabel dasar yang terdeteksi. |
ROW_BASED atau PARTITION_OVERWRITE |
Ya | Tampilan materialisasi disegarkan secara bertahap menggunakan teknik yang ditentukan. |
Untuk menentukan teknik yang digunakan, kueri log peristiwa Tabel Langsung Delta di mana event_type
adalah planning_information
:
SELECT
timestamp,
message
FROM
event_log(TABLE(<fully-qualified-table-name>))
WHERE
event_type = 'planning_information'
ORDER BY
timestamp desc;
Ganti <fully-qualified-table-name>
dengan nama tampilan materialisasi yang sepenuhnya memenuhi syarat, termasuk katalog dan skema.
Lihat Apa itu log peristiwa Delta Live Tables?.
Batasan
Ada batasan tentang bagaimana MV dapat dikelola dan di mana MV dapat dikueri:
- Tampilan materialisasi Databricks SQL hanya dapat dibuat dan disegarkan di gudang pro SQL dan gudang SQL tanpa server.
- Tampilan materialisasi Databricks SQL hanya dapat di-refresh dari ruang kerja yang membuatnya.
- Tampilan materialisasi Databricks SQL hanya dapat dikueri dari gudang Databricks SQL, Tabel Langsung Delta, dan kluster bersama yang menjalankan Databricks Runtime 11.3 atau yang lebih tinggi. Anda tidak dapat mengkueri tampilan materialisasi dari kluster mode akses Pengguna Tunggal.
Tabel dasar untuk tampilan materialisasi harus terdaftar di Unity Catalog sebagai tabel terkelola atau eksternal.
Pemilik tampilan materialisasi Databricks SQL tidak dapat diubah.
Tampilan materialisasi tidak mendukung kolom identitas atau kunci pengganti.
Anda tidak dapat menjalankan ad hoc
OPTIMIZE
atauVACUUM
perintah terhadap tampilan materialisasi.Jika tampilan materialisasi menggunakan agregat jumlah atas
NULL
kolom -mampu dan hanyaNULL
nilai yang tetap ada di kolom tersebut, nilai agregat hasil tampilan materialisasi adalah nol alih-alihNULL
.Meskipun referensi kolom tidak memerlukan alias, ekspresi referensi non-kolom memerlukan alias. Misalnya, pernyataan berikut tidak diizinkan:
SELECT col1, SUM(col2) FROM t GROUP BY col1
. Sebagai gantinya, gunakan pernyataan berikut:SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
.Anda tidak dapat menggunakan filter baris atau masker kolom dengan tampilan materialisasi Databricks SQL.
File yang mendasar yang mendukung tampilan materialisasi mungkin menyertakan data dari tabel upstram (termasuk kemungkinan informasi yang dapat diidentifikasi secara pribadi) yang tidak muncul dalam definisi tampilan materialisasi. Data ini secara otomatis ditambahkan ke penyimpanan yang mendasar untuk mendukung penyegaran tampilan materialisasi secara inkremental. Karena file yang mendasar dari tampilan materialisasi mungkin berisiko mengekspos data dari tabel hulu bukan bagian dari skema tampilan materialisasi, Databricks merekomendasikan untuk tidak berbagi penyimpanan yang mendasar dengan konsumen hilir yang tidak tepercaya. Misalnya, misalkan definisi tampilan materialisasi menyertakan
COUNT(DISTINCT field_a)
klausul. Meskipun definisi tampilan materialisasi hanya menyertakan klausul agregatCOUNT DISTINCT
, file yang mendasar akan berisi daftar nilai aktual .field_a
Tampilan materialisasi Databricks SQL tidak didukung di wilayah US Tengah Selatan dan US Barat 2.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk