CREATE MATERIALIZED VIEW (potrubí)

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. materializovaná zobrazení jsou podporována pomocí pipeline. 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. Materializovaná zobrazení můžete aktualizovat ručně nebo podle plánu.

Další informace o tom, jak provádět nebo plánovat aktualizace, najdete viz Spuštění aktualizace pipeliny.

Syntaxe

CREATE [OR REFRESH] [PRIVATE] MATERIALIZED VIEW
  view_name
  [ column_list ]
  [ view_clauses ]
  AS query

column_list
   ( { column_name column_type column_properties } [, ...]
    [ CONSTRAINT expectation_name EXPECT (expectation_expr)
      [ ON VIOLATION { FAIL UPDATE | DROP ROW } ] ] [, ...]
    [ , table_constraint ] [...] )

   column_properties
      { NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]

view_clauses
  { USING { DELTA | ICEBERG } |
    PARTITIONED BY (col [, ...]) |
    CLUSTER BY clause |
    LOCATION path |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    REFRESH POLICY refresh_clause |
    WITH { ROW FILTER clause } } [...]

Parametry

  • REFRESH

    Pokud je zadáno, vytvoří zobrazení nebo aktualizuje existující zobrazení a jeho obsah.

  • SOUKROMÝ

    Vytvoří soukromé materializované zobrazení. Privátní materializované zobrazení může být užitečné jako zprostředkující tabulka v rámci datového toku, které nechcete publikovat do katalogu.

    • Nejsou přidány do katalogu a jsou přístupné pouze v rámci určeného potrubí.
    • Můžou mít stejný název jako existující objekt v katalogu. Pokud v rámci kanálu má soukromé materializované zobrazení a objekt v katalogu stejný název, odkazy na název přeloží na privátní materializované zobrazení.
    • Soukromá materializovaná zobrazení se uchovávají po celou dobu životnosti kanálu, nikoliv pouze při jediné aktualizaci.

    Soukromá materializovaná zobrazení byla dříve vytvořena pomocí parametru TEMPORARY .

  • view_name

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

    Soukromá materializovaná zobrazení můžou mít stejný název jako objekt publikovaný v katalogu.

  • 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á informační omezení primárního nebo cizího klíče do sloupce v materializovaném zobrazení.

    • Klauzule MASKA

      Přidá funkci masky sloupce pro anonymizaci citlivých dat. Viz filtry řádků a masky sloupců.

    • CONSTRAINT expectation_name EXPECT (expectation_expr) [ PŘI PORUŠENÍ { SELHAT UPDATE | SMAZAT ŘÁDEK } ]

      Přidá do materializovaného zobrazení očekávání kvality dat. Tato očekávání kvality dat je možné sledovat v průběhu času a přistupovat k němu prostřednictvím protokolu událostí materializovaného zobrazení. Očekávání FAIL UPDATE způsobí selhání zpracování při vytváření materializovaného zobrazení a aktualizaci. Očekávání DROP ROW způsobí, že pokud se očekávání nesplní, celý řádek bude vynechán. Viz Spravujte kvalitu dat pomocí požadavků na datový potrubí.

      expectation_expr mohou být tvořeny literály, identifikátory sloupců v materializovaném zobrazení a deterministickými integrovanými funkcemi nebo operátory SQL s výjimkou:

      Také expr nesmí obsahovat žádný poddotaz.

      Materializované zobrazení, jehož definice zahrnuje očekávání, se při každé aktualizaci plně aktualizuje a nepodporuje přírůstkovou aktualizaci. Pokud chcete použít přírůstkovou aktualizaci, odeberte očekávání nebo je použijte mimo definici materializovaného zobrazení.

  • omezení tabulky

    Při zadávání schématu můžete definovat primární a cizí klíče. Omezení jsou informativní a nevynucují se. Viz klauzuli CONSTRAINT v referenční dokumentaci jazyka SQL.

    Poznámka:

    Pokud chcete definovat omezení tabulek, vaše potrubí musí být aktivováno prostřednictvím katalogu Unity.

  • view_clauses

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

    • POUŽITÍ FUNKCE DELTA

      Určuje formát dat. Výchozí hodnota je DELTA.

      Tato klauzule je nepovinná.

    • POUŽITÍ ICEBERGU

      Vytvoří materializované zobrazení, které je kompatibilní s externími čtenáři Icebergu. Po vytvoření materializovaného zobrazení spusťte REPAIR TABLE <mv_name> SYNC METADATApříkaz . Materializované zobrazení je jen pro čtení pro externí čtenáře Icebergu. Viz Vytvoření materializovaného zobrazení kompatibilní s externími čtenáři Icebergu.

      Important

      Spravovaná materializovaná zobrazení icebergu jsou ve verzi Public Preview. Pokud chcete tuto funkci povolit, obraťte se na svůj tým účtů Databricks.

    • PARTICIONOVÁNO PODLE

      Volitelný seznam jednoho nebo více sloupců, které se mají použít k dělení v tabulce. Vzájemně se vylučuje s CLUSTER BY.

      Liquid clustering poskytuje flexibilní a optimalizované řešení pro shlukování. Zvažte použití CLUSTER BY místo PARTITIONED BY pro kanály.

    • CLUSTER BY

      Povolte tekuté shlukování v tabulce a definujte sloupce, které se mají použít jako klíče shlukování. Pomocí automatického liquid clusteringu s CLUSTER BY AUTO a Databricks inteligentně vybírá klíče seskupování pro optimalizaci výkonu dotazů. Vzájemně se vylučuje s PARTITIONED BY.

      Viz Použití metody 'liquid clustering' pro tabulky.

    • UMÍSTĚNÍ

      Volitelné umístění úložiště pro data tabulky. Pokud není nastavená, systém ve výchozím nastavení nastaví umístění úložiště kanálu.

      Tato možnost je dostupná pouze při publikování do metastoru Hive. V katalogu Unity se umístění spravuje automaticky.

    • KOMENTÁŘ

      Volitelný popis tabulky.

    • TBLPROPERTIES

      Volitelný seznam vlastností tabulky pro tabulku.

    • REFRESH ZÁSAD

      (Beta verze) Volitelně můžete nastavit zásady aktualizace pro materializované zobrazení.

      Viz REFRESH klauzule POLICY (kanály).

    • S ROW FILTER

      Přidá do tabulky funkci filtru řádků. Budoucí dotazy na danou tabulku obdrží podmnožinu řádků, pro které se funkce vyhodnotí jako PRAVDA. To je užitečné pro důkladné řízení přístupu, protože umožňuje funkci zkoumat identitu a členství ve skupinách uživatele, který ji vyvolává, aby se rozhodlo, zda mají být určité řádky filtrovány.

      Vizklauzule .

  • dotaz

    Dotaz, který definuje datovou sadu pro tabulku.

