Sdílet prostřednictvím


Použití materializovaných zobrazení v Databricks SQL

Tento článek popisuje, jak vytvářet a používat materializovaná zobrazení v Databricks SQL ke zlepšení výkonu a snížení nákladů na úlohy zpracování a analýzy dat.

Poznámka:

Pokud potřebujete použít připojení Azure Private Link s materializovaným zobrazením, obraťte se na zástupce Databricks.

Důležité

Materializovaná zobrazení vytvořená v Databricks SQL jsou podporována kanálem bezserverových dynamických tabulek Delta. Aby se tato funkce používala, musí váš pracovní prostor podporovat bezserverové kanály.

Co jsou materializovaná zobrazení?

V Databricks SQL jsou materializovaná zobrazení spravovanými tabulkami Katalogu Unity, které uživatelům umožňují předkompilace výsledků na základě nejnovější verze dat ve zdrojových tabulkách. Materializovaná zobrazení v Azure Databricks se liší od jiných implementací, protože výsledky vrácené výsledky odrážejí stav dat, kdy se materializované zobrazení naposledy aktualizovalo, a ne vždy aktualizovat výsledky při dotazování materializovaného zobrazení. Můžete ručně aktualizovat materializovaná zobrazení nebo naplánovat aktualizace.

Materializovaná zobrazení jsou výkonná pro úlohy zpracování dat, jako je extrakce, transformace a načítání (ETL). Materializovaná zobrazení poskytují jednoduchý, deklarativní způsob zpracování dat pro dodržování předpisů, opravy, agregace nebo obecné zachytávání dat změn (CDC). Materializovaná zobrazení snižují náklady a zlepšují latenci dotazů díky pomalým dotazům a často používaným výpočtům. Materializovaná zobrazení také umožňují snadno použitelné transformace čištěním, rozšiřováním a denormalizací základních tabulek. Materializovaná zobrazení můžou snížit náklady a zároveň poskytnout zjednodušené prostředí pro koncové uživatele, protože v některých případech můžou přírůstkově vypočítat změny ze základních tabulek.

Materializovaná zobrazení byla nejprve podporována v Azure Databricks se spuštěním dynamických tabulek Delta. Když vytvoříte materializované zobrazení ve službě Databricks SQL Warehouse, vytvoří se bezserverový kanál pro zpracování aktualizací materializovaného zobrazení. Stav operací aktualizace můžete monitorovat v uživatelském rozhraní Delta Live Tables nebo v rozhraní API kanálů. Viz Zobrazení stavu materializované aktualizace zobrazení.

Požadavky

Vytvoření nebo aktualizace materializovaných zobrazení:

  • Musíte použít pro nebo bezserverový SQL Warehouse s podporou katalogu Unity.

  • Pokud chcete aktualizovat materializované zobrazení, musíte být v pracovním prostoru, který ho vytvořil.

  • Váš pracovní prostor musí být v oblasti, která podporuje bezserverové služby SQL Warehouse.

Dotazování materializovaných zobrazení:

  • Musíte být vlastníkem materializovaného zobrazení nebo mít SELECT v materializovaném zobrazení spolu s USE SCHEMA jeho nadřazenými prvky.USE CATALOG
  • Musíte použít jeden z následujících výpočetních prostředků:
    • SQL Warehouse
    • Rozhraní Delta Live Tables
    • Výpočetní režim sdíleného přístupu
    • Režim přístupu jednoho uživatele v Prostředí Databricks Runtime 15.4 a vyšší, pokud je pracovní prostor povolený pro bezserverové výpočetní prostředky. Podívejte se na podrobné řízení přístupu u výpočetních prostředků jednoho uživatele.
    • Pouze pokud jste vlastníkem materializovaného zobrazení: výpočetní prostředek v režimu přístupu jednoho uživatele, na kterém běží Databricks Runtime mezi 14.3 a 15.3.

