Sdílet prostřednictvím


CREATE MATERIALIZED VIEW

Platí pro:zaškrtnutí označeného ano Databricks SQL

materializované zobrazení je zobrazení, ve kterém jsou pro dotaz k dispozici předpočítané výsledky a dají se aktualizovat tak, aby odrážely změny ve vstupu. Při každé aktualizaci materializovaného zobrazení se výsledky dotazu přepočítávají tak, aby odrážely změny v nadřazených datových sadách. Všechna materializovaná zobrazení jsou podporována DLT procesem. Materializovaná zobrazení můžete aktualizovat ručně nebo podle plánu.

Další informace o tom, jak provést ruční aktualizaci, najdete v tématu REFRESH (MATERIALIZED VIEW nebo STREAMING TABLE).

Další informace o plánování aktualizace najdete v tématu Příklady nebo ALTER MATERIALIZED VIEW.

Materializovaná zobrazení lze vytvořit pouze pomocí Pro nebo bezserverového SQL Warehouse, nebo v rámci Delta Live Tables pipeline.

Poznámka:

Operace vytváření a aktualizace v materializovaných zobrazeních a streamovaných tabulkách využívají bezserverový kanál Delta Live Tables. Průzkumníka katalogu můžete použít k zobrazení podrobností o záložních kanálech v uživatelském rozhraní. Podívejte se na Co je Průzkumník katalogu.

Syntaxe

