Aracılığıyla paylaş


CREATE MATERIALIZED VIEW

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL

malzemeleşmiş görünüm, sorgu için önceden hesaplanmış sonuçların kullanılabildiği ve girişteki değişiklikleri yansıtacak şekilde güncellenebildiği bir görünümdür. Gerçekleştirilmiş görünüm her yenilendiğinde, sorgu sonuçları yukarı akış veri kümelerindeki değişiklikleri yansıtacak şekilde yeniden hesaplanır. Gerçekleştirilmiş tüm görünümler bir ETL işlem hattı tarafından desteklenir. Gerçekleştirilmiş görünümleri el ile veya bir zamanlamaya göre yenileyebilirsiniz.

El ile yenileme gerçekleştirme hakkında daha fazla bilgi edinmek için bkz. REFRESH (MATERIALIZED VIEW veya STREAMING TABLE).

Yenileme zamanlama hakkında daha fazla bilgi edinmek için bkz. Örnekler veya ALTER MATERIALIZED VIEW.

Gerçekleştirilmiş görünümler yalnızca Pro veya Sunucusuz SQL ambarı kullanılarak veya işlem hattı içinde oluşturulabilir.

Not

Gerçekleştirilmiş görünümlerde ve akış tablolarında oluşturma ve yenileme işlemleri sunucusuz Lakeflow Bildirimli İşlem Hatları ile desteklenir. Kullanıcı arabirimindeki yedekleme işlem hatları hakkındaki ayrıntıları görüntülemek için Katalog Gezgini'ni kullanabilirsiniz. Bkz. Katalog Gezgini nedir?.

Sözdizimi

{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
  view_name
  [ column_list ]
  [ view_clauses ]
  [schedule_clause]
  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 |
    TBLPROPERTIES clause |
    SCHEDULE [ REFRESH ] schedule_clause |
    WITH { ROW FILTER clause } } [...]

schedule_clause
  { EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
    CRON cron_string [ AT TIME ZONE timezone_id ] }

