Udostępnij za pośrednictwem


CREATE MATERIALIZED VIEW

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL

zmaterializowany widok to widok, w którym są dostępne wstępnie obliczone wyniki dla zapytania i można je zaktualizować, aby odzwierciedlić zmiany w danych wejściowych. Za każdym razem, gdy zmaterializowany widok jest odświeżany, wyniki zapytania są ponownie obliczane w celu odzwierciedlenia zmian w nadrzędnych zestawach danych. Wszystkie zmaterializowane widoki są wspierane przez potok DLT. Widoki zmaterializowane można odświeżyć ręcznie lub zgodnie z harmonogramem.

Aby dowiedzieć się więcej na temat wykonywania odświeżania ręcznego, zobacz REFRESH (MATERIALIZED VIEW lub STREAMING TABLE).

Aby dowiedzieć się więcej o planowaniu odświeżania, zobacz Przykłady lub ALTER MATERIALIZED VIEW.

Zmaterializowane widoki można tworzyć tylko przy użyciu magazynu SQL Pro lub Bezserwerowego albo w potoku Delta Live Tables.

Uwaga

Tworzenie i odświeżanie zmaterializowanych widoków oraz tabel przesyłania strumieniowego jest obsługiwane przez bezserwerowy potok Delta Live Tables. Eksplorator wykazu umożliwia wyświetlanie szczegółowych informacji o potokach tworzenia kopii zapasowych w interfejsie użytkownika. Zobacz Co to jest Eksplorator katalogu?.

Składnia

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