Další informace o dalších omezeních používání materializovaných zobrazení najdete v tématu Omezení.

Vytvoření materializovaného zobrazení

Operace materializovaného zobrazení CREATE Databricks SQL používají službu Databricks SQL Warehouse k vytvoření a načtení dat v materializovaném zobrazení. Vytvoření materializovaného zobrazení je synchronní operace, což znamená, že CREATE MATERIALIZED VIEW příkaz blokuje, dokud se materializované zobrazení nevytvořilo a počáteční načtení dat se dokončí. Kanál bezserverových živých tabulek Delta se automaticky vytvoří pro každé materializované zobrazení SQL Databricks. Při aktualizaci materializovaného zobrazení kanál Delta Live Tables zpracuje aktualizaci.

K vytvoření materializovaného zobrazení použijte CREATE MATERIALIZED VIEW příkaz. Pokud chcete odeslat příkaz create, použijte editor SQL v uživatelském rozhraní Azure Databricks, rozhraní příkazového řádku SQL Databricks nebo rozhraní SQL API Databricks.

Poznámka:

Uživatel, který vytvoří materializované zobrazení, je vlastníkem materializovaného zobrazení a musí mít následující oprávnění:

  • SELECT oprávnění k základním tabulkám odkazovaným materializovaným zobrazením.
  • USE CATALOG a USE SCHEMA oprávnění k katalogu a schématu obsahujícím zdrojové tabulky pro materializované zobrazení.
  • USE CATALOG a USE SCHEMA oprávnění k cílovému katalogu a schématu pro materializované zobrazení.
  • CREATE TABLE a CREATE MATERIALIZED VIEW oprávnění k schématu obsahujícímu materializované zobrazení.

Následující příklad vytvoří materializované zobrazení mv1 ze základní tabulky base_table1:

CREATE MATERIALIZED VIEW mv1
AS SELECT
  date,
  sum(sales) AS sum_of_sales
FROM
  base_table1
GROUP BY
  date;

Komentáře sloupců v základní tabulce se automaticky rozšíří do nového materializovaného zobrazení. Chcete-li přidat plán, omezení tabulky nebo jiné vlastnosti, upravte definici materializovaného zobrazení. Další informace o syntaxi pro definování materializovaného zobrazení najdete v tématu CREATE MATERIALIZED VIEW.

Nastavení kanálu modulu runtime

Materializovaná zobrazení vytvořená pomocí SQL Warehouse se automaticky aktualizují pomocí kanálu Delta Live Tables. Kanály Delta Live Tables ve výchozím nastavení používají modul runtime v current kanálu. Informace o procesu vydání verze najdete v poznámkách k verzi Delta Live Tables a o procesu upgradu verze.

Databricks doporučuje používat current kanál pro produkční úlohy. Nové funkce jsou poprvé vydány v preview kanálu. Kanál můžete nastavit na kanál Delta Live Tables ve verzi Preview a otestovat nové funkce zadáním preview vlastnosti tabulky. Tuto vlastnost můžete zadat při vytváření tabulky nebo po vytvoření tabulky pomocí příkazu ALTER.

Následující příklad kódu ukazuje, jak nastavit kanál na náhled v příkazu CREATE:

CREATE OR REPLACE MATERIALIZED VIEW foo.default.bar
TBLPROPERTIES ('pipelines.channel' = 'preview') as
SELECT
  *
FROM
  range(5)

Načtení dat z externích systémů

Databricks doporučuje načíst externí data pomocí federace Lakehouse pro podporované zdroje dat. Informace o načítání dat ze zdrojů nepodporované službou Lakehouse Federation najdete v tématu Možnosti formátu dat.

Aktualizace materializovaného zobrazení

