Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
Databricks SQL
materializované zobrazení je zobrazení, ve kterém jsou pro dotaz k dispozici předpočítané výsledky a dají se aktualizovat tak, aby odrážely změny ve vstupu. Při každé aktualizaci materializovaného zobrazení se výsledky dotazu přepočítávají tak, aby odrážely změny v nadřazených datových sadách. Všechna materializovaná zobrazení jsou podporována kanálem ETL. Materializovaná zobrazení můžete aktualizovat ručně nebo podle plánu.
Další informace o tom, jak provést ruční aktualizaci, najdete v tématu REFRESH (MATERIALIZED VIEW nebo STREAMING TABLE).
Další informace o plánování aktualizace najdete v tématu Příklady nebo ALTER MATERIALIZED VIEW.
Materializovaná zobrazení je možné vytvořit pouze pomocí pro nebo bezserverového SQL Warehouse nebo v rámci kanálu.
Poznámka:
Vytváření a aktualizace operací s materializovanými zobrazeními a streamovanými tabulkami využívají bezserverové deklarativní kanály Lakeflow Sparku. Průzkumníka katalogu můžete použít k zobrazení podrobností o záložních kanálech v uživatelském rozhraní. Podívejte se na Co je Průzkumník katalogu.
Syntaxe
{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
view_name
[ column_list ]
[ view_clauses ]
AS query
column_list
( { column_name column_type column_properties } [, ...]
[ , table_constraint ] [...])
column_properties
{ NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]
view_clauses
{ PARTITIONED BY (col [, ...]) |
CLUSTER BY clause |
COMMENT view_comment |
DEFAULT COLLATION UTF8_BINARY |
TBLPROPERTIES clause |
SCHEDULE [ REFRESH ] schedule_clause |
schedule |
WITH { ROW FILTER clause } } [...]
schedule
{ SCHEDULE [ REFRESH ] schedule_clause |
TRIGGER ON UPDATE [ AT MOST EVERY trigger_interval ] }
schedule_clause
{ EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
CRON cron_string [ AT TIME ZONE timezone_id ] }
Parametry
NAHRADIT
Pokud je zadáno, nahradí zobrazení a jeho obsah, pokud již existuje.
POKUD NEEXISTUJE
Vytvoří zobrazení, pokud neexistuje. Pokud zobrazení podle tohoto názvu již existuje,
CREATE MATERIALIZED VIEWpříkaz se ignoruje.Můžete zadat nejvýše jednu z možností
IF NOT EXISTSneboOR REPLACE.-
Název nově vytvořeného zobrazení Plně kvalifikovaný název zobrazení musí být jedinečný.
column_list
Volitelně označí sloupce ve výsledcích dotazu pro zobrazení. Pokud zadáte seznam sloupců, musí se počet aliasů sloupců shodovat s počtem výrazů v dotazu. Pokud není zadaný žádný seznam sloupců, aliasy se odvozují z textu zobrazení.
-
Názvy sloupců musí být jedinečné a mapované na výstupní sloupce dotazu.
column_type
Určuje datový typ sloupce. Materializovaná zobrazení nepodporují všechny datové typy podporované službou Azure Databricks.
column_comment
Volitelný
STRINGliterál popisující sloupec. Tato možnost musí být zadána společně s parametremcolumn_type. Pokud typ sloupce není zadaný, komentář sloupce se přeskočí.column_constraint
Přidá informační omezení primárního nebo cizího klíče do sloupce v materializovaném zobrazení. Pokud typ sloupce není zadaný, omezení sloupce se přeskočí.
-
Přidá funkci masky sloupce pro anonymizaci citlivých dat. Všechny následné dotazy z tohoto sloupce obdrží výsledek vyhodnocení této funkce místo původní hodnoty sloupce. To může být užitečné pro podrobné řízení přístupu, kdy funkce může zkontrolovat identitu nebo skupinové členství vyvolávajícího uživatele a určit, zda má být hodnota zredigována. Pokud typ sloupce není zadaný, maska sloupce se přeskočí.
-
omezení tabulky
Přidá omezení informačního primárního klíče nebo informačního cizího klíče do tabulky v materializovaném zobrazení. Pokud typ sloupce není zadaný, omezení tabulky se přeskočí.
view_clauses
Volitelně můžete zadat dělení, komentáře, uživatelem definované vlastnosti a plán aktualizace pro nové materializované zobrazení. Každou dílčí klauzuli lze zadat pouze jednou.
-
Volitelný seznam sloupců tabulky, podle kterých chcete tabulku rozdělit.
Poznámka:
Liquid Clustering poskytuje flexibilní a optimalizované řešení pro kategorizaci. Zvažte použití
CLUSTER BYmístoPARTITIONED BYpro materializovaná zobrazení. -
Volitelná klauzule pro shlukování podle podmnožiny sloupců. Pomocí automatického clusteringu liquid s
CLUSTER BY AUTOa Databricks inteligentně vybírá klíče clusteringu pro optimalizaci výkonu dotazů. Viz Použití metody 'liquid clustering' pro tabulky.Kapalinové shlukování nelze kombinovat s
PARTITIONED BY. ZOBRAZIT KOMENTÁŘ
Literál
STRING, který popisuje tabulku.VÝCHOZÍ KOLACE UTF8_BINARY
Platí pro:
Kontrola SQL Databricks
Databricks Runtime 17.1 a vyššíVynutí výchozí kolaci materializovaného zobrazení na
UTF8_BINARY. Tato klauzule je povinná, pokud schéma, ve kterém je zobrazení vytvořeno, má jinou výchozí kolaci nežUTF8_BINARY. Výchozí zřetězení materializovaného zobrazení se používá jako výchozí zřetězení v rámci zobrazení.-
Volitelně nastaví jednu nebo více uživatelem definovaných vlastností.
Toto nastavení použijte k určení kanálu modulu runtime Deklarativní pipelines Lakeflow Spark, který se používá ke spuštění tohoto příkazu. Nastavte hodnotu vlastnosti
pipelines.channelna"PREVIEW"nebo"CURRENT". Výchozí hodnota je"CURRENT". Další informace o kanálech deklarativních kanálů Spark Sparku najdete v tématu Kanály runtime deklarativních kanálů Spark Sparku. rozvrh
Plán může být buď příkaz,
SCHEDULEneboTRIGGERpříkaz.HARMONOGRAM [ REFRESH ] ustanovení_harmonogramu
EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }Pokud chcete naplánovat aktualizaci, která se pravidelně provádí, použijte
EVERYsyntaxi. Pokud je zadaná syntaxeEVERY, aktualizuje se streamovaná tabulka nebo materializované zobrazení pravidelně v zadaném intervalu na základě zadané hodnoty, napříkladHOUR,HOURS,DAY,DAYS,WEEKneboWEEKS. V následující tabulce jsou uvedeny celočíselné hodnoty pronumber.Časová jednotka Celočíselná hodnota HOUR or HOURS1 <= H <= 72 DAY or DAYS1 <= D <= 31 WEEK or WEEKS1 < = W < = 8 Poznámka:
Jednotné a množné číslo zahrnuté časové jednotky jsou sémanticky ekvivalentní.
CRON cron_string [ AT TIME ZONE timezone_id ]Naplánovat aktualizaci pomocí hodnoty quartz cron. Platné time_zone_values jsou akceptovány.
AT TIME ZONE LOCALnení podporováno.Pokud
AT TIME ZONEchybí, použije se časové pásmo relace. PokudAT TIME ZONEchybí a časové pásmo relace není nastavené, dojde k chybě.SCHEDULEje sémanticky ekvivalentníSCHEDULE REFRESH.
TRIGGER ON UPDATE [ NEJČASTĚJI KAŽDÝ trigger_interval ]
Důležité
Funkce
TRIGGER ON UPDATEje v beta verzi.Volitelně můžete tabulku nastavit tak, aby se aktualizovala, když se aktualizuje nadřazený zdroj dat, a to maximálně jednou za minutu. Nastavte hodnotu tak
AT MOST EVERY, aby vyžadovala alespoň minimální čas mezi aktualizacemi.Nadřazené zdroje dat musí být externí nebo spravované tabulky Delta (včetně materializovaných zobrazení nebo streamovaných tabulek) nebo spravovaná zobrazení, jejichž závislosti jsou omezené na podporované typy tabulek.
Povolení událostí souborů může zvýšit výkon triggerů a zvýšit některé limity pro aktualizace triggerů.
Jedná se
trigger_intervalo příkaz INTERVAL , který je alespoň 1 minuta.TRIGGER ON UPDATEmá následující omezení- Maximálně 10 nadřazených zdrojů dat pro materializované zobrazení při použití Triggeru ON UPDATE.
- Pomocí triggeru ON UPDATElze zadat maximálně 1000 streamovaných tabulek nebo materializovaných zobrazení.
- Výchozí
AT MOST EVERYhodnota klauzule je 1 minuta a nesmí být menší než 1 minuta.
-
Přidá do tabulky funkci filtru řádků. Všechny následné dotazy z této tabulky obdrží podmnožinu řádků, pro které se funkce vyhodnotí jako pravda. To může být užitečné pro jemně odstupňovanou kontrolu přístupu, kde funkce může zkontrolovat identitu nebo členství ve skupině uživatele, který vyvolal akci, a určit, zda filtrovat určité řádky.
-
-
Dotaz, který sestaví zobrazení ze základních tabulek nebo jiných zobrazení.
Požadována oprávnění
Uživatel, který vytvoří materializované zobrazení (MV), je vlastníkem MV a musí mít následující oprávnění:
-
SELECToprávnění k základním tabulkám, na které odkazuje MV. -
USE CATALOGprivilegium v nadřazeném katalogu aUSE SCHEMAprivilegium v nadřazeném schématu. -
CREATE MATERIALIZED VIEWoprávnění ke schématu MV.
Aby uživatel mohl aktualizovat MV, vyžaduje:
-
USE CATALOGprivilegium v nadřazeném katalogu aUSE SCHEMAprivilegium v nadřazeném schématu. - Vlastnictví MV nebo
REFRESHprivilegium na MV. - Vlastník MV musí mít oprávnění
SELECTk základním tabulkám, na které odkazuje MV.
Aby uživatel mohl dotazovat MV, potřebuje:
-
USE CATALOGprivilegium v nadřazeném katalogu aUSE SCHEMAprivilegium v nadřazeném schématu. -
SELECToprávnění k materializovanému zobrazení.
Filtry řádků a masky sloupců
Filtry řádků umožňují zadat funkci, která se použije jako filtr při každém načtení řádků v tabulce. Tyto filtry zajišťují, aby následné dotazy vracely pouze řádky, pro které se predikát filtru vyhodnotí jako true.
Masky sloupců umožňují maskovat hodnoty sloupce pokaždé, když tabulka načte řádky. Všechny budoucí dotazy týkající se tohoto sloupce obdrží výsledek vyhodnocení funkce nad sloupcem a nahrazení původní hodnoty sloupce.
Další informace o tom, jak používat filtry řádků a masky sloupců, najdete v tématu Filtry řádků a masky sloupců.
Správa filtrů řádků a masek sloupců
Filtry řádků a masky sloupců v materializovaných zobrazeních by měly být přidány prostřednictvím příkazu CREATE.
Chování
-
Refresh as Definer: Když příkaz
REFRESH MATERIALIZED VIEWaktualizuje materializované zobrazení, spustí se funkce filtru řádků s právy definovatele (jako vlastník tabulky). To znamená, že aktualizace tabulky používá kontext zabezpečení uživatele, který vytvořil materializované zobrazení. -
Dotaz: Zatímco většina filtrů běží s právy defineru, funkce, které kontrolují kontext uživatele (například
CURRENT_USERaIS_MEMBER) jsou výjimky. Tyto funkce se spouští jako invoker. Tento přístup vynucuje zabezpečení dat a řízení přístupu specifické pro uživatele na základě kontextu aktuálního uživatele. - Při vytváření materializovaných zobrazení ve zdrojových tabulkách, které obsahují filtry řádků a masky sloupců, je aktualizace materializovaného zobrazení vždy úplná aktualizace. Úplná aktualizace znovu zpracuje všechna data dostupná ve zdroji s nejnovějšími definicemi. Tím zajistíte, že zásady zabezpečení ve zdrojových tabulkách jsou vyhodnocovány a aplikovány s nejaktuálnějšími daty a definicemi.
Pozorovatelnost
Pomocí DESCRIBE EXTENDED, INFORMATION_SCHEMAnebo Průzkumníka katalogu můžete prozkoumat existující filtry řádků a masky sloupců, které platí pro dané materializované zobrazení. Tato funkce umožňuje uživatelům auditovat a kontrolovat přístup k datům a míry ochrany v materializovaných zobrazeních.
Omezení
- Když materializované zobrazení s agregací
sumnad sloupcem, který může obsahovat hodnoty NULL, má ze sloupce odebránu poslední hodnotu, která není NULL, a proto v daném sloupci zůstanou pouze hodnotyNULL, výsledná agregační hodnota materializovaného zobrazení dává nulu místoNULL. - Odkaz na sloupec nevyžaduje alias. Odkazové výrazy bez sloupců vyžadují alias, jak je znázorněno v následujícím příkladu:
- Povolený:
SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1 - Nepovoleno:
SELECT col1, SUM(col2) FROM t GROUP BY col1
- Povolený:
-
NOT NULLmusí být ručně zadán spolu sPRIMARY KEY, aby byl příkaz platný. - Materializovaná zobrazení nepodporují sloupce identit ani náhradní klíče.
- Materializovaná zobrazení nepodporují příkazy
OPTIMIZEaVACUUM. Údržba probíhá automaticky. - Materializovaná zobrazení nepodporují očekávání při definování omezení kvality dat.
Příklady
-- Create a materialized view if it doesn't exist
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create and schedule a materialized view to be refreshed whenever the
-- upstream data is updated
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
TRIGGER ON UPDATE
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create and schedule a materialized view to be refreshed every day.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
COMMENT 'Daily sales numbers'
SCHEDULE EVERY 1 DAY
AS SELECT date AS date, sum(sales) AS sumOfSales
FROM table1
GROUP BY date;
-- Sets the runtime channel to "PREVIEW"
> CREATE MATERIALIZED VIEW mv_preview
TBLPROPERTIES(pipelines.channel = "PREVIEW")
AS SELECT * FROM RANGE(10)
-- Create a materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
member_id int NOT NULL,
full_name string,
movie_title string,
CONSTRAINT movie_pk PRIMARY KEY(member_id)
)
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create or replace the materialized view to remove the table constraint and add a partition
> CREATE OR REPLACE MATERIALIZED VIEW subscribed_movies
PARTITIONED BY (member_id)
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create a materialized view with a row filter and a column mask
> CREATE MATERIALIZED VIEW masked_view (
id int,
name string,
region string,
ssn string MASK catalog.schema.ssn_mask_fn
)
WITH ROW FILTER catalog.schema.us_filter_fn ON (region)
AS SELECT id, name, region, ssn
FROM employees;