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 sUSE 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
aUSE SCHEMA
oprávnění k katalogu a schématu obsahujícím zdrojové tabulky pro materializované zobrazení. -
USE CATALOG
aUSE SCHEMA
oprávnění k cílovému katalogu a schématu pro materializované zobrazení. -
CREATE TABLE
aCREATE 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
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í:
- Konfigurace plánu pomocí
SCHEDULE
klauzule při vytváření materializovaného zobrazení - Přidejte plán pomocí příkazu ALTER MATERIALIZED VIEW.
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ě:
- Kliknutím
na levý boční panel otevřete uživatelské rozhraní historie dotazů.
- V rozevíracím filtru REFRESH zaškrtněte políčko .
- Kliknutím na název příkazu dotazu zobrazíte souhrnné podrobnosti, jako je doba trvání dotazu a agregované metriky.
- Kliknutím na Zobrazit profil dotazu otevřete profil dotazu. Podrobnosti o navigaci v profilu dotazu najdete v tématu Profil dotazu.
- Volitelně můžete pomocí odkazů v části Zdroj dotazů otevřít související dotaz nebo kanál.
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ůžeSELECT
materializované zobrazení. -
REFRESH
– uživatel můžeREFRESH
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
NULL
a zůstanou v daném sloupci pouzeNULL
hodnoty, materializovaná zobrazení výsledná agregační hodnota je nula místoNULL
. - 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 hodnotfield_a
.