Požadovaná oprávnění

Uživatel spuštěn jako pro potrubí musí mít následující oprávnění:

  • SELECT oprávnění materializovaného zobrazení k základním tabulkám, na které odkazuje.
  • USE CATALOG privilegium v nadřazeném katalogu a USE SCHEMA privilegium v nadřazeném schématu.
  • CREATE TABLE a CREATE MATERIALIZED VIEW oprávnění k schématu obsahujícímu materializované zobrazení.

Aby uživatel mohl aktualizovat kanál, v rámci kterého je definováno materializované zobrazení, potřebuje:

  • USE CATALOG privilegium v nadřazeném katalogu a USE SCHEMA privilegium v nadřazeném schématu.
  • Vlastnictví materializovaného zobrazení nebo oprávnění k REFRESH materializovanému zobrazení.
  • Vlastník materializovaného zobrazení musí mít SELECT oprávnění k základním tabulkám odkazovaným materializovaným zobrazením.

Aby uživatel mohl dotazovat výsledné materializované zobrazení, 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í.

Omezení

  • Když materializované zobrazení s agregací sum nad sloupcem, který může obsahovat hodnoty NULL, má ze sloupce odebránu poslední hodnotu, která není NULL, a proto v daném sloupci zůstanou pouze hodnoty NULL, výsledná agregační hodnota materializovaného zobrazení dává 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 PRIMARY KEY, aby byl příkaz platný.
  • Materializovaná zobrazení nepodporují sloupce identit ani náhradní klíče.
  • Materializovaná zobrazení nepodporují příkazy OPTIMIZE a VACUUM. Údržba probíhá automaticky.
  • Přejmenování tabulky nebo změna vlastníka se nepodporuje.
  • Vygenerované sloupce, sloupce identit a výchozí sloupce se nepodporují.

Examples

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

-- Use automatic liquid clustering to let Databricks choose the clustering columns:
CREATE OR REFRESH MATERIALIZED VIEW sample_trips
CLUSTER BY AUTO
AS SELECT pickup_zip, fare_amount FROM samples.nyctaxi.trips

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