Přírůstková aktualizace pro materializovaná zobrazení
Tento článek popisuje sémantiku a požadavky na přírůstkové aktualizace v materializovaných zobrazeních a identifikuje operace SQL, klíčová slova a klauzule, které podporují přírůstkovou aktualizaci. Obsahuje diskuzi o rozdílech mezi přírůstkovými a úplnými aktualizacemi a obsahuje doporučení pro výběr mezi materializovanými zobrazeními a streamovanými tabulkami.
Při spouštění aktualizací v materializovaných zobrazeních pomocí bezserverových kanálů je možné přírůstkově aktualizovat mnoho dotazů. Postupné aktualizace šetří náklady na výpočetní prostředky tím, že detekují změny ve zdrojích dat používaných k definování materializovaného zobrazení a přírůstkově vypočítávají výsledek.
Pro přírůstkovou aktualizaci se vyžadují bezserverové datové toky.
Přírůstková aktualizace materializovaných zobrazení vyžaduje bezserverové kanály.
Operace aktualizace pro materializovaná zobrazení definovaná v Databricks SQL vždy běží pomocí bezserverových kanálů.
V případě materializovaných zobrazení definovaných pomocí kanálů DLT musíte kanál nakonfigurovat tak, aby používal bezserverovou verzi. Viz Konfigurace bezserverového kanálu DLT.
Jaké jsou sémantiky aktualizace pro materializovaná zobrazení?
Materializovaná zobrazení zaručují ekvivalentní výsledky dávkových dotazů. Představte si například následující agregační dotaz:
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Když tento dotaz spustíte pomocí libovolného produktu Azure Databricks, vypočítá se výsledek pomocí dávkové sémantiky k agregaci všech záznamů ve zdroji transactions_table
, což znamená, že se všechna zdrojová data kontrolují a agregují v jedné operaci.
Poznámka:
Některé produkty Azure Databricks ukládají výsledky do mezipaměti automaticky v rámci relací nebo napříč relacemi, pokud se zdroje dat po spuštění posledního dotazu nezměnily. Strategie automatického ukládání do mezipaměti se liší od materializovaných zobrazení.
Následující příklad změní tento dávkový dotaz na materializované zobrazení:
CREATE OR REPLACE MATERIALIZED VIEW transation_summary AS
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Při aktualizaci materializovaného zobrazení se vypočítaný výsledek shoduje s sémantikou dávkového dotazu. Tento dotaz je příkladem materializovaného zobrazení, které lze přírůstkově aktualizovat, což znamená, že se operace aktualizace snaží zpracovat pouze nová nebo změněná data ve zdrojovém transactions_table
k výpočtu výsledků.
Důležité informace o zdroji dat pro materializovaná zobrazení
I když můžete definovat materializované zobrazení pro jakýkoli zdroj dat, ne všechny zdroje dat jsou vhodné pro materializovaná zobrazení. Zvažte následující upozornění a doporučení:
Důležité
Materializovaná zobrazení se snaží provést pokus o přírůstkovou aktualizaci výsledků podporovaných operací. Některé změny ve zdrojích dat vyžadují úplnou aktualizaci.
Všechny zdroje dat pro materializovaná zobrazení by měly být robustní pro sémantiku úplné aktualizace, i když dotaz definující materializované zobrazení podporuje přírůstkovou aktualizaci.
- V případě dotazů, kdy by úplná aktualizace byla nákladná, použijte streamovací tabulky k zajištění přesně jednou zpracování. Mezi příklady patří velmi velké tabulky.
- Nedefinujte materializované zobrazení pro zdroj dat, pokud by záznamy měly být zpracovány pouze jednou. Místo toho používejte streamované tabulky. Mezi příklady patří:
- Zdroje dat, které si nezachovávají historii dat, například Kafka.
- Operace ingestování, jako jsou dotazy, které používají Auto Loader k načítání dat z cloudového úložiště objektů.
- Jakýkoli zdroj dat, ve kterém plánujete odstranit nebo archivovat data po zpracování, ale potřebujete zachovat informace v podřízených tabulkách. Například tabulka s datem rozdělená na oddíly, ve které plánujete odstranit záznamy starší než určitou prahovou hodnotu.
- Ne všechny zdroje dat podporují přírůstkové aktualizace. Následující zdroje dat podporují přírůstkovou aktualizaci:
- Tabulky Delta, včetně spravovaných tabulek Katalogu Unity a externích tabulek založených na Delta Lake
- Materializovaná zobrazení.
- Streamovací tabulky, včetně cílů operací
APPLY CHANGES INTO
- Některé operace přírůstkové aktualizace vyžadují povolení sledování řádků u dotazovaných zdrojů dat. Sledování řádků je funkce Delta Lake podporovaná pouze tabulkami Delta, mezi které patří materializovaná zobrazení, streamované tabulky a spravované tabulky Unity Catalog. Vizte Použijte sledování řádků pro tabulky Delta.
Optimalizace materializovaných zobrazení
Pro zajištění nejlepšího výkonu doporučuje Databricks povolit následující funkce ve všech materializovaných zdrojových tabulkách zobrazení:
Typy aktualizací pro materializovaná zobrazení
Aktualizace materializovaných zobrazení jsou buď úplné, nebo přírůstkové. U všech operací jsou výsledky přírůstkové aktualizace a úplné aktualizace stejné. Azure Databricks spouští analýzu nákladů, která zjišťuje, jestli změny zdrojů dat vyžadují úplnou aktualizaci.
Informace o tom, jak určit typ obnovení, který aktualizace použila, naleznete v tématu Určení typu obnovení aktualizace.
Úplná aktualizace
Úplná aktualizace přepíše výsledky v materializovaném zobrazení opětovným zpracováním všech dat dostupných ve zdroji. Všechna materializovaná zobrazení můžou být v každé dané aktualizaci plně aktualizována v závislosti na tom, jak se změnily zdroje dat.
Volitelně můžete vynutit úplnou aktualizaci. Pro materializovaná zobrazení definovaná pomocí Databricks SQL použijte následující syntaxi:
REFRESH MATERIALIZED VIEW mv_name FULL
U materializovaných zobrazení definovaných v kanálu DLT můžete spustit úplnou aktualizaci u vybraných datových sad nebo u všech datových sad v kanálu. Vizte sémantika aktualizace potrubí .
Důležité
Když se úplná aktualizace spustí ve zdroji dat, kde byly záznamy odebrány z důvodu prahové hodnoty uchovávání dat nebo ručního odstranění, odebrané záznamy se ve vypočítaných výsledcích neprojeví. Pokud už data nejsou ve zdroji dostupná, možná nebudete moct obnovit stará data.
Poznámka:
Můžete volitelně zakázat úplné aktualizace v tabulce nastavením vlastnosti tabulky pipelines.reset.allowed
na false
.
Přírůstková aktualizace
Přírůstková aktualizace zpracovává změny v podkladových datech po poslední aktualizaci a pak tato data připojí k tabulce. V závislosti na základních tabulkách a zahrnutých operacích lze přírůstkově aktualizovat pouze určité typy materializovaných zobrazení.
Přírůstkovou aktualizaci můžou používat pouze materializovaná zobrazení aktualizovaná pomocí bezserverových kanálů. Materializovaná zobrazení, která nepoužívají bezserverové kanály, se vždy plně aktualizují.
Při vytváření materializovaných zobrazení pomocí sql warehouse nebo bezserverového kanálu DLT se automaticky aktualizují, pokud jsou jejich dotazy podporovány. Pokud dotaz obsahuje nepodporované výrazy pro přírůstkovou aktualizaci, provede se úplná aktualizace, což může mít za následek další náklady.
podpora pro přírůstkovou aktualizaci materializovaného zobrazení
Následující tabulka uvádí podporu přírůstkové aktualizace podle klíčového slova nebo klauzule SQL.
Důležité
Některá klíčová slova a klauzule vyžadují povolení sledování řádků u dotazovaných zdrojů dat. Vizte Použijte sledování řádků pro tabulky Delta.
Tato klíčová slova a klauzule jsou v následující tabulce označené hvězdičkou (*).
Klíčové slovo nebo klauzule SQL | Podpora přírůstkové aktualizace |
---|---|
SELECT výrazy* |
Ano, podporují se výrazy včetně deterministických předdefinovaných funkcí a neměnných uživatelem definovaných funkcí (UDF). |
GROUP BY |
Ano |
WITH |
Ano, podporují se běžné výrazy tabulek. |
UNION ALL * |
Ano |
FROM |
Mezi podporované základní tabulky patří tabulky Delta, materializovaná zobrazení a tabulky streamování. |
WHERE , HAVING * |
Klauzule filtru, jako WHERE a HAVING , jsou podporovány. |
INNER JOIN * |
Ano |
LEFT OUTER JOIN * |
Ano |
FULL OUTER JOIN * |
Ano |
RIGHT OUTER JOIN * |
Ano |
OVER |
Ano.
PARTITION_BY sloupce musí být zadány pro inkrementaci okenních funkcí. |
QUALIFY |
Ano |
EXPECTATIONS |
Ne. Materializovaná zobrazení, která používají očekávání, se vždy plně aktualizují. |
Poznámka:
Ne deterministické funkce, například CURRENT_TIMESTAMP
, nejsou podporovány.
Určení typu 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:
Technika | Přírůstková aktualizace? | Popis |
---|---|---|
FULL_RECOMPUTE |
Ne | 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 , PARTITION_OVERWRITE nebo WINDOW_FUNCTION |
Ano | Materializované zobrazení bylo přírůstkově aktualizováno pomocí zadané techniky. |
APPEND_ONLY |
Ano | Materializované zobrazení bylo přírůstkově aktualizováno, protože změny vstupů a materializovaného zobrazení byly pouze přidány. |
GROUP_AGGREGATE nebo GENERIC_AGGREGATE |
Ano | Materializované zobrazení bylo přírůstkově aktualizováno pomocí agregační funkce. |
Pokud chcete určit použitou techniku, zadejte dotaz na protokol událostí DLT, kde je event_type
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.