Aracılığıyla paylaş


CREATE MATERIALIZED VIEW (işlem hatları)

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. malzemeleşmiş görünümler bir işlem hattı tarafından desteklenir. Gerçekleştirilmiş görünüm her güncelleştirildiğinde, sorgu sonuçları yukarı akış veri kümelerindeki değişiklikleri yansıtacak şekilde yeniden hesaplanır. Gerçekleştirilmiş görünümleri el ile veya bir zamanlamaya göre güncelleştirebilirsiniz.

Güncelleştirmeleri gerçekleştirme veya zamanlama hakkında daha fazla bilgi edinmek için bkz. İşlem hattı güncelleştirmesi çalıştırma.

Sözdizimi

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 } } [...]

Parametreler

  • REFRESH

    Belirtilirse görünümü oluşturur veya var olan bir görünümü ve içeriğini güncelleştirir.

  • ÖZEL

    Özel bir gerçekleştirilmiş görünüm oluşturur. Özel bir gerçekleştirilmiş görünüm, katalogda yayımlanmasını istemediğiniz bir işlem hattı içinde ara tablo olarak yararlı olabilir.

    • Bunlar kataloğa eklenmez ve yalnızca tanımlama işlem hattı içinde erişilebilir
    • Katalogdaki mevcut bir nesneyle aynı ada sahip olabilirler. İşlem hattı içinde, özel bir gerçekleştirilmiş görünüm ve katalogdaki bir nesne aynı ada sahipse, ada yapılan başvurular özel gerçekleştirilmiş görünüme çözümlenir.
    • Özel gerçekleştirilmiş görünümler, yalnızca tek bir güncelleme değil, işlem hattının tüm ömrü boyunca kalıcı hale getirilir.

    Özel gerçekleştirilmiş görünümler daha önce şu TEMPORARY parametresiyle oluşturulmuştur.

  • view_name

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

    Özel malzemeleşmiş görünümler, katalogda yayımlanan bir nesneyle aynı ada sahip olabilir.

  • 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 tanımlayan isteğe bağlı STRING sabit değeri. Bu seçenek ile column_typebirlikte belirtilmelidir. Sütun türü belirtilmezse, sütun açıklaması atlanır.

    • column_constraint

      Tabloya akan verileri doğrulayan bir kısıtlama ekler. bkz. İşlem hattı beklentileriyle veri kalitesini yönetme.

    • Maske yan tümcesi

      Önemli

      Bu özellik Genel Önizleme aşamasındadır.

      Hassas verileri anonim hale getirmek için bir sütun maskesi işlevi ekler. Bkz. Satır filtreleri ve sütun maskeleri.

  • tablo_kısıtlaması

    Önemli

    Bu özellik Genel Önizleme aşamasındadır.

    Şema belirtirken birincil ve yabancı anahtarlar tanımlayabilirsiniz. Kısıtlamalar bilgilendirme amaçlıdır ve uygulanmaz. SQL dil referansındaki CONSTRAINT maddesi'yi inceleyin.

    Uyarı

    Tablo kısıtlamalarını tanımlamak için işlem hattınızın Unity Kataloğu özellikli bir işlem hattı olması gerekir.

  • view_clauses

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

    • DELTA KULLANMA

      Veri biçimini belirtir. Tek seçenek DELTA'dır.

      Bu yan tümce isteğe bağlıdır ve varsayılan olarak DELTA'ya ayarlanmıştır.

    • BÖLÜMLERE AYRILDI

      Tablodaki bölümleme için kullanılacak bir veya daha fazla sütunun isteğe bağlı listesi. CLUSTER BY ile birbirini dışlar.

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

    • CLUSTER BY

      Tabloda sıvı kümelemeye olanak tanıyın ve kümeleme anahtarları olarak kullanılacak sütunları tanımlayın. ile CLUSTER BY AUTOotomatik sıvı kümelemeyi kullanın ve Databricks sorgu performansını iyileştirmek için kümeleme anahtarlarını akıllı bir şekilde seçer. PARTITIONED BY ile birbirini dışlar.

      Bkz Tablolar için sıvı kümeleme kullanma.

    • YER

      Tablo verileri için isteğe bağlı bir depolama konumu. Ayarlanmadığı takdirde, sistem otomatik olarak varsayılan olarak işlem hattı depolama konumunu kullanır.

      Bu seçenek yalnızca Hive meta veri deposunda yayımlanırken kullanılabilir. Unity Kataloğu'nda konum otomatik olarak yönetilir.

    • YORUM

      Tablo için isteğe bağlı bir açıklama.

    • TBLPROPERTIES

      Tablo için isteğe bağlı tablo özellikleri listesi.

    • İLE ROW FILTER

    Önemli

    Bu özellik Genel Önizleme aşamasındadır.

    Tabloya bir satır filtresi işlevi ekler. Bu tablo için gelecekteki sorgular, işlevin TRUE olarak değerlendirildiği satırların bir alt kümesini alır. Bu, işlevin belirli satırları filtreleyip filtrelememeye karar vermek için çağıran kullanıcının kimlik ve grup üyeliklerini incelemesine izin verdiğinden, ayrıntılı erişim denetimi için kullanışlıdır.

    Bkz: ROW FILTER yan tümcesi.

  • sorgu

    Tablo için veri kümesini tanımlayan sorgu.

Gerekli izinler

İşlem hattı için çalıştırma kullanıcısının aşağıdaki izinlere sahip olması gerekmektedir.

  • SELECT maddileştirilmiş görünüm tarafından referans verilen temel tablolar üzerinde ayrıcalık.
  • Üst katalogda USE CATALOG ayrıcalığı ve üst şemadaki USE SCHEMA ayrıcalığı.
  • CREATE MATERIALIZED VIEW maddileştirilmiş görünüm için şema üzerinde ayrıcalık.

Bir kullanıcının malzeme edilmiş görünümün tanımlandığı işlem hattını güncelleyebilmesi için bunlar gereklidir:

  • Üst katalogda USE CATALOG ayrıcalığı ve üst şemadaki USE SCHEMA ayrıcalığı.
  • Gerçekleştirilmiş görünümde gerçekleştirilmiş görünümün veya REFRESH ayrıcalığın sahipliği.
  • Gerçekleştirilmiş görünüm tarafından referans alınan temel tablolar üzerinde, gerçekleştirilmiş görünümün sahibinin ayrıcalığı olmalıdır.

Bir kullanıcının elde edilen gerçekleştirilmiş görünümü sorgulayabilmesi için gerekli olanlar şunlardır:

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

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.
  • Tabloyu yeniden adlandırmak veya sahibini değiştirmek desteklenmemektedir.
  • Oluşturulan sütunlar, kimlik sütunları ve varsayılan sütunlar desteklenmez.

Örnekler

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