Operace REFRESH aktualizuje materializované zobrazení tak, aby odráželo nejnovější změny základní tabulky. Operace je ve výchozím nastavení synchronní, což znamená, že příkazy blokují, dokud nebude operace aktualizace dokončena. K aktualizaci materializovaného zobrazení použijte REFRESH MATERIALIZED VIEW příkaz. Podrobnosti o syntaxi a parametrech SQL pro tento příkaz najdete v ( nebo ). Další informace o typech materializovaných zobrazení, která lze přírůstkově aktualizovat, najdete v tématu Přírůstková aktualizace pro materializovaná zobrazení.

Pokud chcete odeslat příkaz aktualizace, použijte editor SQL v uživatelském rozhraní Azure Databricks, poznámkový blok připojený ke službě SQL Warehouse, rozhraní příkazového řádku SQL Databricks nebo rozhraní SQL API Databricks.

Materializované zobrazení může REFRESH zobrazit pouze vlastník.

Následující příklad aktualizuje mv1 materializované zobrazení:

REFRESH MATERIALIZED VIEW mv1;

Jak se aktualizují materializovaná zobrazení SQL Databricks?

Materializovaná zobrazení automaticky vytvářejí a používají kanály delta živých tabulek bez serveru ke zpracování operací aktualizace. Aktualizace se spravuje kanálem Delta Live Tables a aktualizace se monitoruje službou Databricks SQL Warehouse, která slouží k vytvoření materializovaného zobrazení. Materializovaná zobrazení je možné aktualizovat pomocí kanálu Delta Live Tables, který běží podle plánu. Viz Triggered vs. continuous pipeline mode.

Poznámka:

Modul runtime Delta Live Tables nemůže rozpoznat změny v jiných zdrojích dat než Delta. Tabulka se stále pravidelně aktualizuje, ale s vyšším výchozím intervalem aktivační události, aby se zabránilo nadměrnému přepočítávání, aby se zpomalilo jakékoli přírůstkové zpracování probíhající na výpočetních prostředcích.

Ve výchozím nastavení se operace aktualizace provádějí synchronně. Můžete také nastavit operaci aktualizace tak, aby probíhala asynchronně. Tuto možnost můžete nastavit pomocí příkazu refresh. Viz REFRESH (MATERIALIZED VIEW nebo STREAMING TABLE) Chování spojené s jednotlivými přístupy je následující:

  • Synchronní: Synchronní aktualizace brání dalším operacím v pokračování, dokud aktualizace nebude dokončena. Pokud je výsledek potřebný pro další krok, například při sekvencování operací aktualizace v nástrojích orchestrace, jako jsou úlohy Databricks, použijte synchronní aktualizaci. K orchestraci materializovaných zobrazení s úlohou použijte typ úlohy SQL . Viz Přehled orchestrace v databricks.
  • Asynchronní: Asynchronní aktualizace spustí úlohu na pozadí na rozdílových živých tabulkách, když začne aktualizace materializovaného zobrazení, což umožní, aby se příkaz vrátil před dokončením načítání dat. Tento typ aktualizace může ušetřit náklady, protože operace nemusí nutně obsahovat výpočetní kapacitu ve skladu, kde je inicializován příkaz. Pokud se aktualizace stane nečinnou a neběží žádné další úlohy, může sklad vypnout, zatímco aktualizace používá jiné dostupné výpočetní prostředky. Asynchronní aktualizace navíc podporují paralelní spouštění více operací.

Některé dotazy je možné přírůstkově aktualizovat. Viz Přírůstková aktualizace pro materializovaná zobrazení. Pokud přírůstkovou aktualizaci nelze provést, provede se místo toho úplná aktualizace.

Naplánování aktualizací materializovaného zobrazení

Můžete nakonfigurovat materializované zobrazení SQL Databricks tak, aby se automaticky aktualizovalo na základě definovaného plánu. Pokud chcete nastavit plán, udělejte jednu z těchto věcí:

Při vytvoření plánu se automaticky nakonfiguruje nová úloha Databricks pro zpracování aktualizace.