Parametreler

  • DEĞİŞTİR

    Belirtilirse, görünümü ve zaten varsa içeriğini değiştirir.

  • EĞER YOKSA

    Görünüm mevcut değilse oluşturur. Bu adla bir görünüm zaten varsa, CREATE MATERIALIZED VIEW deyimi yoksayılır.

    En fazla birini belirtmek üzere IF NOT EXISTS veya OR REPLACE seçeneklerinden birini belirtebilirsiniz.

  • view_name

    Yeni oluşturulan görünümün adı. Tam nitelikli görünüm adı benzersiz olmalıdır.

  • column_list

    İsteğe bağlı olarak, görünümün sorgu sonucundaki sütunları etiketler. Bir sütun listesi belirtirseniz, sütun diğer adlarının sayısı, sorgudaki ifade sayısıyla uygun olmalıdır. Sütun listesi belirtilmediğinde, takma adlar görünümün gövdesinden türetilir.

    • sütun_adı

      Sütun adları benzersiz olmalı ve sorgunun çıkış sütunlarıyla eşlenmelidir.

    • sütun_türü

      Sütunun veri türünü belirtir. Malzemeleşmiş görünümler, Azure Databricks tarafından desteklenen tüm veri türlerini desteklemez.

    • column_comment

      Sütunu açıklayan isteğe bağlı bir STRING sabit değer. Bu seçenek ile column_typebirlikte belirtilmelidir. Sütun türü belirtilmezse, sütun açıklaması atlanır.

    • column_constraint

      Maddileştirilmiş görünümdeki bir sütuna bilgilendirici birincil anahtar veya bilgilendirici yabancı anahtar kısıtlaması ekler. Sütun türü belirtilmezse, sütun kısıtlaması atlanır.

    • MASK yan tümcesi

      Önemli

      Bu özellik Genel Önizlemededir.

      Hassas verileri anonim hale getirmek için bir sütun maskesi işlevi ekler. Bu sütundaki sonraki tüm sorgular, sütunun özgün değeri yerine bu işlevi sütun üzerinde değerlendirmenin sonucunu alır. Bu, işlevin, kullanıcı kimliğini ya da grup üyeliklerini inceleyerek değeri gizleyip gizlemeyeceğini belirleyebileceği ince detaylı erişim kontrolü amaçları için faydalı olabilir. Sütun türü belirtilmezse, sütun maskesi geçilir.

  • tablo_kısıtlaması

    Gerçekleştirilmiş görünümdeki tabloya bir bilgilendirici birincil anahtar veya bilgilendirici yabancı anahtar kısıtlaması ekler. Sütun türü belirtilmezse, tabloya yönelik kısıtlama atlanır.

  • view_clauses

    İsteğe bağlı olarak bölümleme, açıklamalar, kullanıcı tanımlı özellikler ve yeni gerçekleştirilmiş görünüm için yenileme zamanlaması belirtin. Her alt yan tümce yalnızca bir kez belirtilebilir.

    • BÖLÜMLENDİ

      Tabloyu bölümleme ölçütü olarak tablo sütunlarının isteğe bağlı listesi.

      Not

      Sıvı kümeleme, kümeleme için esnek, iyileştirilmiş bir çözüm sağlar. Gerçekleştirilmiş görünümler için CLUSTER BY yerine PARTITIONED BY kullanmayı göz önünde bulundurun.

    • CLUSTER BY

      Sütunların bir alt kümesine göre kümeleme yapması için isteğe bağlı bir ifade. Sıvı kümeleme hakkında daha fazla bilgi için bkz. Tablolar için sıvı kümeleme kullanma.

      Delta Lake sıvı kümeleme ile PARTITIONED BY birleştirilemez.

    • YORUM yorumu_gör

      Tabloyu tanımlamak için bir STRING literali.

    • TBLPROPERTIES

      İsteğe bağlı olarak bir veya daha fazla kullanıcı tanımlı özellik ayarlar.

      Bu deyimi çalıştırmak için kullanılan Lakeflow Bildirimli İşlem Hatları çalışma zamanı kanalını belirtmek için bu ayarı kullanın. pipelines.channel özelliğinin değerini "PREVIEW" veya "CURRENT"olarak ayarlayın. Varsayılan değer şudur: "CURRENT". Lakeflow Bildirimli İşlem Hatları kanalları hakkında daha fazla bilgi için bkz. Lakeflow Bildirimli İşlem Hatları çalışma zamanı kanalları.

    • TAKVİM [ REFRESH ] takvim_maddesi

      • EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }

        Düzenli aralıklarla gerçekleşen bir yenileme zamanlamak için EVERY söz dizimini kullanın. EVERY söz dizimi belirtilirse, akış tablosu veya gerçekleştirilmiş görünüm, sağlanan değere göre belirli aralıklarla güncellenir; örneğin, HOUR, HOURS, DAY, DAYS, WEEKveya WEEKS. Aşağıdaki tabloda, numberiçin kabul edilen tamsayı değerleri listelenmiştir.

        Zaman birimi Tamsayı değeri
        HOUR or HOURS 1 <= H <= 72
        DAY or DAYS 1 <= D <= 31
        WEEK or WEEKS 1 <= W <= 8

        Not

        Dahil edilen zaman biriminin tekil ve çoğul biçimleri sematik olarak eşdeğerdir.

      • CRON cron_string [ AT TIME ZONE timezone_id ]

        quartz cron değeri kullanarak bir yenileme zamanlamak için. Geçerli time_zone_values kabul edilir. AT TIME ZONE LOCAL desteklenmez.

        AT TIME ZONE yoksa, oturum zaman dilimi kullanılır. AT TIME ZONE yoksa ve oturum saat dilimi ayarlanmadıysa bir hata oluşur. SCHEDULE , ile eşanlamlı olarak eşdeğerdir SCHEDULE REFRESH.

    • ROW FILTER yan tümcesiyle

      Önemli

      Bu özellik Genel Önizlemededir.

      Tabloya bir satır filtresi işlevi ekler. Bu tablodan sonraki tüm sorgular, işlevin TRUE değerini değerlendirdiği satırların bir alt kümesini alır. Bu, işlevin belirli satırları filtreleyip filtrelemeyeceğini belirlemek için çağıran kullanıcının kimlik veya grup üyeliklerini incelediği ayrıntılı erişim denetimi amaçları için yararlı olabilir.

  • AS sorgusu

    Görünümü temel tablolardan veya diğer görünümlerden oluşturan sorgu.

Gerekli izinler

Gerçekleştirilmiş görünüm (MV) oluşturan kullanıcı MV sahibidir ve aşağıdaki izinlere sahip olmalıdır:

  • MV'nin başvurduğu temel tablolar üzerinde SELECT ayrıcalığı.
  • Üst katalogda USE CATALOG ayrıcalığı ve üst şemadaki USE SCHEMA ayrıcalığı.
  • MV için şema üzerindeki CREATE MATERIALIZED VIEW ayrıcalığı.

Bir kullanıcının MV'yi yenileyebilmesi için şunlar gerekir:

  • Üst katalogda USE CATALOG ayrıcalığı ve üst şemadaki USE SCHEMA ayrıcalığı.
  • MV'nin sahipliği veya REFRESH MV üzerindeki ayrıcalık.
  • MV'nin sahibi, MV tarafından referans verilen temel tablolarda SELECT ayrıcalığına sahip olmalıdır.

