Używanie zmaterializowanych widoków w usłudze Databricks SQL

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

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.

Co to są zmaterializowane widoki?

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 na platformie analizy danych usługi Databricks z uruchomieniem funkcji Delta Live Tables. Podczas tworzenia zmaterializowanego widoku w usłudze Databricks SQL Warehouse tworzony jest potok delta live tables w celu przetworzenia odświeżeń do zmaterializowanego widoku. Stan operacji odświeżania można monitorować w interfejsie użytkownika tabel na żywo delty, interfejsie API tabel delta live lub interfejsie wiersza polecenia delta live tables. Zobacz Wyświetlanie stanu zmaterializowanego odświeżania widoku.

Wymagania

  • Aby utworzyć i odświeżyć zmaterializowane widoki, należy użyć usługi Databricks SQL Warehouse z obsługą wykazu aparatu Unity.

  • Obszar roboczy musi znajdować się w regionie bezserwerowym.

Aby dowiedzieć się więcej o ograniczeniach podczas korzystania z materializowanych widoków w usłudze Databricks SQL, zobacz Ograniczenia.

Tworzenie zmaterializowanego widoku

Aby utworzyć zmaterializowany widok, użyj instrukcji CREATE MATERIALIZED VIEW . Zobacz CREATE MATERIALIZED VIEW (TWORZENIE ZMATERIALIZOWANEGO WIDOKU ) w dokumentacji sql usługi Databricks. 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 i USE SCHEMA uprawnienia w wykazie i schemacie zawierającym tabele źródłowe dla zmaterializowanego widoku.
  • USE CATALOG i USE SCHEMA uprawnienia w wykazie docelowym i schemacie dla zmaterializowanego widoku.
  • CREATE TABLE i CREATE MATERIALIZED VIEW uprawnienia schematu zawierającego zmaterializowany widok.

Poniższy przykład tworzy zmaterializowany widok mv1 z tabeli base_table1podstawowej :

CREATE MATERIALIZED VIEW mv1
AS SELECT
  date, sum(sales) AS sum_of_sales
FROM
  table1
GROUP BY
  date;

Jak są tworzone zmaterializowane widoki?

Operacje zmaterializowanego widoku CREATE sql usługi Databricks używają usługi Databricks SQL Warehouse do tworzenia i ładowania danych w zmaterializowanym widoku. Ponieważ tworzenie zmaterializowanego widoku jest operacją synchroniczną w usłudze Databricks SQL Warehouse, CREATE MATERIALIZED VIEW polecenia są blokowane do momentu utworzenia zmaterializowanego widoku i zakończenia początkowego ładowania danych. Potok delta live tables jest tworzony automatycznie dla każdego widoku zmaterializowanego sql usługi Databricks. Po odświeżeniu zmaterializowanego widoku zostanie uruchomiona aktualizacja potoku Delta Live Tables.

Załaduj dane z systemów zewnętrznych

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.

Odświeżanie zmaterializowanego widoku

Operacja REFRESH odświeża zmaterializowany widok, aby odzwierciedlić najnowsze zmiany w tabeli podstawowej. Aby odświeżyć zmaterializowany widok, użyj instrukcji REFRESH MATERIALIZED VIEW . Zobacz ODŚWIEŻANIE (ZMATERIALIZOWANY WIDOK i TABELA PRZESYŁANIA STRUMIENIOWEGO) w dokumentacji SQL usługi Databricks. Aby przesłać instrukcję odświeżania, 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.

Tylko właściciel może REFRESH zmaterializować widok.

Poniższy przykład odświeża mv1 zmaterializowany widok:

REFRESH MATERIALIZED VIEW mv1;

W jaki sposób są odświeżane widoki zmaterializowane w usłudze Databricks?

Zmaterializowane widoki SQL usługi Databricks używają tabel delta live na potrzeby operacji odświeżania. Po odświeżeniu zmaterializowanego widoku rozpocznie się aktualizacja potoku Delta Live Tables zarządzającego zmaterializowanym widokiem.

Ponieważ odświeżanie jest zarządzane przez potok delta Live Tables, usługa Databricks SQL Warehouse używana do tworzenia zmaterializowanego widoku nie jest używana i nie musi być uruchomiona podczas operacji odświeżania.

Niektóre zapytania można odświeżać przyrostowo. Zobacz Operacje odświeżania dla zmaterializowanych widoków. Jeśli nie można wykonać odświeżania przyrostowego, zamiast tego jest wykonywane pełne odświeżanie.

Planowanie zmaterializowanych odświeżeń widoku