{ 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

  • NAHRADIT

    Pokud je zadáno, nahradí zobrazení a jeho obsah, pokud již existuje.

  • POKUD NEEXISTUJE

    Vytvoří zobrazení, pokud neexistuje. Pokud zobrazení podle tohoto názvu již existuje, CREATE MATERIALIZED VIEW příkaz se ignoruje.

    Můžete zadat nejvýše jednu z nebo IF NOT EXISTSOR REPLACE.

  • view_name

    Název nově vytvořeného zobrazení Plně kvalifikovaný název zobrazení musí být jedinečný.

  • column_list

    Volitelně označí sloupce ve výsledcích dotazu pro zobrazení. Pokud zadáte seznam sloupců, musí se počet aliasů sloupců shodovat s počtem výrazů v dotazu. Pokud není zadaný žádný seznam sloupců, aliasy se odvozují z textu zobrazení.

    • column_name

      Názvy sloupců musí být jedinečné a mapované na výstupní sloupce dotazu.

    • column_type

      Určuje datový typ sloupce. Materializovaná zobrazení nepodporují všechny datové typy podporované službou Azure Databricks.

    • column_comment

      Volitelný STRING literál popisující sloupec. Tato možnost musí být zadána společně s parametrem column_type. Pokud typ sloupce není zadaný, komentář sloupce se přeskočí.

    • column_constraint

      Přidá omezení informačního primárního klíče nebo informačního cizího klíče do sloupce v materializovaném zobrazení. Pokud typ sloupce není zadaný, omezení sloupce se přeskočí.

    • Klauzule MASK

      Důležité

      Tato funkce je ve verzi Public Preview.

      Přidá funkci masky sloupce pro anonymizaci citlivých dat. Všechny následné dotazy z tohoto sloupce obdrží výsledek vyhodnocení této funkce místo původní hodnoty sloupce. To může být užitečné pro podrobné řízení přístupu, kdy funkce může zkontrolovat identitu nebo skupinové členství vyvolávajícího uživatele a určit, zda má být hodnota zredigována. Pokud typ sloupce není zadaný, maska sloupce se přeskočí.

  • table_constraint

    Přidá omezení informačního primárního klíče nebo informačního cizího klíče do tabulky v materializovaném zobrazení. Pokud typ sloupce není zadaný, omezení tabulky se přeskočí.

  • view_clauses

    Volitelně můžete zadat dělení, komentáře, uživatelem definované vlastnosti a plán aktualizace pro nové materializované zobrazení. Každou dílčí klauzuli lze zadat pouze jednou.

    • DĚLENÉ PODLE

      Volitelný seznam sloupců tabulky, podle kterých chcete tabulku rozdělit.

    • VIEW_COMMENT KOMENTÁŘE

      Literál STRING, který popisuje tabulku.

    • TBLPROPERTIES

      Volitelně nastaví jednu nebo více uživatelem definovaných vlastností.

      Pomocí tohoto nastavení můžete určit kanál modulu runtime Delta Live Tables použitý ke spuštění tohoto příkazu. Nastavte hodnotu vlastnosti pipelines.channel na "PREVIEW" nebo "CURRENT". Výchozí hodnota je "CURRENT". Další informace o kanálech Delta Live Tables naleznete v tématu kanály modulu runtime Delta Live Tables.

    • SCHEDULE [ REFRESH ] schedule_clause

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

        Pokud chcete naplánovat aktualizaci, která se pravidelně provádí, použijte EVERY syntaxi. Pokud je zadaná syntaxe EVERY, aktualizuje se streamovaná tabulka nebo materializované zobrazení pravidelně v zadaném intervalu na základě zadané hodnoty, například HOUR, HOURS, DAY, DAYS, WEEKnebo WEEKS. V následující tabulce jsou uvedeny celočíselné hodnoty pro number.

        Časová jednotka Celočíselná hodnota
        HOUR or HOURS 1 <= H <= 72
        DAY or DAYS 1 <= D <= 31
        WEEK or WEEKS 1 <= W <= 8

        Poznámka:

        Jednotné a množné číslo zahrnuté časové jednotky jsou sémanticky ekvivalentní.

      • CRON cron_string [ AT TIME ZONE timezone_id ]

        Naplánovat aktualizaci pomocí hodnoty quartz cron. Jsou přijímány platné time_zone_values . AT TIME ZONE LOCAL není podporováno.

        Pokud AT TIME ZONE chybí, použije se časové pásmo relace. Pokud AT TIME ZONE chybí a časové pásmo relace není nastavené, dojde k chybě. SCHEDULE je sémanticky ekvivalentní SCHEDULE REFRESH.

    • s ROW FILTER klauzulí

      Důležité

      Tato funkce je ve verzi Public Preview.

      Přidá do tabulky funkci filtru řádků. Všechny následné dotazy z této tabulky obdrží podmnožinu řádků, pro které se funkce vyhodnotí jako pravda. To může být užitečné pro jemně odstupňovanou kontrolu přístupu, kde funkce může zkontrolovat identitu nebo členství ve skupině uživatele, který vyvolal akci, a určit, zda filtrovat určité řádky.

  • Dotaz AS

    Dotaz, který sestaví zobrazení ze základních tabulek nebo jiných zobrazení.

Požadována oprávnění

Uživatel, který vytvoří materializované zobrazení (MV), je vlastníkem MV a musí mít následující oprávnění:

  • SELECT oprávnění k základním tabulkám, na které odkazuje MV.
  • USE CATALOG privilegium v nadřazeném katalogu a USE SCHEMA privilegium v nadřazeném schématu.
  • CREATE MATERIALIZED VIEW oprávnění ke schématu MV.

Aby uživatel mohl aktualizovat MV, vyžaduje:

  • USE CATALOG privilegium v nadřazeném katalogu a USE SCHEMA privilegium v nadřazeném schématu.
  • Vlastnictví MV nebo REFRESH oprávnění pro MV.
  • Vlastník MV musí mít oprávnění SELECT k základním tabulkám, na které odkazuje MV.

Aby uživatel mohl dotazovat MV, vyžaduje:

  • USE CATALOG privilegium v nadřazeném katalogu a USE SCHEMA privilegium v nadřazeném schématu.
  • SELECT oprávnění k materializovanému zobrazení.

Filtry řádků a masky sloupců

Důležité

Tato funkce je ve verzi Public Preview.

Filtry řádků umožňují zadat funkci, která se použije jako filtr při každém načtení řádků v tabulce. Tyto filtry zajišťují, aby následné dotazy vracely pouze řádky, pro které se predikát filtru vyhodnotí jako true.

Masky sloupců umožňují maskovat hodnoty sloupce pokaždé, když tabulka načte řádky. Všechny budoucí dotazy týkající se tohoto sloupce obdrží výsledek vyhodnocení funkce nad sloupcem a nahrazení původní hodnoty sloupce.

Další informace o tom, jak používat filtry řádků a masky sloupců, najdete v tématu Filtrování citlivých dat tabulky pomocí filtrů řádků a masek sloupců.

Správa filtrů řádků a masek sloupců

Filtry řádků a masky sloupců v materializovaných zobrazeních by měly být přidány prostřednictvím příkazu CREATE.

Chování

  • Refresh as Definer: Když příkaz REFRESH MATERIALIZED VIEW aktualizuje materializované zobrazení, spustí se funkce filtru řádků s právy definovatele (jako vlastník tabulky). To znamená, že aktualizace tabulky používá kontext zabezpečení uživatele, který vytvořil materializované zobrazení.
  • Dotaz: Zatímco většina filtrů běží s právy defineru, funkce, které kontrolují kontext uživatele (například CURRENT_USER a IS_MEMBER) jsou výjimky. Tyto funkce se spouští jako invoker. Tento přístup vynucuje zabezpečení dat a řízení přístupu specifické pro uživatele na základě kontextu aktuálního uživatele.
  • Při vytváření materializovaných zobrazení ve zdrojových tabulkách, které obsahují filtry řádků a masky sloupců, je aktualizace materializovaného zobrazení vždy úplná aktualizace. Úplná aktualizace znovu zpracuje všechna data dostupná ve zdroji s nejnovějšími definicemi. Tím zajistíte, že se zásady zabezpečení ve zdrojových tabulkách vyhodnocují a použijí s nejaktuálnějšími up-todaty a definicemi.

Pozorovatelnost

Pomocí DESCRIBE EXTENDED, INFORMATION_SCHEMAnebo Průzkumníka katalogu můžete prozkoumat existující filtry řádků a masky sloupců, které platí pro dané materializované zobrazení. Tato funkce umožňuje uživatelům auditovat a kontrolovat přístup k datům a míry ochrany v materializovaných zobrazeních.

Omezení

  • Když je z materializovaného zobrazení s agregací sum nad sloupcem s možností hodnot NULL odstraněna poslední hodnota, která není NULL – takže v daném sloupci zůstanou pouze hodnoty NULL – výsledná agregovaná hodnota materializovaného zobrazení místo NULLvrátí nulu.
  • Odkaz na sloupec nevyžaduje alias. Odkazové výrazy bez sloupců vyžadují alias, jak je znázorněno v následujícím příkladu:
    • Povolený: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • Nepovoleno: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • NOT NULL musí být ručně zadán spolu s platným příkazem PRIMARY KEY .
  • Materializovaná zobrazení nepodporují sloupce identit ani náhradní klíče.
  • Materializovaná zobrazení nepodporují příkazy OPTIMIZE a VACUUM. Údržba probíhá automaticky.
  • Materializovaná zobrazení nepodporují očekávání při definování omezení kvality dat.

Příklady

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