Pokud chcete zobrazit plán, udělejte jednu z těchto věcí:

  • DESCRIBE EXTENDED Spusťte příkaz z editoru SQL v uživatelském rozhraní Azure Databricks.
  • K zobrazení materializovaného zobrazení použijte Průzkumníka katalogu. Plán je uvedený na kartě Přehled v části Stav aktualizace. Podívejte se, co je Průzkumník katalogu?

Zobrazení stavu materializované aktualizace zobrazení

Poznámka:

Vzhledem k tomu, že kanál Delta Live Tables spravuje materializované aktualizace zobrazení, dochází k latenci času spuštění kanálu. Tato doba může být v sekundách až minutách, kromě času potřebného k provedení aktualizace.

Stav materializované aktualizace zobrazení můžete zobrazit zobrazením kanálu, který spravuje materializované zobrazení v uživatelském rozhraní Delta Live Tables, nebo zobrazením informací o aktualizaci vrácených příkazem DESCRIBE EXTENDED pro materializované zobrazení.

Historii aktualizace materializovaného zobrazení můžete zobrazit také dotazováním protokolu událostí Delta Live Tables. Viz Zobrazení historie aktualizace pro materializované zobrazení.

Monitorování spuštění pomocí historie dotazů

Na stránce historie dotazů můžete získat přístup k podrobnostem dotazu a profilům dotazů, které vám pomůžou identifikovat špatně výkonné dotazy a kritické body v kanálu Delta Live Tables sloužící ke spouštění aktualizací streamovaných tabulek. Přehled o druhu informací dostupných pro historii dotazů a profily dotazů najdete v tématu Historie dotazů a profil dotazu.

Důležité

Tato funkce je ve verzi Public Preview. Správci pracovního prostoru můžou tuto funkci povolit na stránce Previews . Viz Správa azure Databricks Preview.

Všechny příkazy související s materializovanými zobrazeními se zobrazí v historii dotazů. Pomocí rozevíracího seznamu Příkaz můžete vybrat libovolný příkaz a zkontrolovat související dotazy. Za všemi CREATE příkazy následuje REFRESH příkaz, který se spouští asynchronně v kanálu Delta Live Tables. Příkazy REFRESH obvykle zahrnují podrobné plány dotazů, které poskytují přehled o optimalizaci výkonu.

Pokud chcete získat přístup k REFRESH příkazům v uživatelském rozhraní historie dotazů, postupujte následovně:

  1. Kliknutím Ikona historie na levý boční panel otevřete uživatelské rozhraní historie dotazů.
  2. V rozevíracím filtru REFRESH zaškrtněte políčko .
  3. Kliknutím na název příkazu dotazu zobrazíte souhrnné podrobnosti, jako je doba trvání dotazu a agregované metriky.
  4. Kliknutím na Zobrazit profil dotazu otevřete profil dotazu. Podrobnosti o navigaci v profilu dotazu najdete v tématu Profil dotazu.
  5. Volitelně můžete pomocí odkazů v části Zdroj dotazů otevřít související dotaz nebo kanál.

Viz CREATE MATERIALIZED VIEW.

Zobrazení stavu aktualizace v uživatelském rozhraní Delta Live Tables

Kanál Delta Live Tables, který spravuje materializované zobrazení, není ve výchozím nastavení viditelný v uživatelském rozhraní Delta Live Tables. Pokud chcete kanál zobrazit v uživatelském rozhraní delta živých tabulek, musíte získat přímý přístup k odkazu na stránku podrobností kanálu. Přístup k odkazu:

  • Zkopírujte a vložte odkaz zobrazený v řádku Poslední aktualizace tabulky vrácené příkazem DESCRIBE EXTENDED .
  • Na kartě rodokmenu materializovaného zobrazení klikněte na Kanály a potom klikněte na odkaz kanálu.

U asynchronních REFRESH příkazů odeslaných pomocí editoru SQL v uživatelském rozhraní Azure Databricks můžete stav aktualizace zobrazit pomocí odkazu zobrazeného na panelu Výsledky .

