Materializované pohledy

Podobně jako standardní zobrazení jsou materializovaná zobrazení výsledky dotazu a vy k nim přistupujete stejným způsobem jako v tabulce. Na rozdíl od standardních zobrazení, která rekompuují výsledky u každého dotazu, materializovaná zobrazení uloží výsledky do mezipaměti a aktualizují je v zadaném intervalu. Vzhledem k tomu, že materializované zobrazení je předem předpočítané, můžou dotazy na něj běžet mnohem rychleji než u běžných zobrazení.

Pokyny, kdy použít materializovaná zobrazení oproti streamovacím tabulkám nebo zobrazením, viz Co jsou kanály?.

Materializované zobrazení je deklarativní objekt datového toku. Obsahuje dotaz , který ho definuje, tok , který ho aktualizuje, a výsledky uložené v mezipaměti pro rychlý přístup. Materializované zobrazení:

  • Sleduje změny v upstreamových datech.
  • Při triggeru přírůstkově zpracuje změněná data a použije potřebné transformace.
  • Udržuje výstupní tabulku synchronizovanou se zdrojovými daty na základě zadaného intervalu aktualizace.

Materializovaná zobrazení jsou dobrou volbou pro mnoho transformací:

  • Místo řádků použijete důvod pro výsledky uložené v mezipaměti. Ve skutečnosti jednoduše napíšete dotaz.
  • Vždy jsou v době aktualizace správné. Všechna požadovaná data se zpracovávají, i když dorazí pozdě nebo mimo objednávku.
  • Často jsou přírůstkové. Azure Databricks se pokusí zvolit odpovídající strategii, která minimalizuje náklady na aktualizaci materializovaného zobrazení.

Jak materializovaná zobrazení fungují

Následující diagram znázorňuje, jak fungují materializovaná zobrazení.

Diagram znázorňující, jak mvs funguje

Materializovaná zobrazení jsou definována a aktualizována jedním zpracovacím řetězcem. Ve zdrojovém kódu kanálu můžete explicitně definovat materializovaná zobrazení. Tabulky definované kanálem nejde změnit ani aktualizovat žádným jiným kanálem.

Note

Když vytvoříte samostatné materializované zobrazení mimo kanál Lakeflow, Azure Databricks vytvoří kanál, který se použije k aktualizaci zobrazení. Kanál můžete zobrazit tak, že v levém navigačním panelu v pracovním prostoru vyberete Úlohy a Kanály . Do zobrazení můžete přidat sloupec typu kanálu . Materializovaná zobrazení definovaná v datovém kanálu mají typ ETL. Samostatná materializovaná zobrazení mají typ MV/ST. Viz Použití samostatných materializovaných zobrazení.

Azure Databricks používá katalog Unity k ukládání metadat o zobrazení, včetně dotazu a dalších systémových zobrazení pro přírůstkové aktualizace. Azure Databricks materializuje data uložená v mezipaměti v cloudovém úložišti. Azure Databricks ukládá některá zálohovaná data v __databricks_internal katalogu. Podívejte se na __databricks_internal katalog.

Note

Azure Databricks vytvoří interní tabulky, které podporují přírůstkovou aktualizaci materializovaného zobrazení. Tyto tabulky se zobrazují v system.information_schema.tables, ale nejsou viditelné v Průzkumníku katalogu ani v jiných částech uživatelského rozhraní pracovního prostoru.

Následující příklad spojuje dvě tabulky a udržuje výsledek aktuální pomocí materializovaného zobrazení.

Python

from pyspark import pipelines as dp

@dp.materialized_view
def regional_sales():
  partners_df = spark.read.table("partners")
  sales_df = spark.read.table("sales")

  return (
    partners_df.join(sales_df, on="partner_id", how="inner")
  )

SQL

CREATE OR REPLACE MATERIALIZED VIEW regional_sales
  AS SELECT *
  FROM partners
    INNER JOIN sales ON
      partners.partner_id = sales.partner_id;

Automatické přírůstkové aktualizace

Když se aktivuje potrubí definující materializované zobrazení, je zobrazení automaticky udržováno aktuální, často přírůstkově. Azure Databricks se pokusí zpracovat pouze data, která je potřeba zpracovat, aby materializované zobrazení bylo aktuální. Materializované zobrazení vždy zobrazuje správný výsledek, i když vyžaduje úplné přepočítání výsledku dotazu od začátku, ale často Azure Databricks provádí pouze přírůstkové aktualizace materializovaného zobrazení, které může být mnohem méně nákladné než úplné přepočítávání.

Následující diagram znázorňuje materializované zobrazení s názvem sales_report, což je výsledek spojení dvou nadřazených tabulek clean_customers a clean_transactionsa seskupování podle země. Upstreamový proces vloží 200 řádků do clean_customers tří zemí (USA, Nizozemsko, Velká Británie) a aktualizuje 5 000 řádků odpovídajících clean_transactions těmto novým zákazníkům. Materializované sales_report zobrazení se přírůstkově aktualizuje pouze pro země, které mají nové zákazníky nebo odpovídající transakce. V tomto příkladu se místo celé sestavy prodeje aktualizují tři řádky.

Příklad přírůstkové aktualizace MV

Další podrobnosti o tom, jak přírůstková aktualizace funguje v materializovaných zobrazeních, naleznete v tématu Přírůstková aktualizace pro materializovaná zobrazení.

Omezení materializovaného zobrazení

Materializovaná zobrazení mají následující omezení:

  • Vzhledem k tomu, že aktualizace vytvářejí správné dotazy, některé změny vstupů budou vyžadovat úplné přepočítání materializovaného zobrazení, které může být nákladné.
  • Nejsou navržené pro případy použití s nízkou latencí. Latence aktualizace materializovaného zobrazení je v sekundách nebo minutách, nikoli v milisekundách.
  • Ne všechny výpočty se dají vypočítat přírůstkově.
  • Azure Databricks se pokusí zjistit, kdy se funkce definovaná uživatelem použitá v materializovaném zobrazení změní chování a provede úplnou aktualizaci, aby se aktualizovaná funkce definovaná uživatelem použila. Funkce definované uživatelem, které volají jiné funkce nebo knihovny, můžou měnit chování způsobem, který Azure Databricks nerozpozná. Jedním z příkladů je upgrade pojmenované knihovny. Když se chování uživatelem definované funkce změní, je vaší povinností provést úplnou aktualizaci v kterémkoliv materializovaném zobrazení, které ji používá.
  • Materializovaná zobrazení nepodporují CLONE. Nelze použít materializované zobrazení jako zdroj nebo cíl hlubokého nebo mělkého klonu. Další informace najdete v tématu Omezení.
  • Chce-li uživatel, který není správcem, zobrazit pipeline, na níž je materializované zobrazení založeno, potřebuje kromě oprávnění k pipeline také oprávnění REFRESH k materializovanému zobrazení. Viz Kdo může zobrazit pipeline a její výstup?

Dodatečné zdroje