Bir kullanıcının MV'yi sorgulayabilmesi için şunlar gerekir:

  • Üst katalogda USE CATALOG ayrıcalığı ve üst şemadaki USE SCHEMA ayrıcalığı.
  • SELECT gerçekleştirilmiş görünüm üzerinde ayrıcalık.

Satır filtreleri ve sütun maskeleri

Önemli

Bu özellik Genel Önizlemededir.

Satır filtreleri, tablo taraması satırları her getirdiğinde filtre olarak uygulanan bir işlev belirtmenize olanak tanır. Bu filtreler, izleyen sorguların yalnızca filtre koşulunun true olarak değerlendirildiği satırları döndürmesini sağlar.

Sütun maskeleri, tablo taraması satırları her getirdiğinizde sütunun değerlerini maskelemenizi sağlar. Bu sütunu içeren gelecekteki tüm sorgular, işlevi sütun üzerinde değerlendirerek sütunun özgün değerini değiştirmenin sonucunu alır.

Satır filtrelerini ve sütun maskelerini kullanma hakkında daha fazla bilgi için bkz. Satır filtrelerini ve sütun maskelerini kullanarak hassas tablo verilerini filtreleme.

Satır Filtrelerini ve Sütun Maskelerini Yönetme

Gerçekleştirilmiş görünümlerdeki satır filtreleri ve sütun maskeleri CREATE deyimi aracılığıyla eklenmelidir.

Davranış

  • Tanımlayıcı Yetkisiyle Yenile: REFRESH MATERIALIZED VIEW deyimi bir maddi görünümü yenilediğinde, satır filtreleme işlevleri tanımlayıcının (tablo sahibi olarak) haklarıyla çalışır. Bu, tablo yenilemesinin materyalize görünümü oluşturan kullanıcının güvenlik bağlamını kullandığı anlamına gelir.
  • Sorgu: Çoğu filtre, tanımlayıcının haklarıyla çalıştırılırken, kullanıcı bağlamını (ve CURRENT_USERgibiIS_MEMBER) denetleen işlevler özel durumlardır. Bu işlevler çağıran kimliğiyle çalışır. Bu yaklaşım, geçerli kullanıcının bağlamını temel alarak kullanıcıya özgü veri güvenliği ve erişim denetimlerini zorunlu kılıp uygular.
  • Satır filtreleri ve sütun maskeleri içeren kaynak tablolar üzerinde gerçekleştirilmiş görünümler oluştururken, gerçekleştirilmiş görünümün yenilenmesi her zaman tam bir yenilemedir. Tam yenileme, kaynakta bulunan tüm verileri en son tanımlarla yeniden işler. Bu, kaynak tablolardaki güvenlik ilkelerinin en güncel veri ve tanımlarla değerlendirilip uygulanmasını sağlar.

Gözlemlenebilirlik

Belirli bir gerçekleştirilmiş görünüme uygulanan mevcut satır filtrelerini ve sütun maskelerini incelemek için DESCRIBE EXTENDED, INFORMATION_SCHEMAveya Katalog Gezgini'ni kullanın. Bu işlevsellik, kullanıcıların gerçekleştirilmiş görünümlerde veri erişimi ve koruma önlemlerini denetlemesine ve gözden geçirmesine olanak tanır.

Sınırlamalar

  • NULL niteliğine sahip bir sütun üzerinde sum toplama işlemi içeren bir gerçekleştirilmiş görünümde, bu sütundan kaldırılan son NULL olmayan değer çıkarıldığında ve bu sütunda yalnızca NULL değerler kaldığında, gerçekleştirilmiş görünümün elde edilen toplam değeri, NULL yerine sıfır döndürür.
  • Sütun referansı için takma ad gerekmez. Sütun olmayan başvuru ifadeleri, aşağıdaki örnekte olduğu gibi bir takma ad gerektirir.
    • Izin verilen: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • İzin Verilmiyor: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • Geçerli bir deyim olması için NOT NULL ile birlikte PRIMARY KEY manuel olarak belirtilmelidir.
  • Gerçekleştirilmiş görünümler kimlik sütunlarını veya vekil anahtarları desteklemez.
  • Gerçekleştirilmiş görünümler OPTIMIZE ve VACUUM komutlarını desteklemez. Bakım otomatik olarak gerçekleşir.
  • Gerçekleştirilmiş görünümler, veri kalitesi kısıtlamalarını tanımlama beklentilerini desteklemez.

Örnekler

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