Bagikan melalui


CREATE MATERIALIZED VIEW

Berlaku untuk: centang ditandai ya Databricks SQL

Tampilan materialisasi adalah tampilan di mana hasil yang telah dikomputasi tersedia untuk kueri 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 DLT. Anda dapat me-refresh tampilan materialisasi secara manual atau sesuai jadwal.

Untuk mempelajari selengkapnya tentang cara melakukan refresh manual, lihat REFRESH (TAMPILAN MATERIALISASI atau TABEL STREAMING).

Untuk mempelajari selengkapnya tentang cara menjadwalkan refresh, lihat Contoh atau UBAH TAMPILAN MATERIALISASI.

Catatan

Operasi buat dan refresh pada tampilan materialisasi dan tabel streaming didukung oleh alur Tabel Langsung Delta 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 [, ...]) |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    SCHEDULE [ REFRESH ] CRON cron_string [ AT TIME ZONE timezone_id ] |
    WITH { ROW FILTER clause } } [...]

Parameter

  • REPLACE

    Jika ditentukan, mengganti tampilan dan kontennya jika sudah ada.

  • IF NOT EXISTS

    Membuat tampilan jika tidak ada. Jika tampilan dengan nama ini sudah ada, CREATE MATERIALIZED VIEW pernyataan diabaikan.

    Anda dapat menentukan paling banyak salah satu IF NOT EXISTS atau OR REPLACE.

  • view_name

    Nama tampilan yang baru dibuat. Nama tampilan yang sepenuhnya memenuhi syarat harus unik.

  • column_list

    Secara opsional, beri label pada kolom dalam hasil kueri tampilan. Jika Anda memberikan daftar kolom, jumlah alias kolom harus sesuai dengan jumlah ekspresi dalam kueri. Jika tidak ada daftar kolom yang ditentukan, alias berasal dari isi tampilan.

    • column_name

      Nama kolom harus unik dan dipetakan ke kolom output kueri.

    • column_type

      Menentukan jenis data kolom. Tidak semua jenis data yang didukung oleh Azure Databricks didukung oleh tampilan materialisasi.

    • column_comment

      Literal opsional STRING yang menjelaskan nama kolom. Opsi ini harus ditentukan bersama dengan column_type. Jika jenis kolom tidak ditentukan, komentar kolom akan dilewati.

    • column_constraint

      Menambahkan kunci primer informasi atau batasan kunci asing informasi ke kolom dalam tampilan materialisasi. Jika jenis kolom tidak ditentukan, batasan kolom akan dilewati.

    • Klausa MASK

      Penting

      Fitur ini ada di Pratinjau Publik.

      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 terperindas di mana fungsi dapat memeriksa identitas atau keanggotaan grup pengguna yang memanggil untuk menentukan apakah akan meredakan nilai. Jika jenis kolom tidak ditentukan, masker kolom akan dilewati.

  • table_constraint

    Menambahkan kunci primer informasi atau batasan kunci asing informasi ke 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.

    • DIPARTISI OLEH

      Daftar kolom tabel opsional untuk mempartisi tabel.

    • view_comment KOMENTAR

      Harfiah STRING untuk menggambarkan tabel.

    • TBLPROPERTIES

      Secara opsional, atur satu atau beberapa properti yang ditentukan pengguna.

    • SCHEDULE [ REFRESH ] CRON cron_string [ AT TIME ZONE timezone_id ]

      Jika disediakan, menjadwalkan tabel streaming atau tampilan materialisasi untuk me-refresh datanya dengan jadwal cron kuarsa yang diberikan. Hanya time_zone_values yang diterima. AT TIME ZONE LOCAL tidak didukung. Jika AT TIME ZONE tidak ada, zona waktu sesi digunakan. Jika AT TIME ZONE tidak ada dan zona waktu sesi tidak diatur, kesalahan akan muncul. SCHEDULE secara semantik setara SCHEDULE REFRESHdengan .

    • DENGAN klausa FILTER BARIS

      Penting

      Fitur ini ada di Pratinjau Publik.

      Menambahkan fungsi filter baris ke tabel. Semua kueri berikutnya dari tabel tersebut menerima subset baris yang dievaluasi fungsinya ke 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:

  • SELECT hak istimewa atas tabel dasar yang dirujuk oleh MV.
  • USE CATALOG hak istimewa pada katalog induk dan USE SCHEMA hak istimewa pada skema induk.
  • CREATE MATERIALIZED VIEW hak istimewa pada skema untuk MV.

Agar pengguna dapat me-refresh MV, mereka memerlukan:

  • USE CATALOG hak istimewa pada katalog induk dan USE SCHEMA hak istimewa pada skema induk.
  • Kepemilikan MV atau REFRESH hak istimewa pada MV.
  • Pemilik MV harus memiliki SELECT hak istimewa atas tabel dasar yang dirujuk oleh MV.

Agar pengguna dapat mengkueri MV, mereka memerlukan:

  • USE CATALOG hak istimewa pada katalog induk dan USE SCHEMA hak istimewa pada skema induk.
  • SELECT hak istimewa atas tampilan materialisasi.

Filter baris dan masker kolom

Penting

Fitur ini ada di Pratinjau Publik.

Filter baris memungkinkan Anda menentukan fungsi yang berlaku sebagai filter setiap kali pemindaian tabel mengambil baris. Filter ini memastikan bahwa kueri berikutnya hanya mengembalikan baris yang predikat filternya dievaluasi ke true.

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 Memfilter data tabel sensitif menggunakan filter baris dan masker kolom.

Mengelola Filter Baris dan Masker Kolom

Filter baris dan masker kolom pada tampilan materialisasi harus ditambahkan melalui CREATE pernyataan.

Perilaku

  • Refresh sebagai Pendefinisi: Saat REFRESH MATERIALIZED VIEW pernyataan me-refresh tampilan materialisasi, 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_USER dan IS_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 data dan definisi terbaru.

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 sum melalui kolom berkemampuan NULL memiliki nilai non-NULL terakhir yang dihapus dari kolom tersebut - dan dengan demikian hanya NULL nilai yang tetap ada di kolom tersebut - nilai agregat hasil tampilan materialisasi mengembalikan nol alih-alih NULL.
  • 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
  • NOT NULL harus ditentukan secara manual bersama dengan PRIMARY KEY agar menjadi pernyataan yang valid.
  • Tampilan materialisasi tidak mendukung kolom identitas atau kunci pengganti.
  • Tampilan materialisasi tidak mendukung OPTIMIZE dan VACUUM perintah. 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 daily at midnight.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
  COMMENT 'Daily sales numbers'
  SCHEDULE CRON '0 0 0 * * ? *'
  AS SELECT date AS date, sum(sales) AS sumOfSales
       FROM table1
       GROUP BY date;

-- 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;