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
Tampilan termaterialisasi adalah tampilan di mana hasil yang telah dikomputasi tersedia untuk query dan dapat diperbarui untuk mencerminkan perubahan dalam input. Setiap kali tampilan materialisasi di-refresh, hasil kueri dihitung ulang untuk mencerminkan perubahan dalam himpunan data hulu. Semua tampilan materialisasi didukung oleh alur ETL. Anda dapat me-refresh tampilan materialisasi secara manual atau sesuai jadwal.
Untuk mempelajari selengkapnya tentang cara melakukan refresh manual, lihat REFRESH (MATERIALIZED VIEW atau STREAMING TABLE).
Untuk mempelajari selengkapnya tentang cara menjadwalkan refresh, lihat contoh atau ALTER MATERIALIZED VIEW.
Tampilan materialisasi hanya dapat dibuat menggunakan gudang SQL Pro atau Serverless, atau dalam pipeline.
Catatan
Operasi buat dan refresh pada tampilan materialisasi dan tabel streaming didukung oleh Alur Deklaratif Lakeflow Spark tanpa server. Anda dapat menggunakan Catalog Explorer untuk melihat detail tentang alur backing di UI. Lihat Apa itu Catalog Explorer?.
Sintaks
{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
view_name
[ column_list ]
[ view_clauses ]
AS query
column_list
( { column_name column_type column_properties } [, ...]
[ , table_constraint ] [...])
column_properties
{ NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]
view_clauses
{ PARTITIONED BY (col [, ...]) |
CLUSTER BY clause |
COMMENT view_comment |
DEFAULT COLLATION UTF8_BINARY |
TBLPROPERTIES clause |
SCHEDULE [ REFRESH ] schedule_clause |
schedule |
WITH { ROW FILTER clause } } [...]
schedule
{ SCHEDULE [ REFRESH ] schedule_clause |
TRIGGER ON UPDATE [ AT MOST EVERY trigger_interval ] }
schedule_clause
{ EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
CRON cron_string [ AT TIME ZONE timezone_id ] }
Parameter
MENGGANTI
Jika ditentukan, mengganti tampilan dan kontennya jika sudah ada.
JIKA TIDAK ADA
Membuat tampilan (view) jika belum ada. Jika tampilan dengan nama ini sudah ada,
CREATE MATERIALIZED VIEWakan diabaikan.Anda dapat menentukan paling banyak salah satu
IF NOT EXISTSatauOR REPLACE.-
Nama tampilan yang baru dibuat. Nama tampilan yang sepenuhnya memenuhi syarat harus unik.
column_list
Secara opsional memberi label kolom dalam hasil kueri tampilan. Jika Anda menyediakan daftar kolom, jumlah alias kolom harus cocok dengan jumlah ekspresi dalam kueri. Jika tidak ada daftar kolom yang ditentukan, alias berasal dari isi tampilan.
-
Nama kolom harus unik dan dipetakan ke kolom output kueri.
jenis_kolom
Menentukan jenis data kolom. Tidak semua jenis data yang didukung Azure Databricks didukung oleh tampilan materialisasi.
column_comment
STRINGopsional yang menjelaskan kolom. Opsi ini harus ditentukan bersama dengancolumn_type. Jika jenis kolom tidak ditentukan, komentar kolom akan dilewati.column_constraint
Menambahkan batasan kunci primer atau kunci asing informasional ke kolom dalam tampilan materialis. Jika jenis kolom tidak ditentukan, batasan kolom akan dilewati.
-
Menambahkan fungsi masker kolom untuk menganonimkan data sensitif. Semua kueri berikutnya dari kolom tersebut menerima hasil evaluasi fungsi tersebut di atas kolom sebagai pengganti nilai asli kolom. Ini dapat berguna untuk tujuan kontrol akses terperinci di mana fungsi dapat memeriksa identitas atau keanggotaan grup pengguna yang memanggil untuk menentukan apakah akan menyunting nilai tersebut. Jika jenis kolom tidak ditentukan, masker kolom akan diabaikan.
-
pembatasan_tabel
Menambahkan kunci primer informasional atau pembatasan kunci asing informasional pada tabel dalam tampilan materialisasi. Jika jenis kolom tidak ditentukan, batasan tabel dilewati.
view_clauses
Secara opsional tentukan partisi, komentar, properti yang ditentukan pengguna, dan jadwal refresh untuk tampilan materialisasi baru. Setiap sub klausul hanya dapat ditentukan satu kali.
-
Daftar kolom tabel opsional untuk mempartisi tabel.
Catatan
Pengklusteran cairan memberikan solusi yang fleksibel dan dioptimalkan untuk pengklusteran. Pertimbangkan untuk menggunakan
CLUSTER BYalih-alihPARTITIONED BYuntuk tampilan materialisasi. -
Klausa opsional untuk kluster menurut subset kolom. Gunakan pengklusteran cairan otomatis dengan
CLUSTER BY AUTO, dan Databricks dengan cerdas memilih kunci pengklusteran untuk mengoptimalkan performa kueri. Lihat Menggunakan pengklusteran cair untuk tabel.Pengklusteran cairan tidak dapat dikombinasikan dengan
PARTITIONED BY. KOMENTAR view_comment
STRINGharfiah untuk menggambarkan tabel.UTF8_BINARY KOLABASI DEFAULT
Berlaku untuk:
pemeriksaan Databricks SQL
Databricks Runtime 17.1 ke atasMemaksa kolasi default dari tampilan terwujud ke
UTF8_BINARY. Klausa ini wajib jika skema tempat tampilan dibuat memiliki kolaborasi default selainUTF8_BINARY. Kolase default tampilan materialisasi digunakan sebagai kolase default dalam isi tampilan.-
Secara opsional, atur satu atau beberapa properti yang ditentukan pengguna.
Gunakan pengaturan ini untuk menentukan saluran runtime Alur Deklaratif Lakeflow Spark yang digunakan untuk menjalankan pernyataan berikut. Atur nilai properti
pipelines.channelke"PREVIEW"atau"CURRENT". Nilai defaultnya adalah"CURRENT". Untuk informasi selengkapnya tentang saluran Alur Deklaratif Lakeflow Spark, lihat saluran waktu proses Alur Deklaratif Lakeflow Spark. jadwal
Jadwal dapat berupa
SCHEDULEpernyataan atauTRIGGERpernyataan.JADWAL [ REFRESH ] klausa_jadwal
EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }Untuk menjadwalkan refresh yang terjadi secara berkala, gunakan sintaks
EVERY. Jika sintaksEVERYditentukan, tabel streaming atau tampilan materialisasi di-refresh secara berkala pada interval yang ditentukan berdasarkan nilai yang disediakan, sepertiHOUR,HOURS,DAY,DAYS,WEEK, atauWEEKS. Tabel berikut ini mencantumkan nilai bilangan bulat yang diterima untuknumber.Unit waktu Nilai bilangan bulat HOUR or HOURS1 <= H <= 72 DAY or DAYS1 <= D <= 31 WEEK or WEEKS1 <= W <= 8 Catatan
Bentuk tunggal dan jamak dari unit waktu yang disertakan setara secara semantik.
CRON cron_string [ AT TIME ZONE timezone_id ]Untuk menjadwalkan refresh menggunakan nilai quartz cron. time_zone_values yang valid diterima.
AT TIME ZONE LOCALtidak didukung.Jika
AT TIME ZONEtidak ada, zona waktu sesi digunakan. JikaAT TIME ZONEtidak ada dan zona waktu sesi tidak diatur, kesalahan akan muncul.SCHEDULEsecara semantik setaraSCHEDULE REFRESHdengan .
PEMICU PADA UPDATE [ PALING BANYAK SETIAP trigger_interval ]
Penting
Fitur ini
TRIGGER ON UPDATEada di Beta.Secara opsional atur tabel untuk di-refresh saat sumber data upstream diperbarui, paling banyak sekali setiap menit. Tetapkan nilai untuk
AT MOST EVERYmemerlukan setidaknya waktu minimum antara refresh.Sumber data upstream harus berupa tabel Delta eksternal atau terkelola (termasuk tampilan materialisasi atau tabel streaming), atau tampilan terkelola yang dependensinya terbatas pada jenis tabel yang didukung.
Mengaktifkan peristiwa file dapat membuat pemicu lebih berkinerja, dan meningkatkan beberapa batasan pada pembaruan pemicu.
trigger_intervaladalah pernyataan INTERVAL yang setidaknya 1 menit.TRIGGER ON UPDATEmemiliki batasan berikut- Tidak lebih dari 10 sumber data hulu per tampilan materialisasi saat menggunakan TRIGGER ON UPDATE.
- Maksimum 1000 tabel streaming atau tampilan materialisasi dapat ditentukan dengan TRIGGER ON UPDATE.
- Klausa
AT MOST EVERYdefault ke 1 menit, dan tidak boleh kurang dari 1 menit.
dengan ROW FILTER klausa
Menambahkan fungsi filter baris ke tabel. Semua kueri berikutnya dari tabel tersebut menerima subset baris yang dievaluasi oleh fungsi menjadi boolean TRUE. Ini dapat berguna untuk tujuan kontrol akses menurun di mana fungsi dapat memeriksa identitas atau keanggotaan grup pengguna yang memanggil untuk menentukan apakah akan memfilter baris tertentu.
-
AS kueri
Kueri yang membuat tampilan dari tabel dasar atau tampilan lainnya.
Izin yang diperlukan
Pengguna yang membuat tampilan materialisasi (MV) adalah pemilik MV dan harus memiliki izin berikut:
-
SELECThak istimewa atas tabel dasar yang dirujuk oleh MV. -
USE CATALOGhak istimewa pada katalog induk dan hak istimewaUSE SCHEMApada skema induk. -
CREATE MATERIALIZED VIEWhak akses pada skema untuk MV.
Agar pengguna dapat me-refresh MV, mereka memerlukan:
-
USE CATALOGhak istimewa pada katalog induk dan hak istimewaUSE SCHEMApada skema induk. - Kepemilikan MV atau
REFRESHhak istimewa atas MV. - Pemilik MV harus memiliki hak istimewa
SELECTatas tabel dasar yang dirujuk oleh MV.
Agar pengguna dapat mengkueri MV, mereka memerlukan:
-
USE CATALOGhak istimewa pada katalog induk dan hak istimewaUSE SCHEMApada skema induk. -
SELECThak istimewa atas tampilan materialisasi.
Filter baris dan masker kolom
Filter baris memungkinkan Anda untuk menentukan fungsi yang digunakan sebagai filter setiap kali pemindaian tabel mengambil baris. Filter ini memastikan bahwa kueri berikutnya hanya mengembalikan baris di mana predikat filternya dievaluasi menjadi benar.
Masker kolom memungkinkan Anda menutupi nilai kolom setiap kali pemindaian tabel mengambil baris. Semua kueri di masa mendatang yang melibatkan kolom tersebut akan menerima hasil evaluasi fungsi di atas kolom, menggantikan nilai asli kolom.
Untuk informasi selengkapnya tentang cara menggunakan filter baris dan masker kolom, lihat Filter baris dan masker kolom.
Mengelola Filter Baris dan Masker Kolom
Filter baris dan masker kolom pada tampilan materialisasi harus ditambahkan melalui pernyataan CREATE.
Perilaku
-
Refresh sebagai Pendefinisi: Saat pernyataan
REFRESH MATERIALIZED VIEWmemperbarui tampilan materialized, fungsi filter baris berjalan dengan hak pendefinisi (sebagai pemilik tabel). Ini berarti refresh tabel menggunakan konteks keamanan pengguna yang membuat tampilan materialisasi. -
Kueri: Meskipun sebagian besar filter berjalan dengan hak pendefinisi, fungsi yang memeriksa konteks pengguna (seperti
CURRENT_USERdanIS_MEMBER) adalah pengecualian. Fungsi-fungsi ini berjalan sebagai pemanggil. Pendekatan ini memberlakukan keamanan data dan kontrol akses khusus pengguna berdasarkan konteks pengguna saat ini. - Saat membuat tampilan materialisasi atas tabel sumber yang berisi filter baris dan masker kolom, refresh tampilan materialisasi selalu merupakan refresh penuh. Refresh penuh memproses ulang semua data yang tersedia di sumber dengan definisi terbaru. Ini memastikan bahwa kebijakan keamanan pada tabel sumber dievaluasi dan diterapkan dengan definisi dan data yang paling terkini.
Observabilitas
Gunakan DESCRIBE EXTENDED, INFORMATION_SCHEMA, atau Catalog Explorer untuk memeriksa filter baris dan masker kolom yang ada yang berlaku untuk tampilan materialisasi tertentu. Fungsionalitas ini memungkinkan pengguna untuk mengaudit dan meninjau langkah-langkah akses dan perlindungan data pada tampilan materialisasi.
Batasan
- Saat tampilan terwujud dengan agregat
summelalui kolom berkemampuan NULL memiliki nilai non-NULL terakhir yang dihapus dari kolom tersebut - dan dengan demikian hanyaNULLnilai yang tetap ada di kolom tersebut - nilai agregat hasil tampilan materialisasi mengembalikan nol alih-alihNULL. - Referensi kolom tidak memerlukan alias. Ekspresi referensi non-kolom memerlukan alias, seperti dalam contoh berikut:
- Diperbolehkan:
SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1 - Dilarang:
SELECT col1, SUM(col2) FROM t GROUP BY col1
- Diperbolehkan:
-
NOT NULLharus ditentukan secara manual bersama denganPRIMARY KEYagar menjadi pernyataan yang valid. - Tampilan materialisasi tidak mendukung kolom identitas atau kunci pengganti.
- Tampilan materialisasi tidak mendukung perintah
OPTIMIZEdanVACUUM. Pemeliharaan terjadi secara otomatis. - Tampilan materialisasi tidak mendukung harapan untuk menentukan batasan kualitas data.
Contoh
-- Create a materialized view if it doesn't exist
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create and schedule a materialized view to be refreshed whenever the
-- upstream data is updated
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
TRIGGER ON UPDATE
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create and schedule a materialized view to be refreshed every day.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
COMMENT 'Daily sales numbers'
SCHEDULE EVERY 1 DAY
AS SELECT date AS date, sum(sales) AS sumOfSales
FROM table1
GROUP BY date;
-- Sets the runtime channel to "PREVIEW"
> CREATE MATERIALIZED VIEW mv_preview
TBLPROPERTIES(pipelines.channel = "PREVIEW")
AS SELECT * FROM RANGE(10)
-- Create a materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
member_id int NOT NULL,
full_name string,
movie_title string,
CONSTRAINT movie_pk PRIMARY KEY(member_id)
)
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create or replace the materialized view to remove the table constraint and add a partition
> CREATE OR REPLACE MATERIALIZED VIEW subscribed_movies
PARTITIONED BY (member_id)
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create a materialized view with a row filter and a column mask
> CREATE MATERIALIZED VIEW masked_view (
id int,
name string,
region string,
ssn string MASK catalog.schema.ssn_mask_fn
)
WITH ROW FILTER catalog.schema.us_filter_fn ON (region)
AS SELECT id, name, region, ssn
FROM employees;