Sdílet prostřednictvím


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

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

view_clauses
  { USING DELTA |
    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 toto nastavení 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. V rámci zpracovávacího procesu, pokud má soukromé materiálizované zobrazení a objekt v katalogu stejný název, odkazy na něj budou směřovat na soukromé materiálizované 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í.

  • omezení tabulky

    Důležité

    Tato funkce je ve verzi Public Preview.

    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. Jedinou možností je DELTA.

      Tato klauzule je volitelná a výchozí hodnota je DELTA.

    • 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í použije umístění úložiště potrubí.

      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.

    • S ROW FILTER

      Důležité

      Tato funkce je ve verzi Public Preview.

      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 MATERIALIZED VIEW oprávnění k používání schématu materializovaného 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 ...

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