Kiedy używać REPLACE, WHERE a kiedy widoków materializowanych

Zarówno przepływy REPLACE WHERE, jak i samodzielne widoki materializowane pozwalają utrzymywać tabele pochodne, które pozostają aktualne po zmianach danych źródłowych, ale rozwiązują różne problemy. W przypadku większości obciążeń wsadowych wyodrębniania, przekształcania i ładowania (ETL), które okresowo nadpisują okno czasowe lub partycję, stosuj przyrostowy przepływ REPLACE WHERE. Użyj widoków materializowanych jako warstwy akceleracji zapytań, która dostarcza wstępnie obliczone wyniki do dashboardów i raportów.

Ta strona obejmuje samodzielne tabele streamingowe oraz zmaterializowane widoki. Informacje o przepływach REPLACE WHERE w potoku Lakeflow znajdują się w dokumencie Przetwarzanie wsadowe z przepływami REPLACE WHERE.

Użyj REPLACE WHERE do nadpisywania wsadowego

Przepływ REPLACE WHERE ponownie oblicza i nadpisuje tylko te wiersze, które odpowiadają danemu predykatowi, takie jak okno czasowe lub partycja. Wszystkie pozostałe wiersze pozostają bez zmian. Ponieważ flow ponownie ocenia zapytanie źródłowe tylko dla tego zakresu predykatów, koszt każdego odświeżenia zależy od rozmiaru zakresu, a nie od rozmiaru tabeli.

Widok materializowany zachowuje pełny wynik zapytania, które go definiuje. Azure Databricks odświeża zmaterializowany widok przyrostowo, gdy zapytanie i dane źródłowe to wspierają, a w przeciwnym razie wykonuje pełne odświeżenie. To, czy odświeżenie jest inkrementalne, zależy od struktury zapytań i tabel źródłowych, więc koszt każdego odświeżenia jest trudniejszy do przewidzenia. Zobacz Jak odświeżane są samodzielne zmaterializowane widoki?

W przypadku wsadowego modelu ETL, który zmienia się w ograniczonych zakresach, przepływ REPLACE WHERE pozwala dokładnie kontrolować, które wiersze są przepisywane przy każdym odświeżeniu. Widok materializowany jest lepszym wyborem, gdy czytelnicy potrzebują szybkiego dostępu do wstępnie obliczonego wyniku.

Przypisz konstrukcje do warstw medalionu

Poniższa tabela mapuje każdą warstwę architektury medalionowej na konstrukcję zalecaną przez Databricks:

Warstwa Konstrukcja Dlaczego
Brąz (surowe pozyskiwanie danych) Pobieranie za pomocą Lakeflow Connect lub Auto Loader Zapisuje surowe rekordy stopniowo, bez ponownego przetwarzania historii.
Srebro (fakty) Przyrostowy przebieg REPLACE WHERE Nadpisuje tylko dotknięte okna czasowe lub partycje dla aktualizacji faktów, późno przychodzących danych i korekt.
Srebro (wymiary) AUTO CDC przepływ Automatycznie stosuje semantykę wstawiania, aktualizacji i usuwania oraz zachowuje historię z powoli zmieniającym się wymiarem (SCD) Typ 1 lub Typ 2.
Gold (agregacje i modele danych) Stopniowy proces REPLACE WHERE Przelicza ponownie jedynie zakres predykatu dla agregatów i modeli, unikając pełnych rekalkulacji tabelowych.
Przyspieszenie zapytań i obsługa zmaterializowany widok Dostarcza wstępnie obliczone wyniki na panelach i w raportach oraz utrzymuje aktualne wyniki zapytań.

Przewodnik po decyzjach

Skorzystaj z poniższego przewodnika, aby wybrać między tymi dwoma konstrukcjami.

Użyj przepływu REPLACE WHERE, gdy:

  • Wykonuj okresowe nadpisywanie wsadowe okna czasowego lub partycji.
  • Popraw dane, które napłynęły z opóźnieniem.
  • Zastosuj usunięcia związane ze zgodnością do ograniczonego zakresu.
  • Odświeżaj dane na poziomie partycji.

Używaj widoku materializowanego, gdy:

  • Przyspiesz zapytania na pulpicie.
  • Dostarczaj czytelnikom wstępnie obliczone agregacje.
  • Utrzymuj aktualne wyniki zapytań dla warstwy serwującej.

Przykład: inkrementalne nadpisanie z REPLACE WHERE

Poniższy przykład definiuje tabelę docelową, która nadpisuje tylko ostatnie 7 dni danych przy każdym odświeżaniu. Podczas odświeżania flow usuwa wiersze odpowiadające predykatowi, ponownie oblicza zapytanie źródłowe dla tego samego zakresu i wstawia wyniki. Rzędy poza oknem pozostają nietknięte:

CREATE OR REFRESH STREAMING TABLE payments_latest
FLOW REPLACE WHERE payment_date >= date_add(current_date(), -7) BY NAME
SELECT payment_id, booking_id, status, payment_date
FROM samples.wanderbricks.payments;

BY NAME jest wymagane, aby kolumny dopasowywały się według nazwy, a nie według pozycji. Aby uzyskać pełną składnię, nadpisania predykatów, uzupełnienia historyczne i zachowanie odświeżania przyrostowego, zobacz przepływy REPLACE WHERE dla samodzielnych tabel strumieniowych.

Dodatkowe zasoby