Parametry

  • ZASTĄPIĆ

    Jeśli zostanie określony, zastępuje widok i jego zawartość, jeśli już istnieje.

  • JEŚLI NIE ISTNIEJE

    Tworzy widok, jeśli nie istnieje. Jeśli widok o tej nazwie już istnieje, CREATE MATERIALIZED VIEW instrukcja jest ignorowana.

    Możesz określić co najwyżej jeden z IF NOT EXISTS elementów lub OR REPLACE.

  • view_name

    Nazwa nowo utworzonego widoku. W pełni kwalifikowana nazwa widoku musi być unikatowa.

  • column_list

    Opcjonalnie etykietuje kolumny w rezultatach zapytania widoku. Jeśli podasz listę kolumn, liczba aliasów kolumn musi być zgodna z liczbą wyrażeń w zapytaniu. Jeśli nie określono listy kolumn, aliasy pochodzą z treści widoku.

    • column_name

      Nazwy kolumn muszą być unikatowe i odpowiadać kolumnom wyjściowym zapytania.

    • column_type

      Określa typ danych kolumny. Nie wszystkie typy danych obsługiwane przez usługę Azure Databricks są obsługiwane przez zmaterializowane widoki.

    • column_comment

      Opcjonalny literał STRING opisujący kolumnę. Tę opcję należy określić wraz z column_type. Jeśli typ kolumny nie zostanie określony, komentarz kolumny zostanie pominięty.

    • column_constraint

      Dodaje ograniczenie klucza podstawowego lub klucza obcego o charakterze informacyjnym do kolumny w zmaterializowanym widoku. Jeśli typ kolumny nie zostanie określony, ograniczenie kolumny zostanie pominięte.

    • KLAUZULA MASK

      Ważne

      Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

      Dodaje funkcję maski kolumn do anonimowości poufnych danych. Wszystkie kolejne zapytania z tej kolumny otrzymują wynik oceny tej funkcji w kolumnie zamiast oryginalnej wartości kolumny. Może to być przydatne w celach szczegółowej kontroli dostępu, w których funkcja może sprawdzić tożsamość lub członkostwo w grupach użytkownika wywołującego w celu określenia, czy zredagować wartość. Jeśli typ kolumny nie zostanie określony, maska kolumny zostanie pominięta.

  • table_constraint

    Dodaje ograniczenie klucza głównego informacyjnego lub klucza obcego informacyjnego do tabeli w zmaterializowanym widoku. Jeśli typ kolumny nie zostanie określony, ograniczenie tabeli zostanie pominięte.

  • view_clauses

    Opcjonalnie określ partycjonowanie, komentarze, właściwości zdefiniowane przez użytkownika i harmonogram odświeżania dla nowego zmaterializowanego widoku. Każda klauzula podrzędna może być określona tylko raz.

    • PARTYCJONOWANE PRZEZ

      Opcjonalna lista kolumn, według których tabela jest partycjonowana.

    • VIEW_COMMENT KOMENTARZ

      Literał STRING służący do opisania tabeli.

    • TBLPROPERTIES

      Opcjonalnie ustawia co najmniej jedną właściwość zdefiniowaną przez użytkownika.

      Użyj tego ustawienia, aby określić kanał środowiska uruchomieniowego delta Live Tables używany do uruchamiania tej instrukcji. Ustaw wartość właściwości pipelines.channel na wartość "PREVIEW" lub "CURRENT". Domyślna wartość to "CURRENT". Aby uzyskać więcej informacji na temat kanałów Delta Live Tables, zobacz Delta Live Tables Runtime Channels.

    • harmonogram [ REFRESH ] klauzula_harmonogramu

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

        Aby zaplanować odświeżanie okresowo, użyj składni EVERY. Jeśli określono składnię EVERY, tabela strumieniowana lub zmaterializowany widok jest okresowo odświeżany w określonych odstępach czasu na podstawie podanej wartości, takiej jak HOUR, HOURS, DAY, DAYS, WEEKlub WEEKS. W poniższej tabeli wymieniono zaakceptowane wartości całkowite dla number.

        Time unit Wartość całkowita
        HOUR or HOURS 1 <= H <= 72
        DAY or DAYS 1 <= D <= 31
        WEEK or WEEKS 1 <= W <= 8

        Uwaga

        Liczba pojedyncza i mnoga dołączonej jednostki czasowej są semantycznie równoważne.

      • CRON cron_string [ AT TIME ZONE timezone_id ]

        Aby zaplanować odświeżanie przy użyciu wartości cron kwarcowego. Akceptowane są prawidłowe time_zone_values . AT TIME ZONE LOCAL nie jest obsługiwana.

        Jeśli AT TIME ZONE jest nieobecny, używana jest strefa czasowa sesji. Jeśli AT TIME ZONE jest nieobecny, a strefa czasowa sesji nie jest ustawiona, zostanie zgłoszony błąd. SCHEDULEjest semantycznie równoważne .SCHEDULE REFRESH

    • Z klauzulą ROW FILTER

      Ważne

      Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

      Dodaje do tabeli funkcję filtru wierszy. Wszystkie kolejne zapytania z tej tabeli otrzymują podzbiór wierszy, dla których funkcja zwraca wartość logiczną TRUE. Może to być przydatne w celach szczegółowej kontroli dostępu, w których funkcja może sprawdzić tożsamość lub członkostwo w grupach użytkownika wywołującego w celu określenia, czy filtrować niektóre wiersze.

  • Zapytanie AS

    Zapytanie, które konstruuje widok z tabel podstawowych lub innych widoków.

Wymagane uprawnienia

Użytkownik tworzący zmaterializowany widok (MV) jest właścicielem mv i musi mieć następujące uprawnienia:

  • SELECT uprawnienia dotyczące tabel podstawowych, do których odwołuje się MV.
  • uprawnienie USE CATALOG w katalogu nadrzędnym oraz uprawnienie USE SCHEMA w schemacie nadrzędnym.
  • CREATE MATERIALIZED VIEW uprawnienia w schemacie dla MV.

Aby użytkownik mógł odświeżyć MV, potrzebuje:

  • uprawnienie USE CATALOG w katalogu nadrzędnym oraz uprawnienie USE SCHEMA w schemacie nadrzędnym.
  • Własność mv lub REFRESH uprawnienia w mv.
  • Właściciel MV musi mieć przywilej SELECT dla tabel podstawowych, do których odwołuje się MV.

