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 dan USE SCHEMA hak istimewa pada katalog dan skema yang berisi tabel sumber untuk tampilan materialisasi.
  • USE CATALOG dan USE SCHEMA hak istimewa pada katalog target dan skema untuk tampilan materialisasi.
  • CREATE TABLE hak istimewa pada CREATE MATERIALIZED VIEW skema yang berisi tampilan materialisasi.

Contoh berikut membuat tampilan mv1 materialisasi dari tabel base_table1dasar :

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:

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 dapat SELECT mewujudkan tampilan.
  • REFRESH - pengguna dapat REFRESH 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 dan UNION ALL (atau kombinasi INNER JOIN dan UNION 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 atau WHERE .
    • LEFT JOINs atau OUTER JOINs.
  • 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 JOINs dan OUTER JOINs 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 dan UNION ALL (atau kombinasi INNER 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 atau VACUUM perintah terhadap tampilan materialisasi.

  • Jika tampilan materialisasi menggunakan agregat jumlah atas NULLkolom -mampu dan hanya NULL nilai yang tetap ada di kolom tersebut, nilai agregat hasil tampilan materialisasi adalah nol alih-alih NULL.

  • 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.