Zastavení aktivní aktualizace

Pokud chcete zastavit aktivní aktualizaci v uživatelském rozhraní delta živých tabulek, klikněte na stránce podrobností kanálu na tlačítko Zastavit a zastavte aktualizaci kanálu. Aktualizaci můžete také zastavit pomocí rozhraní příkazového řádku Databricks nebo post /api/2.0/pipelines/{pipeline_id}/stop v rozhraní PIPELINES API.

Aktualizace definice materializovaného zobrazení

Chcete-li aktualizovat definici materializovaného zobrazení, musíte nejprve odstranit a pak znovu vytvořit materializované zobrazení.

Přetažení materializovaného zobrazení

Poznámka:

Chcete-li odeslat příkaz k vyřazení materializovaného zobrazení, musíte být vlastníkem tohoto materializovaného zobrazení nebo mít oprávnění MANAGE pro materializované zobrazení.

Chcete-li odstranit materializované zobrazení, použijte příkaz DROP VIEW. K odeslání DROP příkazu můžete použít editor SQL v uživatelském rozhraní Azure Databricks, rozhraní příkazového řádku SQL Databricks nebo rozhraní SQL API Databricks. Následující příklad zahodí mv1 materializované zobrazení:

DROP MATERIALIZED VIEW mv1;

Popis materializovaného zobrazení

K načtení sloupců a datových typů pro materializované zobrazení použijte DESCRIBE příkaz. Pokud chcete načíst sloupce, datové typy a metadata, jako je vlastník, umístění, čas vytvoření a stav aktualizace materializovaného zobrazení, použijte DESCRIBE EXTENDED. Pokud chcete odeslat DESCRIBE příkaz, použijte editor SQL v uživatelském rozhraní Azure Databricks, rozhraní příkazového řádku SQL Databricks nebo rozhraní SQL API Databricks.

Změna vlastníka materializovaného zobrazení

Vlastník materializovaného zobrazení můžete změnit, pokud jste správcem metastoru i správcem pracovního prostoru. Materializovaná zobrazení automaticky vytvářejí a používají kanály Delta Live Tables ke zpracování změn. Pomocí následujících kroků můžete změnit vlastníka materializovaných zobrazení:

  • Na kartě rodokmenu materializovaného zobrazení klikněte na Kanály a potom klikněte na odkaz kanálu.
  • Klikněte na Sdílet. Zobrazí se dialogové okno nastavení oprávnění .
  • Kliknutím na x napravo od jména aktuálního vlastníka odeberete aktuálního vlastníka.
  • Začněte psát a vyfiltrujte seznam dostupných uživatelů. Klikněte na uživatele, který by měl být novým vlastníkem kanálu.
  • Kliknutím na Uložit uložte změny a zavřete dialogové okno.

Všechny prostředky kanálu, včetně materializovaných zobrazení definovaných v kanálu, vlastní nový vlastník kanálu. Všechny budoucí aktualizace se spouštějí pomocí identity nového vlastníka.

Řízení přístupu k materializovaným zobrazením

Materializovaná zobrazení podporují bohaté řízení přístupu, které podporují sdílení dat a zároveň se vyhýbají potenciálně privátním datům. Materializovaný vlastník zobrazení nebo uživatel s oprávněním MANAGE může ostatním uživatelům udělit oprávnění SELECT. Uživatelé s SELECT přístupem k materializovanému zobrazení nepotřebují SELECT přístup k tabulkám odkazovaným materializovaným zobrazením. Toto řízení přístupu umožňuje sdílení dat při řízení přístupu k podkladovým datům.

Udělení oprávnění materializovanému zobrazení

Pokud chcete udělit přístup k materializovanému zobrazení, použijte tento GRANT příkaz:

GRANT
  privilege_type [, privilege_type ] ...
  ON <mv_name> TO principal;

