Bagikan melalui


CREATE MATERIALIZED VIEW (saluran)

Tampilan termaterialisasi adalah tampilan di mana hasil yang telah dikomputasi tersedia untuk query dan dapat diperbarui untuk mencerminkan perubahan dalam input. tampilan terwujud didukung oleh rangkaian proses. Setiap kali tampilan materialisasi diperbarui, hasil kueri dihitung ulang untuk mencerminkan perubahan dalam himpunan data hulu. Anda dapat memperbarui tampilan materialisasi secara manual atau sesuai jadwal.

Untuk mempelajari selengkapnya tentang cara melakukan atau menjadwalkan pembaruan, lihat Menjalankan pembaruan alur.

Syntax

CREATE [OR REFRESH] [PRIVATE] MATERIALIZED VIEW
  view_name
  [ column_list ]
  [ view_clauses ]
  AS query

column_list
   ( { column_name column_type column_properties } [, ...]
    [ column_constraint ] [, ...]
    [ , table_constraint ] [...] )

   column_properties
      { NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]

view_clauses
  { USING DELTA |
    PARTITIONED BY (col [, ...]) |
    CLUSTER BY clause |
    LOCATION path |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    WITH { ROW FILTER clause } } [...]

Parameter-parameternya

  • REFRESH

    Jika ditentukan, akan membuat tampilan, atau memperbarui tampilan yang sudah ada dan kontennya.

  • SWASTA

    Membuat tampilan terwujud privat. Tampilan materialisasi privat dapat berguna sebagai tabel perantara dalam alur yang tidak ingin Anda terbitkan ke katalog.

    • Mereka tidak ditambahkan ke katalog dan hanya dapat diakses dalam alur yang menentukan
    • Mereka dapat memiliki nama yang sama dengan objek yang ada di katalog. Dalam alur, jika tampilan materialisasi privat dan objek dalam katalog memiliki nama yang sama, referensi ke nama akan diselesaikan ke tampilan materialisasi privat.
    • Tampilan materialisasi privat hanya bertahan selama masa pakai alur, bukan hanya satu pembaruan.

    Tampilan materialisasi privat sebelumnya dibuat dengan parameter TEMPORARY.

  • view_name

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

    Tampilan materialisasi privat dapat memiliki nama yang sama dengan objek yang diterbitkan dalam katalog.

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

    • column_name

      Nama kolom harus unik dan sesuai dengan kolom output kueri.

    • jenis_kolom

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

    • column_comment

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

    • column_constraint

      Menambahkan batasan yang memvalidasi data saat mengalir ke tabel. Lihat Mengelola kualitas data dengan ekspektasi alur kerja.

    • Klausa MASK

      Penting

      Fitur ini ada di Pratinjau Umum.

      Menambahkan fungsi masker kolom untuk menganonimkan data sensitif. Lihat Filter baris dan masker kolom.

  • pembatasan_tabel

    Penting

    Fitur ini ada di Pratinjau Umum.

    Saat menentukan skema, Anda dapat menentukan kunci primer dan asing. Batasan bersifat informasi dan tidak diberlakukan. Lihat klausa CONSTRAINT dalam referensi bahasa SQL.

    Nota

    Untuk menentukan batasan tabel, alur Anda harus berupa alur yang mendukung Katalog Unity.

  • view_clauses

    Secara opsional tentukan partisi, komentar, dan properti yang ditentukan pengguna untuk tampilan materialisasi. Setiap sub klausul hanya dapat ditentukan satu kali.

    • MENGGUNAKAN DELTA

      Menetapkan format data. Satu-satunya opsi adalah DELTA.

      Klausa ini bersifat opsional, dan secara default menjadi DELTA.

    • DISEGMENKAN OLEH

      Daftar opsional dari satu atau beberapa kolom yang akan digunakan untuk pemartisian dalam tabel. Bersifat saling eksklusif dengan CLUSTER BY.

      Pengklusteran cairan memberikan solusi yang fleksibel dan dioptimalkan untuk pengklusteran. Pertimbangkan menggunakan CLUSTER BY alih-alih PARTITIONED BY untuk pipeline.

    • CLUSTER BY

      Aktifkan pengklusteran cair pada tabel dan tentukan kolom yang akan digunakan sebagai kunci pengklusteran. Gunakan pengklusteran cairan otomatis dengan CLUSTER BY AUTO, dan Databricks dengan cerdas memilih kunci pengklusteran untuk mengoptimalkan performa kueri. Bersifat saling eksklusif dengan PARTITIONED BY.

      Lihat Menggunakan pengklusteran cair untuk tabel.

    • LOKASI

      Lokasi penyimpanan opsional untuk data tabel. Jika tidak diatur, sistem akan menggunakan lokasi penyimpanan pipeline secara default.

      Opsi ini hanya tersedia saat menerbitkan ke Hive metastore. Di Katalog Unity, lokasi dikelola secara otomatis.

    • KOMENTAR

      Deskripsi opsional untuk tabel.

    • TBLPROPERTIES

      Daftar properti tabel opsional untuk tabel.

    • DENGAN ROW FILTER

    Penting

    Fitur ini ada di Pratinjau Umum.

    Menambahkan fungsi filter baris ke tabel. Kueri di masa mendatang untuk tabel tersebut akan mendapatkan bagian dari baris-baris yang fungsinya bernilai BENAR. Ini berguna untuk kontrol akses terperintah, karena memungkinkan fungsi untuk memeriksa identitas dan keanggotaan grup pengguna yang memanggil untuk memutuskan apakah akan memfilter baris tertentu.

    Lihat klausa ROW FILTER.

  • kueri

    Kueri yang menentukan himpunan data untuk tabel.

Memerlukan izin

Pengguna 'run-as' untuk pipeline harus memiliki izin berikut:

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

Agar pengguna dapat memperbarui pipeline tempat tampilan materialisasi didefinisikan, mereka memerlukan:

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

Agar pengguna dapat mengkueri tampilan materialisasi yang dihasilkan, mereka memerlukan:

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

Keterbatasan

  • 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 terwujud tidak mendukung kolom identitas atau kunci pengganti.
  • Tampilan materialisasi tidak mendukung perintah OPTIMIZE dan VACUUM. Pemeliharaan terjadi secara otomatis.
  • Mengganti nama tabel atau mengubah pemilik tidak didukung.
  • Kolom yang dihasilkan, kolom identitas, dan kolom default tidak didukung.

Examples

-- Create a materialized view by reading from an external data source, using the default schema:
CREATE OR REFRESH MATERIALIZED VIEW taxi_raw
AS SELECT * FROM read_files("/databricks-datasets/nyctaxi/sample/json/")

-- Create a materialized view by reading from a dataset defined in a pipeline:
CREATE OR REFRESH MATERIALIZED VIEW filtered_data
AS SELECT
  ...
FROM taxi_raw

-- Specify a schema and clustering columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) CLUSTER BY (order_day_of_week, customer_id)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

-- Specify partition columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) PARTITIONED BY (order_day_of_week)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

-- Specify a primary and foreign key constraint for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING NOT NULL PRIMARY KEY,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime)),
  CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES main.default.customers(customer_id)
)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

-- Specify a row filter and mask clause for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales (
  customer_id STRING MASK catalog.schema.customer_id_mask_fn,
  customer_name STRING,
  number_of_line_items STRING COMMENT 'Number of items in the order',
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
)
COMMENT "Raw data on sales"
WITH ROW FILTER catalog.schema.order_number_filter_fn ON (order_number)
AS SELECT * FROM sales_bronze