Sdílet prostřednictvím


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

Důležité

Tato funkce je ve verzi Public Preview.

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.

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 na platformě Databricks Data Intelligence s uvedením tabulek Delta Live Tables. Když vytvoříte materializované zobrazení ve službě Databricks SQL Warehouse, vytvoří se kanál Delta Live Tables pro zpracování aktualizací v materializovaném zobrazení. Stav operací aktualizace můžete monitorovat v uživatelském rozhraní delta živých tabulek, v rozhraní API delta živých tabulek nebo v rozhraní příkazového řádku delta živých tabulek. Viz Zobrazení stavu materializované aktualizace zobrazení.

Požadavky

  • K vytváření a aktualizaci materializovaných zobrazení musíte použít Databricks SQL Warehouse s podporou katalogu Unity.

  • Váš pracovní prostor musí být v oblasti bez serveru.

Informace o omezeních při použití materializovaných zobrazení v Databricks SQL najdete v tématu Omezení.

Vytvoření materializovaného zobrazení

K vytvoření materializovaného zobrazení použijte CREATE MATERIALIZED VIEW příkaz. Viz CREATE MATERIALIZED VIEW in the Databricks SQL reference. 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
  table1
GROUP BY
  date;

Jak se vytvářejí materializovaná 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í. Vzhledem k tomu, že vytvoření materializovaného zobrazení je synchronní operace ve službě Databricks SQL Warehouse, blokuje příkazy, CREATE MATERIALIZED VIEW dokud se nevytvoří materializované zobrazení a počáteční načtení dat se dokončí. Kanál Delta Live Tables se automaticky vytvoří pro každé materializované zobrazení SQL Databricks. Při aktualizaci materializovaného zobrazení se spustí aktualizace kanálu Delta Live Tables.

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. K aktualizaci materializovaného zobrazení použijte REFRESH MATERIALIZED VIEW příkaz. Viz REFRESH (MATERIALIZED VIEW and STREAMING TABLE) v referenčních informacích k Databricks SQL. Pokud chcete odeslat příkaz aktualizace, použijte editor SQL v uživatelském rozhraní Azure Databricks, 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 Live Tables ke zpracování operací aktualizace. Vzhledem k tomu, že aktualizaci spravuje kanál Delta Live Tables, databricks SQL Warehouse sloužící k vytvoření materializovaného zobrazení se nepoužívá a během operace aktualizace nemusí být spuštěna.

Kanály Delta Live Tables používají režim průběžného nebo aktivovaného spouštění. Materializovaná zobrazení je možné aktualizovat v režimu spuštění. Aby se zabránilo zbytečnému zpracování při provozu v režimu průběžného spouštění, kanály automaticky monitorují závislé tabulky Delta a provádějí aktualizaci pouze v případě, že se změnil obsah těchto závislých tabulek. Podívejte se, co je kanál Delta Live Tables?

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ě. Chování spojené s jednotlivými přístupy je následující:

  • Synchronní: Synchronní aktualizace blokuje další operace, dokud nebude operace aktualizace dokončena. To umožňuje sekvencovat operace aktualizace v nástroji pro orchestraci, jako jsou pracovní postupy. K orchestraci materializovaných zobrazení pomocí pracovních postupů použijte typ úlohy SQL . Viz Úvod do pracovních postupů Azure Databricks.
  • Asynchronní: Asynchronní aktualizace spustí úlohu na pozadí na rozdílových živých tabulkách při zahájení materializované aktualizace zobrazení a příkaz se vrátí před dokončením načtení dat. Protože kanál Delta Live Tables spravuje aktualizaci, databricks SQL Warehouse použitá k vytvoření materializovaného zobrazení se nepoužívá. Během operace aktualizace nemusí být spuštěný.

Některé dotazy je možné přírůstkově aktualizovat. Viz Operace 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. Tento plán nakonfigurujte pomocí SCHEDULE klauzule při vytváření materializovaného zobrazení nebo přidání plánu pomocí příkazu ALTER VIEW. Při vytvoření plánu se automaticky nakonfiguruje nová úloha Databricks pro zpracování aktualizace. Plán můžete kdykoli zobrazit pomocí DESCRIBE EXTENDED příkazu.

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

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.

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

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:

  • Pokud příkaz odešlete REFRESH v editoru SQL, postupujte podle odkazu na panelu Výsledky.
  • Postupujte podle odkazu vráceného příkazem DESCRIBE EXTENDED .
  • Na kartě rodokmenu materializovaného zobrazení klikněte na Kanály a potom klikněte na odkaz kanálu.

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.

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

  • Klikněte na Ikona ÚlohPracovní postupy a potom klikněte na kartu Delta Live Tables (Rozdílové živé tabulky).
  • Klikněte na název kanálu, jehož vlastník chcete změnit.
  • Klikněte na Nabídka Kebab nabídku kebab napravo od názvu kanálu a klikněte na Oprávnění. Otevře se dialogové okno 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í může udělit SELECT oprávnění jiným uživatelům. 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 SELECT jsou oprávnění k základní tabulce odvolána od vlastníka materializovaného zobrazení nebo jakéhokoli jiného uživatele, který má udělená SELECT oprávnění k materializovanému zobrazení, nebo dojde k vyřazení základní tabulky, materializovaný vlastník zobrazení nebo uživatel s uděleným přístupem bude moct 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?

Určení, jestli se používá přírůstková nebo úplná aktualizace

K optimalizaci výkonu materializovaných aktualizací zobrazení používá Azure Databricks k výběru techniky použité pro aktualizaci nákladový model. Následující tabulka popisuje tyto techniky:

Postup Přírůstková aktualizace? Popis
FULL_RECOMPUTE No Materializované zobrazení bylo plně přepočítané.
NO_OP Nelze použít Materializované zobrazení nebylo aktualizováno, protože nebyly zjištěny žádné změny základní tabulky.
ROW_BASED nebo PARTITION_OVERWRITE Ano Materializované zobrazení bylo přírůstkově aktualizováno pomocí zadané techniky.

Pokud chcete zjistit použitou techniku, zadejte dotaz na protokol událostí Delta Live Tables, kde event_type je planning_information:

SELECT
  timestamp,
  message
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = 'planning_information'
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í

  • Existují omezení, jak se dají spravovat virtuální počítače a kde se dají dotazovat:

    • Materializovaná zobrazení SQL Databricks je možné vytvářet a aktualizovat pouze v databázích pro SQL Warehouse a bezserverových skladech SQL.
    • Materializované zobrazení SQL Databricks je možné aktualizovat pouze z pracovního prostoru, který ho vytvořil.
    • Vlastník materializovaného zobrazení SQL Databricks může dotazovat materializované zobrazení z jednoho clusteru režimu přístupu uživatele. Jinak se materializovaná zobrazení SQL Databricks dají dotazovat jenom ze skladů Databricks SQL, rozdílových živých tabulek a sdílených clusterů se spuštěným modulem Databricks Runtime 11.3 nebo novějším.
  • 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.

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

  • Materializovaná zobrazení SQL databricks nejsou podporována v oblastech USA – středojiž a USA – západ 2.