Privilege_type může být:

  • SELECT – uživatel může SELECT materializované zobrazení.
  • REFRESH – uživatel může REFRESH materializované zobrazení. Aktualizace se spouští pomocí oprávnění vlastníka.

Následující příklad vytvoří materializované zobrazení a udělí uživateli oprávnění k výběru a aktualizaci:

CREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;

Odvolání oprávnění z materializovaného zobrazení

Pokud chcete odvolat přístup z materializovaného zobrazení, použijte tento REVOKE příkaz:

REVOKE
  privilege_type [, privilege_type ]
  ON <name> FROM principal;

Pokud jsou oprávnění SELECT v základní tabulce odvolána od vlastníka materializovaného zobrazení nebo jakéhokoli jiného uživatele, kterému byla udělena oprávnění MANAGE nebo SELECT k materializovanému zobrazení, nebo je základní tabulka odstraněna, vlastník materializovaného zobrazení nebo uživatel s uděleným přístupem může stále dotazovat materializované zobrazení. Dochází však k následujícímu chování:

  • Vlastník materializovaného zobrazení nebo jiní uživatelé, kteří ztratili přístup k materializovanému zobrazení, už nemůže toto materializované zobrazení a REFRESH materializované zobrazení bude zastaralé.
  • Pokud je plán automatizovaný, další naplánovaný plán REFRESH selže nebo se nespustí.

Následující příklad odvolá SELECT oprávnění z mv1:

REVOKE SELECT ON mv1 FROM user1;

Povolení kanálu změn dat

U základních tabulek materializovaných zobrazení je vyžadován datový kanál změn, s výjimkou některých pokročilých případů použití. Pokud chcete u základní tabulky povolit datový kanál změn, nastavte delta.enableChangeDataFeed vlastnost tabulky pomocí následující syntaxe:

ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);

Zobrazení historie aktualizací pro materializované zobrazení

Pokud chcete zobrazit stav operací v materializovaném zobrazení, včetně aktuálních a minulých REFRESH aktualizací, zadejte dotaz na protokol událostí Delta Live Tables:

SELECT
  *
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = "update_progress"
ORDER BY
  timestamp desc;

Nahraďte <fully-qualified-table-name> plně kvalifikovaným názvem materializovaného zobrazení, včetně katalogu a schématu.

Podívejte se, co je protokol událostí Delta Live Tables?

Omezení

  • Požadavky na výpočetní prostředky a pracovní prostor najdete v tématu Požadavky.
  • Materializovaná zobrazení nepodporují sloupce identit ani náhradní klíče.
  • Pokud materializované zobrazení používá agregaci součtu nad sloupcem schopným NULLa zůstanou v daném sloupci pouze NULL hodnoty, materializovaná zobrazení výsledná agregační hodnota je nula místo NULL.
  • Z materializovaného zobrazení nelze číst datový kanál změn.
  • Dotazy týkající se cestování v čase nejsou podporovány v materializovaných zobrazeních.
  • Podkladové soubory podporující materializovaná zobrazení mohou zahrnovat data z nadřazených tabulek (včetně možných identifikovatelných osobních údajů), které se nezobrazují v definici materializovaného zobrazení. Tato data se automaticky přidají do podkladového úložiště, aby podporovala přírůstkovou aktualizaci materializovaných zobrazení. Vzhledem k tomu, že podkladové soubory materializovaného zobrazení můžou riskovat zveřejnění dat z nadřazených tabulek, které nejsou součástí schématu materializovaného zobrazení, databricks doporučuje nesdílit podkladové úložiště s nedůvěryhodnými podřízenými příjemci. Předpokládejme například, že definice materializovaného zobrazení obsahuje COUNT(DISTINCT field_a) klauzuli. I když materializovaná definice zobrazení obsahuje pouze agregační COUNT DISTINCT klauzuli, podkladové soubory budou obsahovat seznam skutečných hodnot field_a.