VYTVOŘENÍ MATERIALIZOVANÉHO ZOBRAZENÍ

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

Důležité

Tato funkce je ve verzi Public Preview.

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ě, podle plánu nebo naplánováním kanálu DLT, ve kterém jsou obsaženy.

Syntaxe

CREATE MATERIALIZED VIEW [IF NOT EXISTS]
  view_name
  [ column_list ]
  [ table_constraints ]
  [ view_clauses ]
  AS query

column_list
   ( { column_alias [ COMMENT column_comment | column_constraint ] [...] } [, ...] [ , table_constraint ] [...])

table_constraints
   ( table_constraint [, ...] )

view_clauses
  { PARTITIONED BY (col [, ...]) |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    SCHEDULE [ REFRESH ] CRON cron_string [ AT TIME ZONE timezone_id ] } [...]

Parametry

  • POKUD NEEXISTUJE

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

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

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

      Aliasy sloupců musí být jedinečné.

    • column_comment

      Volitelný STRING literál popisující alias sloupce.

    • column_constraint

      Důležité

      Tato funkce je ve verzi Public Preview.

      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í. Omezení nejsou podporována pro materializovaná zobrazení v hive_metastore katalogu.

  • table_constraint

    Důležité

    Tato funkce je ve verzi Public Preview.

    Přidá omezení informačního primárního klíče nebo informačního cizího klíče do materializovaného zobrazení. Omezení nejsou podporována pro materializovaná zobrazení v hive-metastore katalogu.

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

    • SCHEDULE [ REFRESH ] CRON cron_string [ AT TIME ZONE timezone_id ]

      Pokud je k dispozici, naplánuje streamovací tabulku nebo materializované zobrazení, aby aktualizovala data s daným plánem quartz cron . Akceptují se pouze 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.

      Syntaxi nelze použít SCHEDULE v definici kanálu Delta Live Tables.

  • 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 oprávnění ke schématu MV.

MV může REFRESH jenom vlastník.

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

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:
    • Povoleno: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • Nepovoleno: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • Materializovaná zobrazení nepodporují sloupce identit ani náhradní klíče.
  • Materializovaná zobrazení nepodporují ad hoc OPTIMIZE a VACUUM příkazy. Údržba probíhá automaticky.

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;

-- Create a materialized view with a column constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id NOT NULL PRIMARY KEY,
    full_name,
    movie_title
  )
  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 table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id NOT NULL,
    full_name,
    movie_title,
    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 a materialized view without column list
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    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;