Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano semantyka i wymagania dotyczące odświeżania przyrostowego w zmaterializowanych widokach oraz identyfikuje operacje SQL, słowa kluczowe i klauzule, które obsługują odświeżanie przyrostowe. Obejmuje on omówienie różnic między odświeżaniem przyrostowym i pełnym odświeżaniem, a także zalecenia dotyczące wybierania między zmaterializowanymi widokami i tabelami strumieniowymi.
Podczas uruchamiania aktualizacji na zmaterializowanych widokach przy użyciu potoków bezserwerowych wiele zapytań można odświeżać w sposób przyrostowy. Odświeżanie przyrostowe oszczędza koszty obliczeń, wykrywając zmiany w źródłach danych używanych do definiowania zmaterializowanego widoku i przyrostowego obliczania wyniku.
Operacje odświeżania są uruchamiane w obliczeniach bezserwerowych
Operacje odświeżania są uruchamiane w potokach bezserwerowych, niezależnie od tego, czy operacja została zdefiniowana w usłudze Databricks SQL czy w deklaratywnych potokach Lakeflow Spark.
W przypadku zmaterializowanych widoków zdefiniowanych przy użyciu usługi Databricks SQL obszar roboczy nie musi być włączony dla bezserwerowych potoków deklaratywnych platformy Spark w usłudze Lakeflow. Odświeżanie automatycznie użyje potoku bezserwerowego.
W przypadku zmaterializowanych widoków zdefiniowanych przy użyciu deklaratywnych potoków Lakeflow Spark, należy skonfigurować potok do pracy w trybie bezserwerowym. Zobacz Jak skonfigurować potok bezserwerowy.
Jakie są semantyki odświeżania dla zmaterializowanych widoków?
Zmaterializowane widoki gwarantują równoważne wyniki zapytaniom wsadowym. Rozważmy na przykład następujące zagregowane zapytanie:
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Po uruchomieniu tego zapytania przy użyciu dowolnego produktu usługi Azure Databricks wynik jest obliczany przy użyciu semantyki wsadowej w celu agregowania wszystkich rekordów w źródle transactions_table, co oznacza, że wszystkie dane źródłowe są skanowane i agregowane w jednej operacji.
Note
Niektóre produkty usługi Azure Databricks buforować wyniki automatycznie w ramach sesji lub między nimi, jeśli źródła danych nie uległy zmianie po uruchomieniu ostatniego zapytania. Automatyczny sposób buforowania różni się od zmaterializowanych widoków.
Poniższy przykład przekształca to zapytanie wsadowe w zmaterializowany widok:
CREATE OR REPLACE MATERIALIZED VIEW transaction_summary AS
SELECT account_id,
COUNT(txn_id) txn_count,
SUM(txn_amount) account_revenue
FROM transactions_table
GROUP BY account_id
Podczas odświeżania zmaterializowanego widoku obliczony wynik jest identyczny do semantyki zapytań wsadowych. To zapytanie jest przykładem materializowanego widoku, który może być odświeżany przyrostowo. Oznacza to, że operacja odświeżania stara się przetwarzać jedynie nowe lub zmienione dane w źródle transactions_table, aby obliczyć wyniki.
Zagadnienia dotyczące źródła danych dla zmaterializowanych widoków
Chociaż można zdefiniować zmaterializowany widok dla dowolnego źródła danych, nie wszystkie źródła danych są dobrze dostosowane do zmaterializowanych widoków. Rozważ następujące zastrzeżenia i zalecenia:
Important
Zmaterializowane widoki dokładają najlepszych możliwych starań, aby przeprowadzać przyrostowe odświeżanie wyników obsługiwanych operacji. Niektóre zmiany w źródłach danych wymagają pełnego odświeżenia.
Wszystkie źródła danych dla zmaterializowanych widoków powinny być niezawodne dla semantyki pełnego odświeżania, nawet jeśli zapytanie definiujące zmaterializowany widok obsługuje odświeżanie przyrostowe.
- W przypadku zapytań, w których pełne odświeżanie byłoby zbyt kosztowne, użyj tabel strumieniowych, aby zagwarantować jednokrotne przetwarzanie. Przykłady obejmują bardzo duże tabele.
- Nie należy definiować zmaterializowanego widoku względem źródła danych, jeśli rekordy powinny być przetwarzane tylko raz. Zamiast tego należy użyć tabel przesyłania strumieniowego. Przykłady obejmują następujące elementy:
- Źródła danych, które nie zachowują historii danych, takie jak Kafka.
- Operacje pobierania, takie jak zapytania używające Auto Loader do wczytywania danych z pamięci masowej w chmurze.
- Każde źródło danych, w którym planujesz usunąć lub zarchiwizować dane po przetworzeniu, ale musi zachować informacje w tabelach podrzędnych. Na przykład tabela podzielona na partycje dat, w której planujesz usunąć rekordy starsze niż określony próg.
- Nie wszystkie źródła danych obsługują odświeżanie przyrostowe. Następujące źródła danych obsługują odświeżanie przyrostowe:
- Tabele Delta, w tym tabele zarządzane przez Unity Catalog oraz tabele zewnętrzne wspierane przez Delta Lake.
- Zmaterializowane widoki.
- Tabele przesyłania strumieniowego, w tym obiekty docelowe operacji
AUTO CDC ... INTO.
- Niektóre operacje odświeżania przyrostowego wymagają włączenia śledzenia wierszy dla zapytanych źródeł danych. Śledzenie wierszy to funkcja Delta Lake obsługiwana wyłącznie przez tabele Delta, które obejmują zmaterializowane widoki, tabele strumieniowe oraz tabele zarządzane przez Unity Catalog. Zobacz Używanie śledzenia wierszy dla tabel delty.
- Źródła danych z zdefiniowanymi filtrami wierszy lub maskami kolumn nie obsługują odświeżania przyrostowego. Zobacz Filtry wierszy i maski kolumn
Optymalizowanie zmaterializowanych widoków
Aby uzyskać najlepszą wydajność, usługa Databricks zaleca włączenie następujących funkcji we wszystkich zmaterializowanych tabelach źródłowych widoku:
Te funkcje można ustawić podczas tworzenia lub później za pomocą instrukcji ALTER TABLE . Przykład:
ALTER TABLE <table-name> SET TBLPROPERTIES (
delta.enableDeletionVectors = true,
delta.enableRowTracking = true,
delta.enableChangeDataFeed = true);
Typy odświeżania zmaterializowanych widoków
Po zaktualizowaniu zmaterializowanego widoku można określić odświeżanie lub pełne odświeżenie.
- Odświeżenie próbuje wykonać odświeżanie przyrostowe, ale w razie potrzeby wykona pełną ponowną kompilację danych. Odświeżanie przyrostowe jest dostępne tylko wtedy, gdy połączone z nim obliczenia są bezserwerowe.
- Pełne odświeżanie zawsze ponownie oblicza wszystkie dane wejściowe do zmaterializowanego widoku i resetuje wszystkie punkty kontrolne.
Aby określić, jaki typ odświeżania został użyty w aktualizacji, zobacz Określanie typu odświeżania aktualizacji.
Odświeżanie domyślne
Domyślne odświeżanie zmaterializowanego widoku w przypadku bezserwerowych prób wykonania odświeżania przyrostowego. Odświeżanie przyrostowe przetwarza zmiany w danych bazowych po ostatnim odświeżeniu, a następnie dołącza te dane do tabeli. W zależności od tabel podstawowych i uwzględnionych operacji tylko niektóre typy zmaterializowanych widoków mogą być odświeżane przyrostowo. Jeśli odświeżanie przyrostowe nie jest możliwe lub połączone zasoby obliczeniowe są klasyczne zamiast bezserwerowe, wykonywana jest pełna ponowna kompilacja.
Dane wyjściowe odświeżania przyrostowego i pełne ponownej kompilacji są takie same. Usługa Azure Databricks uruchamia analizę kosztów, aby wybrać tańszą opcję między odświeżaniem przyrostowym a pełną ponowną kompilacją.
Tylko zmaterializowane widoki, które można aktualizować przy użyciu potoków bezserwerowych, mogą korzystać z odświeżania przyrostowego. Zmaterializowane widoki, które nie używają potoków bezserwerowych, są zawsze w pełni ponownie skompilowane.
pl-PL: Gdy tworzysz zmaterializowane widoki za pomocą SQL Warehouse lub deklaratywnych bezserwerowych potoków Spark w Azure Databricks, są one przyrostowo odświeżane, jeśli ich zapytania są obsługiwane. Jeśli zapytanie używa nieobsługiwanych wyrażeń, usługa Azure Databricks uruchamia zamiast tego pełną ponowną kompilację, co może zwiększyć koszty.
Aby określić, jaki typ odświeżania został użyty w aktualizacji, zobacz Określanie typu odświeżania aktualizacji.
Pełne odświeżanie
Pełne odświeżanie zastępuje wyniki w zmaterializowanym widoku przez wyczyszczenie tabeli i punktów kontrolnych oraz ponowne przetwarzanie wszystkich danych dostępnych w źródle.
Aby wykonać pełne odświeżanie w zmaterializowanych widokach zdefiniowanych przy użyciu usługi Databricks SQL, użyj następującej składni:
REFRESH MATERIALIZED VIEW mv_name FULL
W przypadku zmaterializowanych widoków zdefiniowanych w potokach deklaratywnych platformy Spark w usłudze Lakeflow można uruchomić pełne odświeżanie wybranych zestawów danych lub wszystkich zestawów danych w potoku. Zobacz semantykę odświeżania potoku .
Important
Gdy pełne odświeżanie jest uruchamiane względem źródła danych, w którym rekordy zostały usunięte z powodu progu przechowywania danych lub ręcznego usuwania, usunięte rekordy nie są odzwierciedlane w obliczonych wynikach. Nie można odzyskać starych danych, jeśli dane nie są już dostępne w źródle. Może to również spowodować zmianę schematu kolumn, które już nie istnieją w danych źródłowych.
Obsługa przyrostowego odświeżania zmaterializowanego widoku
W poniższej tabeli wymieniono obsługę odświeżania przyrostowego według słowa kluczowego LUB klauzuli SQL.
Important
Niektóre słowa kluczowe i klauzule wymagają włączenia śledzenia wierszy dla zapytanych źródeł danych. Zobacz Używanie śledzenia wierszy dla tabel delty.
Te słowa kluczowe i klauzule są oznaczone gwiazdką (*) w poniższej tabeli.
| Słowo kluczowe lub klauzula SQL | Obsługa odświeżania przyrostowego |
|---|---|
SELECT Wyrażenia* |
Tak, obsługiwane są wyrażenia obejmujące wbudowane funkcje deterministyczne i niezmienne funkcje zdefiniowane przez użytkownika (UDF). |
GROUP BY |
Yes |
WITH |
Tak, obsługiwane są typowe wyrażenia tabeli. |
UNION ALL* |
Yes |
FROM |
Obsługiwane tabele podstawowe obejmują takie jak tabele Delta, widoki materializowane i tabele strumieniowe. |
WHERE, HAVING* |
Klauzule filtru, takie jak WHERE i HAVING , są obsługiwane. |
INNER JOIN* |
Yes |
LEFT OUTER JOIN* |
Yes |
FULL OUTER JOIN* |
Yes |
RIGHT OUTER JOIN* |
Yes |
OVER |
Yes.
PARTITION_BY kolumny muszą być określone dla przyrostowego przetwarzania w funkcjach okiennych. |
QUALIFY |
Yes |
EXPECTATIONS |
Tak, zmaterializowane widoki, które obejmują oczekiwania, mogą być odświeżane przyrostowo. Jednak odświeżanie przyrostowe nie jest obsługiwane w następujących przypadkach:
|
| Funkcje niedeterministyczne | Funkcje czasu niedeterministycznego są obsługiwane w WHERE klauzulach. Obejmuje to funkcje, takie jak current_date(), current_timestamp()i now(). Inne funkcje niedeterministyczne nie są obsługiwane. |
| Źródła nie-delta | Źródła, takie jak woluminy, lokalizacje zewnętrzne i katalogi obce, nie są obsługiwane. |
Określanie typu odświeżania aktualizacji
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:
| Technique | Odświeżanie przyrostowe? | Description |
|---|---|---|
FULL_RECOMPUTE |
No | Zmaterializowany widok został w pełni ponownie obliczony |
NO_OP |
Nie dotyczy | Zmaterializowany widok nie został zaktualizowany, ponieważ nie wykryto żadnych zmian w tabeli podstawowej. |
Dowolny z:
|
Yes | Zmaterializowany widok został odświeżony przyrostowo przy użyciu określonej techniki. |
Aby określić użytą technikę, wykonaj zapytanie dotyczące dziennika zdarzeń platformy Lakeflow Spark Declarative Pipelines, w którym event_type jest planning_information:
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> kompletną i specyficzną nazwą zmaterializowanego widoku, w tym katalogiem i schematem.
Przykładowe dane wyjściowe dla tego polecenia:
-
- sygnatura czasowa
- komunikat
-
2025-03-21T22:23:16.497+00:00Flow 'sales' has been planned in :re[LDP] to be executed as ROW_BASED.
Zobacz Dziennik zdarzeń rurociągu.