Udostępnij za pośrednictwem


TWORZENIE ZMATERIALIZOWANEGO WIDOKU

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL

Zmaterializowany widok to widok , w którym wstępnie skompilowane wyniki są dostępne dla zapytania i można je zaktualizować w celu odzwierciedlenia zmian 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 ODŚWIEŻANIE (ZMATERIALIZOWANY WIDOK lub TABELA PRZESYŁANIA STRUMIENIOWEGO).

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

Uwaga

Operacje tworzenia i odświeżania na zmaterializowanych widokach i tabelach przesyłania strumieniowego są obsługiwane przez potok bezserwerowych tabel 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 wykazu?.

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 wyniku 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 mapować je na kolumny wyjściowe 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 informacyjne ograniczenie klucza podstawowego lub informacyjnego klucza obcego 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 informacyjne ograniczenie klucza podstawowego lub informacyjnego klucza obcego 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 tabeli do partycjonowania tabeli według.

    • VIEW_COMMENT KOMENTARZ

      Literał STRING opisujący tabelę.

    • 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ść pipelines.channel właściwości na "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 (Kanały środowiska uruchomieniowego delta Live Tables).

    • SCHEDULE [ REFRESH ] schedule_clause

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

        Ważne

        Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

        Aby zaplanować odświeżanie okresowo, użyj EVERY składni. Jeśli EVERY określono składnię, tabela przesyłania strumieniowego lub zmaterializowany widok jest okresowo odświeżany w określonym interwale na podstawie podanej wartości, takiej jak HOUR, , HOURSDAY, DAYSWEEKlub WEEKS. W poniższej tabeli wymieniono zaakceptowane wartości całkowite dla elementu 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 kronu 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

    • WITH ROW FILTER, klauzula

      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 oblicza 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 do tabel bazowych, do których odwołuje się mv.
  • USE CATALOG uprawnienia w katalogu nadrzędnym i USE SCHEMA uprawnienia w schemacie nadrzędnym.
  • CREATE MATERIALIZED VIEW uprawnienia w schemacie mv.

Aby użytkownik mógł odświeżyć mv, wymaga:

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

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

  • USE CATALOG uprawnienia w katalogu nadrzędnym i USE SCHEMA uprawnienia 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 zmaterializowanych widokach należy dodać za pomocą instrukcji CREATE .

Zachowanie

  • Odśwież jako definiuj: gdy REFRESH MATERIALIZED VIEW instrukcja odświeża zmaterializowany widok, funkcje filtrowania wierszy są uruchamiane z prawami definiowanego (jako właściciel 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 aktualnych danych i definicji.

Wgląd w informacje

DESCRIBE EXTENDEDUżyj INFORMATION_SCHEMA, lub 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ądania środków dostępu do danych i ochrony w zmaterializowanych widokach.

Ograniczenia

  • Gdy zmaterializowany widok z agregacją w kolumnie obsługującej sum wartość NULL ma ostatnią wartość inną niż NULL usuniętą z tej kolumny , a zatem tylko NULL wartości pozostają w tej kolumnie — wynikowa wartość agregowana widoku zwraca zero zamiast NULL.
  • Odwołanie do kolumny nie wymaga aliasu. Wyrażenia odwołania inne niż kolumny 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ą OPTIMIZE poleceń 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 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;

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