Sdílet prostřednictvím


VYTVOŘENÍ MATERIALIZOVANÉHO ZOBRAZENÍ

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

Materializované zobrazení je zobrazení, ve kterém jsou k dispozici předpočítané výsledky pro dotaz a lze je 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 kanálem DLT. 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.

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, 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 EXISTS OR 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ýsledku dotazu 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í název sloupce. 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 jemně odstupňované účely řízení přístupu, kdy funkce může zkontrolovat členství v identitě nebo skupině vyvolání uživatele a určit, jestli se má hodnota redakce provést. 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 pipelines.channel vlastnosti na "PREVIEW" hodnotu 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 }

        Důležité

        Tato funkce je ve verzi Public Preview.

        Pokud chcete naplánovat aktualizaci, která se pravidelně provádí, použijte EVERY syntaxi. Pokud EVERY je zadaná syntaxe, je streamovaná tabulka nebo materializované zobrazení pravidelně aktualizována v zadaném intervalu na základě zadané hodnoty, například HOUR, , HOURS, DAYDAYS, WEEKnebo WEEKS. Následující tabulka uvádí přijaté 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ánování aktualizace 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é, vyvolá se chyba. SCHEDULE je sémanticky ekvivalentní SCHEDULE REFRESH.

    • KLAUZULE WITH ROW FILTER

      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 logická hodnota PRAVDA. To může být užitečné pro jemně odstupňované účely řízení přístupu, kdy funkce může zkontrolovat členství v identitě nebo skupině vyvolání uživatele a určit, jestli se mají určité řádky filtrovat.

  • 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 oprávnění nadřazeného katalogu a USE SCHEMA oprávnění nadřazeného schématu.
  • CREATE MATERIALIZED VIEW oprávnění ke schématu MV.

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

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

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

  • USE CATALOG oprávnění nadřazeného katalogu a USE SCHEMA oprávnění nadřazeného 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 mask 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 CREATE příkazu.

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 daty a definicemi.

Pozorovatelnost

Pomocí funkce 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ž materializované zobrazení s agregací sum nad sloupcem schopným s hodnotou NULL je z tohoto sloupce odebrána poslední hodnota, která není null , a proto pouze NULL hodnoty zůstanou v daném sloupci – výsledná agregační hodnota materializovaného zobrazení vrátí nulu místo NULL.
  • 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í OPTIMIZE a VACUUM příkazy. Ú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 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;