VYTVOŘENÍ MATERIALIZOVANÉHO ZOBRAZENÍ
Platí pro: Databricks SQL
Materializované zobrazení je zobrazení, ve kterém jsou k dispozici předpočítané výsledky pro dotaz a lze je 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 DLT. 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.
Poznámka:
Operace vytváření a aktualizace v materializovaných zobrazeních a streamovaných tabulkách využívají bezserverový kanál Delta Live Tables. 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, co je Průzkumník katalogu?
Syntaxe
{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
view_name
[ column_list ]
[ view_clauses ]
[schedule_clause]
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 [, ...]) |
COMMENT view_comment |
TBLPROPERTIES clause |
SCHEDULE [ REFRESH ] schedule_clause |
WITH { ROW FILTER clause } } [...]
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 VIEW
příkaz se ignoruje.Můžete zadat nejvýše jednu z nebo
IF NOT EXISTS
OR 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ýsledku dotazu 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ý
STRING
literál popisující název sloupce. 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á omezení informačního primárního klíče nebo informačního cizího klíče do sloupce v materializovaném zobrazení. Pokud typ sloupce není zadaný, omezení sloupce se přeskočí.
-
Důležité
Tato funkce je ve verzi Public Preview.
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 jemně odstupňované účely řízení přístupu, kdy funkce může zkontrolovat členství v identitě nebo skupině vyvolání uživatele a určit, jestli se má hodnota redakce provést. Pokud typ sloupce není zadaný, maska sloupce se přeskočí.
-
table_constraint
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.
VIEW_COMMENT KOMENTÁŘE
Literál
STRING
, který popisuje tabulku.-
Volitelně nastaví jednu nebo více uživatelem definovaných vlastností.
Pomocí tohoto nastavení můžete určit kanál modulu runtime Delta Live Tables použitý ke spuštění tohoto příkazu. Nastavte hodnotu
pipelines.channel
vlastnosti na"PREVIEW"
hodnotu nebo"CURRENT"
. Výchozí hodnota je"CURRENT"
. Další informace o kanálech Delta Live Tables naleznete v tématu Kanály modulu runtime Delta Live Tables. SCHEDULE [ REFRESH ] schedule_clause
EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }
Důležité
Tato funkce je ve verzi Public Preview.
Pokud chcete naplánovat aktualizaci, která se pravidelně provádí, použijte
EVERY
syntaxi. PokudEVERY
je zadaná syntaxe, je streamovaná tabulka nebo materializované zobrazení pravidelně aktualizována v zadaném intervalu na základě zadané hodnoty, napříkladHOUR
, ,HOURS
,DAY
DAYS
,WEEK
neboWEEKS
. Následující tabulka uvádí přijaté celočíselné hodnoty pronumber
.Časová jednotka Celočíselná hodnota HOUR or HOURS
1 <= H <= 72 DAY or DAYS
1 <= D <= 31 WEEK or WEEKS
1 <= 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ánování aktualizace pomocí hodnoty quartz cron . Jsou přijímány platné time_zone_values .
AT TIME ZONE LOCAL
není podporováno.Pokud
AT TIME ZONE
chybí, použije se časové pásmo relace. PokudAT TIME ZONE
chybí a časové pásmo relace není nastavené, vyvolá se chyba.SCHEDULE
je sémanticky ekvivalentníSCHEDULE REFRESH
.
KLAUZULE WITH ROW FILTER
Důležité
Tato funkce je ve verzi Public Preview.
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 logická hodnota PRAVDA. To může být užitečné pro jemně odstupňované účely řízení přístupu, kdy funkce může zkontrolovat členství v identitě nebo skupině vyvolání uživatele a určit, jestli se mají určité řádky filtrovat.
-
-
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í:
SELECT
oprávnění k základním tabulkám, na které odkazuje MV.USE CATALOG
oprávnění nadřazeného katalogu aUSE SCHEMA
oprávnění nadřazeného schématu.CREATE MATERIALIZED VIEW
oprávnění ke schématu MV.
Aby uživatel mohl aktualizovat MV, vyžaduje:
USE CATALOG
oprávnění nadřazeného katalogu aUSE SCHEMA
oprávnění nadřazeného schématu.- Vlastnictví MV nebo
REFRESH
oprávnění pro MV. - Vlastník MV musí mít
SELECT
oprávnění k základním tabulkám, na které odkazuje MV.
Aby uživatel mohl dotazovat MV, vyžaduje:
USE CATALOG
oprávnění nadřazeného katalogu aUSE SCHEMA
oprávnění nadřazeného schématu.SELECT
oprávnění k materializovanému zobrazení.
Filtry řádků a masky sloupců
Důležité
Tato funkce je ve verzi Public Preview.
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 Filtrování citlivých dat tabulky pomocí filtrů řádků a mask 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 CREATE
příkazu.
Chování
- Refresh as Definer: Když příkaz
REFRESH MATERIALIZED VIEW
aktualizuje 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_USER
aIS_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 se zásady zabezpečení ve zdrojových tabulkách vyhodnocují a použijí s nejaktuálnějšími daty a definicemi.
Pozorovatelnost
Pomocí funkce DESCRIBE EXTENDED
, INFORMATION_SCHEMA
nebo 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í
sum
nad sloupcem schopným s hodnotou NULL je z tohoto sloupce odebrána poslední hodnota, která není null , a proto pouzeNULL
hodnoty zůstanou v daném sloupci – výsledná agregační hodnota materializovaného zobrazení vrátí 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 NULL
musí být ručně zadán spolu s platným příkazemPRIMARY KEY
.- Materializovaná zobrazení nepodporují sloupce identit ani náhradní klíče.
- Materializovaná zobrazení nepodporují
OPTIMIZE
aVACUUM
příkazy. Ú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 daily at midnight.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
COMMENT 'Daily sales numbers'
SCHEDULE CRON '0 0 0 * * ? *'
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;