Używanie zmaterializowanych widoków w usłudze Databricks SQL
Uwaga
Jeśli musisz użyć połączenia usługi Azure Private Link z zmaterializowanym widokiem, skontaktuj się z przedstawicielem usługi Databricks.
W tym artykule opisano sposób tworzenia i używania zmaterializowanych widoków w usłudze Databricks SQL w celu zwiększenia wydajności i zmniejszenia kosztów obciążeń przetwarzania i analizy danych.
Ważne
Zmaterializowane widoki utworzone w usłudze Databricks SQL są wspierane przez potok bezserwerowych tabel delta live tables. Aby korzystać z tej funkcji, obszar roboczy musi obsługiwać potoki bezserwerowe.
W usłudze Databricks SQL zmaterializowane widoki to tabele zarządzane przez wykaz aparatu Unity, które pozwalają użytkownikom wstępnie skompilować wyniki na podstawie najnowszej wersji danych w tabelach źródłowych. Zmaterializowane widoki w usłudze Azure Databricks różnią się od innych implementacji, ponieważ zwrócone wyniki odzwierciedlają stan danych, gdy zmaterializowany widok został ostatnio odświeżony, a nie zawsze aktualizując wyniki podczas wykonywania zapytań dotyczących zmaterializowanego widoku. Możesz ręcznie odświeżyć zmaterializowane widoki lub zaplanować odświeżanie.
Zmaterializowane widoki są zaawansowane w przypadku obciążeń przetwarzania danych, takich jak przetwarzanie wyodrębniania, przekształcania i ładowania (ETL). Zmaterializowane widoki zapewniają prosty, deklaratywny sposób przetwarzania danych pod kątem zgodności, poprawek, agregacji lub ogólnego przechwytywania danych zmian (CDC). Zmaterializowane widoki zmniejszają koszty i zwiększają opóźnienie zapytań przez wstępne przetwarzanie wolnych zapytań i często używanych obliczeń. Zmaterializowane widoki umożliwiają również łatwe w użyciu przekształcenia, czyszcząc, wzbogacając i denormalizując tabele podstawowe. Zmaterializowane widoki mogą obniżyć koszty, zapewniając uproszczone środowisko użytkownika końcowego, ponieważ w niektórych przypadkach mogą przyrostowo obliczać zmiany z tabel bazowych.
Zmaterializowane widoki były po raz pierwszy obsługiwane w usłudze Azure Databricks z uruchomieniem funkcji Delta Live Tables. Podczas tworzenia zmaterializowanego widoku w usłudze Databricks SQL Warehouse tworzony jest potok bezserwerowy w celu przetworzenia odświeżeń do zmaterializowanego widoku. Stan operacji odświeżania można monitorować w interfejsie użytkownika tabel delta Live Tables lub interfejsie API potoków. Zobacz Wyświetlanie stanu zmaterializowanego odświeżania widoku.
Musisz użyć pro lub bezserwerowego magazynu SQL Warehouse z obsługą wykazu aparatu Unity.
Aby odświeżyć zmaterializowany widok, musisz znajdować się w utworzonym obszarze roboczym.
Obszar roboczy musi znajdować się w regionie obsługującym bezserwerowe magazyny SQL.
- Musisz być właścicielem zmaterializowanego widoku lub mieć
SELECT
na zmaterializowanym widoku wraz z elementami nadrzędnymiUSE SCHEMA
iUSE CATALOG
na jego elementach nadrzędnych. - Należy użyć jednego z następujących zasobów obliczeniowych:
- SQL Warehouse
- Interfejsy funkcji Delta Live Tables
- Obliczanie trybu dostępu współdzielonego
- Tryb dostępu pojedynczego użytkownika w środowisku Databricks Runtime w wersji 15.4 lub nowszej, o ile obszar roboczy jest włączony na potrzeby przetwarzania bezserwerowego. Zobacz Szczegółowa kontrola dostępu w obliczeniach pojedynczego użytkownika.
- Tylko wtedy, gdy jesteś właścicielem zmaterializowanego widoku: jeden zasób obliczeniowy trybu dostępu użytkownika, który uruchamia środowisko Databricks Runtime z zakresu od 14.3 do 15.3.
Aby dowiedzieć się więcej o innych ograniczeniach dotyczących używania zmaterializowanych widoków, zobacz Ograniczenia.
Operacje zmaterializowanego widoku CREATE
sql usługi Databricks używają usługi Databricks SQL Warehouse do tworzenia i ładowania danych w zmaterializowanym widoku. Tworzenie zmaterializowanego widoku jest operacją synchroniczną, co oznacza, że CREATE MATERIALIZED VIEW
polecenie blokuje do momentu utworzenia zmaterializowanego widoku i zakończenia początkowego ładowania danych. Potok bezserwerowych tabel na żywo delty jest automatycznie tworzony dla każdego zmaterializowanego widoku SQL usługi Databricks. Po odświeżeniu zmaterializowanego widoku potok Delta Live Tables przetwarza odświeżanie.
Aby utworzyć zmaterializowany widok, użyj instrukcji CREATE MATERIALIZED VIEW
. Aby przesłać instrukcję create, użyj edytora SQL w interfejsie użytkownika usługi Azure Databricks, interfejsie wiersza polecenia SQL usługi Databricks lub interfejsie API SQL usługi Databricks.
Uwaga
Użytkownik, który tworzy zmaterializowany widok, jest zmaterializowanym właścicielem widoku i musi mieć następujące uprawnienia:
SELECT
uprawnienia do tabel bazowych, do których odwołuje się zmaterializowany widok.USE CATALOG
iUSE SCHEMA
uprawnienia w wykazie i schemacie zawierającym tabele źródłowe dla zmaterializowanego widoku.USE CATALOG
iUSE SCHEMA
uprawnienia w wykazie docelowym i schemacie dla zmaterializowanego widoku.CREATE TABLE
iCREATE MATERIALIZED VIEW
uprawnienia schematu zawierającego zmaterializowany widok.
Poniższy przykład tworzy zmaterializowany widok mv1
z tabeli base_table1
podstawowej :
CREATE MATERIALIZED VIEW mv1
AS SELECT
date, sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;
Zmaterializowane widoki utworzone przy użyciu magazynów SQL są automatycznie odświeżane przy użyciu potoku delta live tables. Potoki delta Live Tables domyślnie używają środowiska uruchomieniowego w current
kanale. Zapoznaj się z informacjami o wersji usługi Delta Live Tables i procesem uaktualniania wersji, aby dowiedzieć się więcej o procesie wydawania.
Usługa Databricks zaleca używanie kanału current
dla obciążeń produkcyjnych. Nowe funkcje są po raz pierwszy udostępniane w preview
kanale. Potok można ustawić na kanał delta live tables w wersji zapoznawczej, aby przetestować nowe funkcje, określając preview
jako właściwość tabeli. Tę właściwość można określić podczas tworzenia tabeli lub po utworzeniu tabeli przy użyciu instrukcji ALTER.
W poniższym przykładzie kodu pokazano, jak ustawić kanał na podgląd w instrukcji CREATE:
CREATE OR REPLACE MATERIALIZED VIEW foo.default.bar
TBLPROPERTIES ('pipelines.channel' = 'preview') as
SELECT
*
FROM
range(5)
Usługa Databricks zaleca ładowanie danych zewnętrznych przy użyciu federacji lakehouse dla obsługiwanych źródeł danych. Aby uzyskać informacje na temat ładowania danych ze źródeł nieobsługiwanych przez federację usługi Lakehouse, zobacz Opcje formatu danych.
Operacja REFRESH
odświeża zmaterializowany widok, aby odzwierciedlić najnowsze zmiany w tabeli podstawowej. Operacja jest domyślnie synchroniczna, co oznacza, że polecenie blokuje działanie do czasu ukończenia operacji odświeżania. Aby odświeżyć zmaterializowany widok, użyj instrukcji REFRESH MATERIALIZED VIEW
. Aby uzyskać szczegółowe informacje na temat składni i parametrów języka SQL dla tego polecenia, zobacz ODŚWIEŻANIE (ZMATERIALIZOWANY WIDOK lub TABELA PRZESYŁANIA STRUMIENIOWEGO). Aby dowiedzieć się więcej o typach zmaterializowanych widoków, które mogą być odświeżane przyrostowo, zobacz Odświeżanie przyrostowe dla zmaterializowanych widoków.
Aby przesłać instrukcję odświeżania, użyj edytora SQL w interfejsie użytkownika usługi Azure Databricks, notesu dołączonego do usługi SQL Warehouse, interfejsu wiersza polecenia SQL usługi Databricks lub interfejsu API SQL usługi Databricks.
Tylko właściciel może REFRESH
zmaterializować widok.
Poniższy przykład odświeża mv1
zmaterializowany widok:
REFRESH MATERIALIZED VIEW mv1;
Zmaterializowane widoki automatycznie tworzą potoki delta live tables i używają ich do przetwarzania operacji odświeżania. Odświeżanie jest zarządzane przez potok Delta Live Tables, a aktualizacja jest monitorowana przez magazyn SQL Usługi Databricks używany do tworzenia zmaterializowanego widoku. Zmaterializowane widoki można aktualizować przy użyciu potoku Delta Live Tables, który jest uruchamiany zgodnie z harmonogramem. Zobacz Wyzwalane a tryb potoku ciągłego.
Uwaga
Środowisko uruchomieniowe delta Live Tables nie może wykryć zmian w źródłach danych innych niż delta. Tabela jest nadal regularnie aktualizowana, ale z wyższym domyślnym interwałem wyzwalacza, aby zapobiec nadmiernej ponownej kompilacji, spowalniając wszelkie operacje przetwarzania przyrostowego wykonywane na obliczeniach.
Domyślnie operacje odświeżania są wykonywane synchronicznie. Można również ustawić operację odświeżania, która ma być wykonywana asynchronicznie. Można to ustawić za pomocą polecenia refresh. Zobacz ODŚWIEŻANIE (ZMATERIALIZOWANY WIDOK lub TABELA PRZESYŁANIA STRUMIENIOWEGO) Zachowanie skojarzone z każdym podejściem jest następujące:
- Synchroniczne: synchroniczne odświeżanie uniemożliwia kontynuowanie innych operacji do momentu ukończenia odświeżania. Jeśli wynik jest potrzebny do następnego kroku, na przykład podczas sekwencjonowania operacji odświeżania w narzędziach orkiestracji, takich jak Zadania usługi Databricks, użyj synchronicznego odświeżania. Aby zorganizować zmaterializowane widoki za pomocą zadania, użyj typu zadania SQL . Zobacz Planowanie i organizowanie przepływów pracy.
- Asynchroniczne: odświeżanie asynchroniczne uruchamia zadanie w tle w obliczeniach tabel delta Live Tables po rozpoczęciu zmaterializowanego odświeżania widoku, co umożliwia zwrócenie polecenia przed zakończeniem ładowania danych. Ten typ odświeżania może zaoszczędzić na kosztach, ponieważ operacja nie musi przechowywać pojemności obliczeniowej w magazynie, w którym inicjowane jest polecenie. Jeśli odświeżanie stanie się bezczynne i nie są uruchomione żadne inne zadania, magazyn może zostać zamknięty, podczas gdy odświeżanie używa innych dostępnych zasobów obliczeniowych. Ponadto operacje odświeżania asynchronicznego obsługują równoległe uruchamianie wielu operacji.
Niektóre zapytania można odświeżać przyrostowo. Zobacz Odświeżanie przyrostowe dla zmaterializowanych widoków. Jeśli nie można wykonać odświeżania przyrostowego, zamiast tego jest wykonywane pełne odświeżanie.
Możesz skonfigurować zmaterializowany widok SQL usługi Databricks w celu automatycznego odświeżania na podstawie zdefiniowanego harmonogramu. Aby ustawić harmonogram, wykonaj jedną z następujących czynności:
- Konfigurowanie harmonogramu przy użyciu klauzuli
SCHEDULE
podczas tworzenia zmaterializowanego widoku - Dodaj harmonogram z instrukcją ALTER MATERIALIZED VIEW .
Po utworzeniu harmonogramu nowe zadanie usługi Databricks jest automatycznie skonfigurowane do przetwarzania aktualizacji.
Aby wyświetlić harmonogram, wykonaj jedną z następujących czynności:
- Uruchom instrukcję
DESCRIBE EXTENDED
z edytora SQL w interfejsie użytkownika usługi Azure Databricks. - Użyj Eksploratora wykazu, aby wyświetlić zmaterializowany widok. Harmonogram jest wyświetlany na karcie Przegląd w obszarze Stan odświeżania. Zobacz Co to jest Eksplorator wykazu?.
Uwaga
Ponieważ potok delta Live Tables zarządza zmaterializowanymi odświeżeniami widoku, występuje opóźnienie spowodowane czasem uruchamiania potoku. Ten czas może znajdować się w sekundach do minut oprócz czasu wymaganego do przeprowadzenia odświeżania.
Stan zmaterializowanego odświeżania widoku można wyświetlić, wyświetlając potok, który zarządza zmaterializowanym widokiem w interfejsie użytkownika tabel delta Live Tables lub wyświetlając informacje odświeżania zwrócone przez DESCRIBE EXTENDED
polecenie dla zmaterializowanego widoku.
Historię odświeżania zmaterializowanego widoku można również wyświetlić, wysyłając zapytanie do dziennika zdarzeń tabel delta Live Tables. Zobacz Wyświetlanie historii odświeżania dla zmaterializowanego widoku.
Możesz użyć strony historii zapytań, aby uzyskać dostęp do szczegółów zapytań i profilów zapytań, które mogą pomóc w identyfikowaniu słabych zapytań i wąskich gardeł w potoku Delta Live Tables używanym do uruchamiania aktualizacji tabeli przesyłania strumieniowego. Aby zapoznać się z omówieniem rodzaju informacji dostępnych dla historii zapytań i profilów zapytań, zobacz Historia zapytań i Profil zapytania.
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej. Administratorzy obszaru roboczego mogą włączyć tę funkcję na stronie Podglądy . Zobacz Zarządzanie wersjami zapoznawcza usługi Azure Databricks.
Wszystkie instrukcje związane z zmaterializowanymi widokami są wyświetlane w historii zapytań. Filtr listy rozwijanej Instrukcja umożliwia wybranie dowolnego polecenia i sprawdzenie powiązanych zapytań. Po REFRESH
wszystkich CREATE
instrukcjach następuje instrukcja wykonywana asynchronicznie w potoku delty tabel na żywo. Instrukcje REFRESH
zwykle zawierają szczegółowe plany zapytań, które zapewniają wgląd w optymalizację wydajności.
Aby uzyskać dostęp do REFRESH
instrukcji w interfejsie użytkownika historii zapytań, wykonaj następujące kroki:
- Kliknij na lewym pasku bocznym, aby otworzyć interfejs użytkownika historii zapytań.
- Zaznacz pole wyboru REFRESH z filtru rozwijanego Instrukcja.
- Kliknij nazwę instrukcji zapytania, aby wyświetlić szczegóły podsumowania, takie jak czas trwania zapytania i zagregowane metryki.
- Kliknij pozycję Zobacz profil zapytania, aby otworzyć profil zapytania. Aby uzyskać szczegółowe informacje na temat nawigowania po profilu zapytania, zobacz Profil zapytania.
- Opcjonalnie użyj linków w sekcji Źródło zapytania, aby otworzyć powiązane zapytanie lub potok.
Uwaga
Zmaterializowany widok musi być skonfigurowany do uruchamiania przy użyciu kanału w wersji zapoznawczej . Zobacz Ustawianie kanału środowiska uruchomieniowego.
Zobacz CREATE MATERIALIZED VIEW (TWORZENIE ZMATERIALIZOWANEGO WIDOKU).
Domyślnie potok Delta Live Tables, który zarządza zmaterializowanym widokiem, nie jest widoczny w interfejsie użytkownika delta Live Tables. Aby wyświetlić potok w interfejsie użytkownika tabel delta Live Tables, musisz uzyskać bezpośredni dostęp do linku do strony szczegółów potoku potoku. Aby uzyskać dostęp do linku:
- Skopiuj i wklej link wyświetlany w wierszu Latest Refresh tabeli zwróconej przez instrukcję
DESCRIBE EXTENDED
. - Na karcie Pochodzenie dla zmaterializowanego widoku kliknij pozycję Potoki, a następnie kliknij link potoku.
W przypadku poleceń asynchronicznych REFRESH
przesłanych przy użyciu edytora SQL w interfejsie użytkownika usługi Azure Databricks możesz wyświetlić stan odświeżania, korzystając z linku wyświetlanego na panelu Wyniki .
Aby zatrzymać aktywne odświeżanie w interfejsie użytkownika tabel na żywo delty, na stronie Szczegóły potoku kliknij przycisk Zatrzymaj , aby zatrzymać aktualizację potoku. Odświeżanie można również zatrzymać za pomocą interfejsu wiersza polecenia usługi Databricks lub post /api/2.0/pipelines/{pipeline_id}/stop w interfejsie API potoków.
Aby zaktualizować definicję zmaterializowanego widoku, należy najpierw usunąć, a następnie ponownie utworzyć zmaterializowany widok.
Uwaga
Aby przesłać polecenie w celu usunięcia zmaterializowanego widoku, musisz być właścicielem tego zmaterializowanego widoku.
Aby usunąć zmaterializowany widok, użyj instrukcji DROP VIEW . Aby przesłać instrukcję DROP
, możesz użyć edytora SQL w interfejsie użytkownika usługi Azure Databricks, interfejsie wiersza polecenia SQL usługi Databricks lub interfejsie API SQL usługi Databricks. Poniższy przykład pominie mv1
zmaterializowany widok:
DROP MATERIALIZED VIEW mv1;
Aby pobrać kolumny i typy danych dla zmaterializowanego widoku, użyj instrukcji DESCRIBE
. Aby pobrać kolumny, typy danych i metadane, takie jak właściciel, lokalizacja, czas tworzenia i stan odświeżania dla zmaterializowanego widoku, użyj polecenia DESCRIBE EXTENDED
. Aby przesłać instrukcję DESCRIBE
, użyj edytora SQL w interfejsie użytkownika usługi Azure Databricks, interfejsie wiersza polecenia SQL usługi Databricks lub interfejsie API SQL usługi Databricks.
Jeśli jesteś administratorem magazynu metadanych i administratorem obszaru roboczego, możesz zmienić właściciela zmaterializowanego widoku. Zmaterializowane widoki automatycznie tworzą potoki delta Live Tables i używają ich do przetwarzania zmian. Aby zmienić zmaterializowanego właściciela widoków, wykonaj następujące czynności:
- Na karcie Pochodzenie dla zmaterializowanego widoku kliknij pozycję Potoki, a następnie kliknij link potoku.
- Kliknij menu kebab po prawej stronie nazwy potoku, a następnie kliknij pozycję Uprawnienia. Spowoduje to otwarcie okna dialogowego uprawnień.
- Kliknij przycisk x po prawej stronie nazwy bieżącego właściciela, aby usunąć bieżącego właściciela.
- Zacznij wpisywać, aby filtrować listę dostępnych użytkowników. Kliknij użytkownika, który powinien być nowym właścicielem potoku.
- Kliknij przycisk Zapisz , aby zapisać zmiany i zamknąć okno dialogowe.
Wszystkie zasoby potoku, w tym zmaterializowane widoki zdefiniowane w potoku, są własnością nowego właściciela potoku. Wszystkie przyszłe aktualizacje są uruchamiane przy użyciu tożsamości nowego właściciela.
Zmaterializowane widoki obsługują zaawansowane mechanizmy kontroli dostępu do obsługi udostępniania danych, jednocześnie unikając uwidaczniania potencjalnie prywatnych danych. Zmaterializowany właściciel widoku może udzielić SELECT
uprawnień innym użytkownikom. Użytkownicy z dostępem SELECT
do zmaterializowanego widoku nie potrzebują SELECT
dostępu do tabel, do których odwołuje się zmaterializowany widok. Ta kontrola dostępu umożliwia udostępnianie danych podczas kontrolowania dostępu do danych bazowych.
Aby udzielić dostępu do zmaterializowanego widoku, użyj instrukcji GRANT
:
GRANT
privilege_type [, privilege_type ] ...
ON <mv_name> TO principal;
Privilege_type może być:
SELECT
— użytkownik możeSELECT
zmaterializować widok.REFRESH
— użytkownik możeREFRESH
zmaterializować widok. Operacje odświeżania są uruchamiane przy użyciu uprawnień właściciela.
Poniższy przykład tworzy zmaterializowany widok i przyznaje użytkownikowi uprawnienia wyboru i odświeżania:
CREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;
Aby odwołać dostęp z zmaterializowanego widoku, użyj instrukcji REVOKE
:
REVOKE
privilege_type [, privilege_type ]
ON <name> FROM principal;
Gdy SELECT
uprawnienia w tabeli bazowej zostaną odwołane od zmaterializowanego właściciela widoku lub dowolnego innego użytkownika, któremu udzielono SELECT
uprawnień do zmaterializowanego widoku, albo tabela podstawowa zostanie porzucona, zmaterializowany właściciel widoku lub użytkownik, któremu udzielono dostępu, nadal może wykonać zapytanie dotyczące zmaterializowanego widoku. Jednak występuje następujące zachowanie:
- Zmaterializowany właściciel widoku lub inni, którzy stracili dostęp do zmaterializowanego widoku, nie może już
REFRESH
tak zmaterializować widoku, a zmaterializowany widok stanie się nieaktualny. - W przypadku automatycznego z harmonogramem kolejna zaplanowana
REFRESH
awaria lub nie zostanie uruchomiona.
Poniższy przykład odwołuje SELECT
uprawnienie z elementu mv1
:
REVOKE SELECT ON mv1 FROM user1;
Zestawienie danych zmian jest wymagane w tabelach podstawowych zmaterializowanych widoków, z wyjątkiem niektórych zaawansowanych przypadków użycia. Aby włączyć zestawienie danych zmian w tabeli podstawowej, ustaw delta.enableChangeDataFeed
właściwość tabeli przy użyciu następującej składni:
ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
Aby wyświetlić stan REFRESH
operacji w zmaterializowanym widoku, w tym bieżących i przeszłych odświeżeń, wykonaj zapytanie w dzienniku zdarzeń usługi Delta Live Tables:
SELECT
*
FROM
event_log(TABLE(<fully-qualified-table-name>))
WHERE
event_type = "update_progress"
ORDER BY
timestamp desc;
Zastąp <fully-qualified-table-name>
w pełni kwalifikowaną nazwą zmaterializowanego widoku, w tym wykazem i schematem.
Zobacz Co to jest dziennik zdarzeń tabel delta live?.
- Aby uzyskać informacje o wymaganiach dotyczących zasobów obliczeniowych i obszarów roboczych, zobacz Wymagania.
- Zmaterializowane widoki nie obsługują kolumn tożsamości ani kluczy zastępczych.
- Jeśli zmaterializowany widok używa agregacji sumy w
NULL
kolumnie -able i tylkoNULL
wartości pozostają w tej kolumnie, zmaterializowane widoki wynikowa wartość agregacji wynosi zero zamiastNULL
. - Nie można odczytać zestawienia danych zmian z zmaterializowanego widoku.
- Zapytania dotyczące podróży czasowych nie są suportowane na zmaterializowane widoki.
- Pliki bazowe obsługujące zmaterializowane widoki mogą zawierać dane z tabel nadrzędnych (w tym możliwe dane osobowe), które nie są wyświetlane w zmaterializowanej definicji widoku. Te dane są automatycznie dodawane do bazowego magazynu w celu obsługi przyrostowego odświeżania zmaterializowanych widoków. Ponieważ podstawowe pliki zmaterializowanego widoku mogą spowodować ujawnienie danych z tabel nadrzędnych, które nie są częścią zmaterializowanego schematu widoku, usługa Databricks zaleca, aby nie udostępniać bazowego magazynu niezaufanym użytkownikom podrzędnym. Załóżmy na przykład, że definicja zmaterializowanego widoku zawiera klauzulę
COUNT(DISTINCT field_a)
. Mimo że zmaterializowana definicja widoku zawiera tylko klauzulę agregacjiCOUNT DISTINCT
, pliki bazowe będą zawierać listę rzeczywistychfield_a
wartości .