Aby użytkownik mógł wykonywać zapytania dotyczące wzorca MV, wymaga:

  • uprawnienie USE CATALOG w katalogu nadrzędnym oraz uprawnienie USE SCHEMA w schemacie nadrzędnym.
  • SELECT uprawnienia do zmaterializowanego widoku.

Filtry wierszy i maski kolumn

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

Filtry wierszy umożliwiają określenie funkcji, która ma zastosowanie jako filtr za każdym razem, gdy skanowanie tabeli pobiera wiersze. Te filtry zapewniają, że kolejne zapytania zwracają tylko wiersze, dla których predykat filtru daje wartość true.

Maski kolumn umożliwiają maskowanie wartości kolumny za każdym razem, gdy skanowanie tabeli pobiera wiersze. Wszystkie przyszłe zapytania obejmujące tę kolumnę otrzymają wynik oceny funkcji w kolumnie, zastępując oryginalną wartość kolumny.

Aby uzyskać więcej informacji na temat używania filtrów wierszy i masek kolumn, zobacz Filtrowanie poufnych danych tabeli przy użyciu filtrów wierszy i masek kolumn.

Zarządzanie filtrami wierszy i maskami kolumn

Filtry wierszy i maski kolumn w widokach materializowanych należy dodawać za pomocą instrukcji CREATE.

Zachowanie

  • Refresh as Definer: Gdy instrukcja REFRESH MATERIALIZED VIEW odświeża zmaterializowany widok, funkcje filtrowania wierszy działają z uprawnieniami definiującego (jako właściciela tabeli). Oznacza to, że odświeżanie tabeli używa kontekstu zabezpieczeń użytkownika, który utworzył zmaterializowany widok.
  • Zapytanie: Podczas gdy większość filtrów jest uruchamiana z prawami definiowanego, funkcje sprawdzające kontekst użytkownika (takie jak CURRENT_USER i IS_MEMBER) są wyjątkami. Te funkcje działają jako wywołanie. Takie podejście wymusza zabezpieczenia danych specyficzne dla użytkownika i mechanizmy kontroli dostępu na podstawie kontekstu bieżącego użytkownika.
  • Podczas tworzenia zmaterializowanych widoków w tabelach źródłowych zawierających filtry wierszy i maski kolumn odświeżanie zmaterializowanego widoku jest zawsze pełnym odświeżaniem. Pełne odświeżanie ponownie przetwarza wszystkie dane dostępne w źródle przy użyciu najnowszych definicji. Dzięki temu zasady zabezpieczeń w tabelach źródłowych są oceniane i stosowane przy użyciu najbardziej up-to— data i definicje.

Wgląd w informacje

Użyj DESCRIBE EXTENDED, INFORMATION_SCHEMAlub Eksploratora wykazu, aby zbadać istniejące filtry wierszy i maski kolumn, które mają zastosowanie do danego zmaterializowanego widoku. Ta funkcja umożliwia użytkownikom przeprowadzanie inspekcji i przeglądanie dostępu do danych oraz środków ochrony w zmaterializowanych widokach.

Ograniczenia

  • Gdy w zmaterializowanym widoku z agregacją sum ostatnia wartość inna niż NULL zostanie usunięta z NULL-owej kolumny – i pozostaną tam tylko wartości NULL – wynikowa wartość agregatu widoku zwraca zero zamiast NULL.
  • Odwołanie do kolumny nie wymaga aliasu. Wyrażenia nieodwołujące się do kolumn wymagają aliasu, jak w poniższym przykładzie:
    • Dozwolone: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • Niedozwolone: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • NOT NULL należy określić ręcznie wraz z instrukcją PRIMARY KEY , aby być prawidłową instrukcją.
  • Zmaterializowane widoki nie obsługują kolumn tożsamości ani kluczy zastępczych.
  • Zmaterializowane widoki nie obsługują poleceń OPTIMIZE i VACUUM. Konserwacja odbywa się automatycznie.
  • Zmaterializowane widoki nie obsługują oczekiwań dotyczących definiowania ograniczeń jakości danych.

Przykłady

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