Możesz skonfigurować zmaterializowany widok SQL usługi Databricks w celu automatycznego odświeżania na podstawie zdefiniowanego harmonogramu. Skonfiguruj ten harmonogram przy użyciu klauzuli SCHEDULE podczas tworzenia zmaterializowanego widoku lub dodawania harmonogramu za pomocą instrukcji ALTER VIEW . Po utworzeniu harmonogramu nowe zadanie usługi Databricks jest automatycznie skonfigurowane do przetwarzania aktualizacji. Harmonogram można wyświetlić za pomocą instrukcji DESCRIBE EXTENDED .

Aktualizowanie definicji zmaterializowanego widoku

Aby zaktualizować definicję zmaterializowanego widoku, należy najpierw usunąć, a następnie ponownie utworzyć zmaterializowany widok.

Usuwanie zmaterializowanego widoku

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;

Opisywanie zmaterializowanego widoku

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.

Wyświetlanie stanu zmaterializowanego odświeżania widoku

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.

Wyświetlanie stanu odświeżania w interfejsie użytkownika tabel na żywo usługi Delta

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:

  • Jeśli prześlesz REFRESH polecenie w edytorze SQL, postępuj zgodnie z linkiem w panelu Wyniki.
  • Postępuj zgodnie z linkiem zwróconym przez instrukcję DESCRIBE EXTENDED .
  • Na karcie Pochodzenie dla zmaterializowanego widoku kliknij pozycję Potoki, a następnie kliknij link potoku.

Zatrzymywanie aktywnego odświeżania

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.

Zmienianie właściciela zmaterializowanego widoku

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:

  • Kliknij pozycję Ikona zadańPrzepływy pracy, a następnie kliknij kartę Delta Live Tables (Tabele na żywo delty).
  • Kliknij nazwę potoku, którego właściciel chcesz zmienić.
  • Menu Kebab 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.

Kontrola dostępu do zmaterializowanych widoków

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.

Udzielanie uprawnień do zmaterializowanego widoku

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że SELECT zmaterializować widok.
  • REFRESH — użytkownik może REFRESH 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;

Odwoływanie uprawnień z zmaterializowanego widoku

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;

Włączanie zestawienia danych zmian

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);

Wyświetlanie historii odświeżania dla zmaterializowanego widoku

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?.

Określanie, czy jest używane odświeżanie przyrostowe lub pełne

Aby zoptymalizować wydajność zmaterializowanych odświeżeń widoku, usługa Azure Databricks używa modelu kosztów do wybierania techniki używanej do odświeżania. W poniższej tabeli opisano następujące techniki:

Technika Odświeżanie przyrostowe? opis
FULL_RECOMPUTE Nie. Zmaterializowany widok został w pełni ponownie skompilowany
NO_OP Nie dotyczy Zmaterializowany widok nie został zaktualizowany, ponieważ nie wykryto żadnych zmian w tabeli podstawowej.
ROW_BASED lub PARTITION_OVERWRITE Tak Zmaterializowany widok został odświeżony przyrostowo przy użyciu określonej techniki.

Aby określić użytą technikę, wykonaj zapytanie w dzienniku zdarzeń delta Live Tables, w którym znajduje się planning_informationparametr event_type :

SELECT
  timestamp,
  message
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = 'planning_information'
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?.

Ograniczenia

  • Istnieją ograniczenia dotyczące sposobu zarządzania telewizorami i miejscami, w których można wykonywać zapytania:

    • Zmaterializowane widoki SQL usługi Databricks można tworzyć i odświeżać tylko w magazynach Pro SQL Warehouse i bezserwerowych magazynach SQL.
    • Zmaterializowany widok SQL usługi Databricks można odświeżyć tylko z poziomu utworzonego obszaru roboczego.
    • Zmaterializowane widoki SQL usługi Databricks mogą być odpytywane tylko z magazynów SQL usługi Databricks, tabel delta live i udostępnionych klastrów z uruchomionym środowiskiem Databricks Runtime 11.3 lub nowszym. Nie można wykonywać zapytań dotyczących zmaterializowanych widoków z klastrów trybu dostępu pojedynczego użytkownika.
  • Zmaterializowane widoki nie obsługują kolumn tożsamości ani kluczy zastępczych.

  • Jeśli zmaterializowany widok używa agregacji sumy w NULLkolumnie -able i tylko NULL wartości pozostają w tej kolumnie, zmaterializowane widoki wynikowa wartość agregacji wynosi zero zamiast NULL.

  • 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ę agregacji COUNT DISTINCT , pliki bazowe będą zawierać listę rzeczywistych field_awartości .

  • Zmaterializowane widoki SQL usługi Databricks nie są obsługiwane w regionach Południowo-środkowe stany USA i Zachodnie stany USA 2.