Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:
Databricks SQL
zmaterializowany widok to widok, w którym są dostępne wstępnie obliczone wyniki dla zapytania i można je zaktualizować, aby odzwierciedlić zmiany w danych wejściowych. Za każdym razem, gdy zmaterializowany widok jest odświeżany, wyniki zapytania są ponownie obliczane w celu odzwierciedlenia zmian w nadrzędnych zestawach danych. Wszystkie zmaterializowane widoki są wspierane przez potok ETL. Możesz odświeżyć widoki zmaterializowane ręcznie lub zgodnie z harmonogramem.
Aby dowiedzieć się więcej na temat wykonywania odświeżania ręcznego, zobacz REFRESH (MATERIALIZED VIEW lub STREAMING TABLE).
Aby dowiedzieć się więcej o planowaniu odświeżania, zobacz Przykłady lub ALTER MATERIALIZED VIEW.
Zmaterializowane widoki można tworzyć wyłącznie przy użyciu serwera SQL Pro lub Bezserwerowego, albo w ramach potoku.
Uwaga
Operacje tworzenia i odświeżania zmaterializowanych widoków oraz tabel przesyłania strumieniowego są obsługiwane przez bezserwerowe Deklaratywne Potoki Lakeflow Spark. Eksplorator wykazu umożliwia wyświetlanie szczegółowych informacji o potokach tworzenia kopii zapasowych w interfejsie użytkownika. Zobacz Co to jest Eksplorator katalogu?.
Składnia
{ 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
Zamień
Jeśli zostanie określony, zastępuje widok i jego zawartość, jeśli już istnieje.
JEŚLI NIE ISTNIEJE
Tworzy widok, jeśli nie istnieje. Jeśli widok o tej nazwie już istnieje,
CREATE MATERIALIZED VIEWinstrukcja jest ignorowana.Możesz określić co najwyżej jeden z
IF NOT EXISTSlubOR REPLACE.-
Nazwa nowo utworzonego widoku. W pełni kwalifikowana nazwa widoku musi być unikatowa.
column_list
Opcjonalnie etykietuje kolumny w wynikach zapytania widoku. Jeśli podasz listę kolumn, liczba aliasów kolumn musi być zgodna z liczbą wyrażeń w zapytaniu. Jeśli nie określono listy kolumn, aliasy pochodzą z treści widoku.
-
Nazwy kolumn muszą być unikatowe i odpowiadać kolumnom wyjściowym zapytania.
typ_kolumny
Określa typ danych kolumny. Nie wszystkie typy danych obsługiwane przez usługę Azure Databricks są obsługiwane przez zmaterializowane widoki.
column_comment
Opcjonalny literał
STRINGopisujący kolumnę. Tę opcję należy określić wraz zcolumn_type. Jeśli typ kolumny nie zostanie określony, komentarz kolumny zostanie pominięty.column_constraint
Dodaje ograniczenie klucza podstawowego lub klucza obcego o charakterze informacyjnym do kolumny w zmaterializowanym widoku. Jeśli typ kolumny nie zostanie określony, ograniczenie kolumny zostanie pominięte.
-
Dodaje funkcję maski kolumn do anonimowości poufnych danych. Wszystkie kolejne zapytania z tej kolumny otrzymują wynik oceny tej funkcji w kolumnie zamiast oryginalnej wartości kolumny. Może to być przydatne w celach szczegółowej kontroli dostępu, w których funkcja może sprawdzić tożsamość lub członkostwo w grupach użytkownika wywołującego w celu określenia, czy zredagować wartość. Jeśli typ kolumny nie zostanie określony, maska kolumny zostanie pominięta.
-
ograniczenie tabeli
Dodaje ograniczenie klucza głównego informacyjnego lub klucza obcego informacyjnego do tabeli w zmaterializowanym widoku. Jeśli typ kolumny nie zostanie określony, ograniczenie tabeli zostanie pominięte.
view_clauses
Opcjonalnie określ partycjonowanie, komentarze, właściwości zdefiniowane przez użytkownika i harmonogram odświeżania dla nowego zmaterializowanego widoku. Każda klauzula podrzędna może być określona tylko raz.
-
Opcjonalna lista kolumn, według których tabela jest partycjonowana.
Uwaga
Liquid clustering zapewnia elastyczne, zoptymalizowane rozwiązanie do klastrowania. Rozważ użycie
CLUSTER BYzamiastPARTITIONED BYw przypadku zmaterializowanych widoków. -
Klauzula opcjonalna do klastrowania według podzestawu kolumn. Użyj automatycznego klastrowania liquid z usługą
CLUSTER BY AUTO, a usługa Databricks inteligentnie wybiera klucze klastrowania, aby zoptymalizować wydajność zapytań. Zobacz Używaj płynnego grupowania dla tabel.Klastrowanie liquid nie może być łączone z
PARTITIONED BY. KOMENTARZ wyświetl_komentarz
Literał
STRINGsłużący do opisania tabeli.DOMYŚLNE SORTOWANIE UTF8_BINARY
Dotyczy:
, sprawdź, czy usługa SQL databricks
Databricks Runtime 17.1 lub nowszaWymusza domyślne uporządkowanie zmaterializowanego widoku na
UTF8_BINARY. Ta klauzula jest obowiązkowa, jeśli schemat, w którym jest tworzony widok, ma sortowanie domyślne inne niżUTF8_BINARY. Domyślne sortowanie zmaterializowanego widoku jest używane jako domyślne sortowanie w treści widoku.-
Opcjonalnie ustawia co najmniej jedną właściwość zdefiniowaną przez użytkownika.
To ustawienie służy do określania kanału wykonawczego Spark Lakeflow używanego do wykonania tego polecenia. Ustaw wartość właściwości
pipelines.channelna wartość"PREVIEW"lub"CURRENT". Domyślna wartość to"CURRENT". Aby uzyskać więcej informacji na temat kanałów deklaratywnych potoków platformy Spark w usłudze Lakeflow, zobacz Kanały środowiska uruchomieniowego potoków deklaratywnych platformy Lakeflow. harmonogram
Harmonogram może być instrukcją
SCHEDULElub instrukcjąTRIGGER.harmonogram [ REFRESH ] klauzula harmonogramu
EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }Aby zaplanować odświeżanie okresowo, użyj składni
EVERY. Jeśli określono składnięEVERY, tabela strumieniowana lub zmaterializowany widok jest okresowo odświeżany w określonych odstępach czasu na podstawie podanej wartości, takiej jakHOUR,HOURS,DAY,DAYS,WEEKlubWEEKS. W poniższej tabeli wymieniono zaakceptowane wartości całkowite dlanumber.Jednostka czasu Wartość całkowita HOUR or HOURS1 <= H <= 72 DAY or DAYS1 <= D <= 31 WEEK or WEEKS1 <= W <= 8 Uwaga
Liczba pojedyncza i mnoga dołączonej jednostki czasowej są semantycznie równoważne.
CRON cron_string [ AT TIME ZONE timezone_id ]Aby zaplanować odświeżanie przy użyciu wartości quartz cron. Akceptowane są prawidłowe time_zone_values .
AT TIME ZONE LOCALnie jest obsługiwana.Jeśli
AT TIME ZONEjest nieobecny, używana jest strefa czasowa sesji. JeśliAT TIME ZONEjest nieobecny, a strefa czasowa sesji nie jest ustawiona, zostanie zgłoszony błąd.SCHEDULEjest semantycznie równoważne .SCHEDULE REFRESH
WYZWALACZ NA UPDATE [ CO NAJWYŻEJ CO TRIGGER_INTERVAL ]
Ważne
Funkcja
TRIGGER ON UPDATEjest dostępna w wersji beta.Opcjonalnie ustaw tabelę tak, aby odświeżyła się po zaktualizowaniu nadrzędnego źródła danych, co najwyżej co minutę. Ustaw wartość ,
AT MOST EVERYaby wymagać co najmniej minimalnego czasu między odświeżeniami.Nadrzędne źródła danych muszą być zewnętrznymi lub zarządzanymi tabelami delty (w tym zmaterializowanymi widokami lub tabelami przesyłania strumieniowego) albo widokami zarządzanymi, których zależności są ograniczone do obsługiwanych typów tabel.
Włączenie zdarzeń plików może sprawić, że wyzwalacze będą bardziej wydajne i zwiększa niektóre limity dotyczące aktualizacji wyzwalacza.
Jest
trigger_intervalto instrukcja INTERVAL , która jest co najmniej 1 minuta.TRIGGER ON UPDATEma następujące ograniczenia- Nie więcej niż 10 nadrzędnych źródeł danych na widok materializowany przy użyciu TRIGGER ON UPDATE.
- Maksymalnie 1000 tabel przesyłania strumieniowego lub zmaterializowanych widoków można określić za pomocą TRIGGER ON UPDATE.
- Klauzula
AT MOST EVERYjest domyślnie ustawiona na 1 minutę i nie może być mniejsza niż 1 minuta.
Z klauzulą ROW FILTER
Dodaje do tabeli funkcję filtru wierszy. Wszystkie kolejne zapytania z tej tabeli otrzymują podzbiór wierszy, dla których funkcja zwraca wartość logiczną TRUE. Może to być przydatne w celach szczegółowej kontroli dostępu, w których funkcja może sprawdzić tożsamość lub członkostwo w grupach użytkownika wywołującego w celu określenia, czy filtrować niektóre wiersze.
-
-
Zapytanie, które konstruuje widok z tabel podstawowych lub innych widoków.
Wymagane uprawnienia
Użytkownik tworzący zmaterializowany widok (MV) jest właścicielem mv i musi mieć następujące uprawnienia:
-
SELECTuprawnienia dotyczące tabel podstawowych, do których odwołuje się MV. - uprawnienie
USE CATALOGw katalogu nadrzędnym oraz uprawnienieUSE SCHEMAw schemacie nadrzędnym. -
CREATE MATERIALIZED VIEWuprawnienia w schemacie dla MV.
Aby użytkownik mógł odświeżyć MV, potrzebuje:
- uprawnienie
USE CATALOGw katalogu nadrzędnym oraz uprawnienieUSE SCHEMAw schemacie nadrzędnym. - Własność MV lub
REFRESHprzywilej na MV. - Właściciel MV musi mieć przywilej
SELECTdotyczący tabel podstawowych, do których odwołuje się MV.
Aby użytkownik mógł wykonywać zapytania dotyczące MV, potrzebuje:
- uprawnienie
USE CATALOGw katalogu nadrzędnym oraz uprawnienieUSE SCHEMAw schemacie nadrzędnym. -
SELECTuprawnienia do materializowanego widoku.
Filtry wierszy i maski kolumn
Filtry wierszy umożliwiają określenie funkcji, która ma zastosowanie jako filtr za każdym razem, gdy skanowanie tabeli pobiera wiersze. Te filtry zapewniają, że kolejne zapytania zwracają tylko wiersze, dla których predykat filtru daje wartość true.
Maski kolumn umożliwiają maskowanie wartości kolumny za każdym razem, gdy skanowanie tabeli pobiera wiersze. Wszystkie przyszłe zapytania obejmujące tę kolumnę otrzymają wynik oceny funkcji w kolumnie, zastępując oryginalną wartość kolumny.
Aby uzyskać więcej informacji na temat używania filtrów wierszy i masek kolumn, zobacz Filtry wierszy i maski kolumn.
Zarządzanie filtrami wierszy i maskami kolumn
Filtry wierszy i maski kolumn w widokach materializowanych należy dodawać za pomocą instrukcji CREATE.
Zachowanie
-
Odśwież jako definiujący: gdy
REFRESH MATERIALIZED VIEWinstrukcja odświeża zmaterializowany widok, funkcje filtrowania wierszy są uruchamiane z uprawnieniami definiującego (jako właściciel tabeli). Oznacza to, że odświeżanie tabeli używa kontekstu zabezpieczeń użytkownika, który utworzył zmaterializowany widok. -
Zapytanie: Podczas gdy większość filtrów jest uruchamiana z prawami definiowanego, funkcje sprawdzające kontekst użytkownika (takie jak
CURRENT_USERiIS_MEMBER) są wyjątkami. Te funkcje działają jako wywołujący. Takie podejście wymusza zabezpieczenia danych specyficzne dla użytkownika i mechanizmy kontroli dostępu na podstawie kontekstu bieżącego użytkownika. - Podczas tworzenia zmaterializowanych widoków w tabelach źródłowych zawierających filtry wierszy i maski kolumn odświeżanie zmaterializowanego widoku jest zawsze pełnym odświeżaniem. Pełne odświeżanie ponownie przetwarza wszystkie dane dostępne w źródle przy użyciu najnowszych definicji. Zapewnia to, że zasady bezpieczeństwa w tabelach źródłowych są oceniane i stosowane z wykorzystaniem najbardziej aktualnych danych i definicji.
Obserwowalność
Użyj DESCRIBE EXTENDED, INFORMATION_SCHEMAlub Eksploratora wykazu, aby zbadać istniejące filtry wierszy i maski kolumn, które mają zastosowanie do danego zmaterializowanego widoku. Ta funkcja umożliwia użytkownikom kontrolowanie i przeglądanie dostępu do danych oraz środków bezpieczeństwa w zmaterializowanych widokach.
Ograniczenia
- Gdy zmaterializowany widok z agregacją w kolumnie, która może zawierać wartości NULL, ma ostatnią wartość inną niż NULL usuniętą z tej kolumny, przez co pozostają tylko wartości
sum, wtedy wynikowa wartość agregowana tego widoku zwraca zero zamiastNULL. - Odwołanie do kolumny nie wymaga aliasu. Wyrażenia nieodwołujące się do kolumn wymagają aliasu, jak w poniższym przykładzie:
- Dozwolone:
SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1 - Niedozwolone:
SELECT col1, SUM(col2) FROM t GROUP BY col1
- Dozwolone:
-
NOT NULLnależy określić ręcznie wraz z instrukcjąPRIMARY KEY, aby być prawidłową instrukcją. - Zmaterializowane widoki nie obsługują kolumn tożsamości ani kluczy zastępczych.
- Zmaterializowane widoki nie obsługują poleceń
OPTIMIZEiVACUUM. Konserwacja odbywa się automatycznie. - Zmaterializowane widoki nie obsługują oczekiwań dotyczących definiowania ograniczeń jakości danych.
Przykłady
-- 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;