Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł przedstawia składnię Spark SQL do tworzenia, listowania, zmiany nazw i usuwania zmaterializowanych widoków jeziora w Fabric.
Wskazówka
Aby utworzyć pierwszy zmaterializowany widok jeziora, zobacz Wprowadzenie do zmaterializowanych widoków jeziora.
Tworzenie zmaterializowanego widoku jeziora
Zmaterializowany widok jeziora można zdefiniować z dowolnej tabeli lub z innego zmaterializowanego widoku jeziora w obrębie lakehouse.
Składnia
CREATE [OR REPLACE] MATERIALIZED LAKE VIEW [IF NOT EXISTS] [workspace.lakehouse.schema].MLV_Identifier
[(
CONSTRAINT constraint_name1 CHECK (condition expression1) [ON MISMATCH DROP | FAIL],
CONSTRAINT constraint_name2 CHECK (condition expression2) [ON MISMATCH DROP | FAIL]
)]
[PARTITIONED BY (col1, col2, ... )]
[COMMENT "description or comment"]
[TBLPROPERTIES ("key1"="val1", "key2"="val2", ... )]
AS select_statement
Uwaga / Notatka
- Jeśli nazwa obszaru roboczego zawiera spacje, umieść ją w apostrofach:
`My Workspace`.lakehouse.schema.view_name - Nazwy zmaterializowanych widoków jeziora są rozróżniane bez uwzględniania wielkości liter i konwertowane na małe litery (na przykład
MyTestViewstaje sięmytestview).
Arguments
| Parametr | Opis |
|---|---|
OR REPLACE |
Zastępuje istniejący zmaterializowany widok jeziora o tej samej nazwie. Nie można połączyć z IF NOT EXISTS. |
IF NOT EXISTS |
Tworzy zmaterializowany widok jeziora tylko wtedy, gdy jeszcze nie istnieje. Instrukcja powiedzie się bez błędu, jeśli widok jest już zdefiniowany. Nie można połączyć z OR REPLACE. |
MLV_Identifier |
Nazwa zmaterializowanego widoku jeziora. Można w pełni zakwalifikować jako workspace.lakehouse.schema.name. |
CONSTRAINT ... CHECK |
Definiuje regułę jakości danych. Klauzula CHECK określa wyrażenie logiczne, które musi spełniać każdy wiersz. Można zdefiniować wiele ograniczeń. |
ON MISMATCH |
Działanie do podjęcia, gdy wiersz narusza ograniczenie.
DROP dyskretnie usuwa wiersz; FAIL zatrzymuje odświeżanie z powodu błędu. Wartość domyślna to FAIL. |
PARTITIONED BY |
Kolumny do partycjonowania zmaterializowanego widoku jeziora, który może poprawić wydajność zapytań dla filtrowanych odczytów. |
COMMENT |
Opis w formie wolnego tekstu przechowywany w definicji zmaterializowanego widoku jeziora. |
TBLPROPERTIES |
Pary klucz-wartość przechowywane jako metadane w zmaterializowanym widoku jeziora. |
AS select_statement |
Zapytanie SELECT definiujące dane w zmaterializowanym widoku jeziora. |
Przykłady
Poniższy przykład tworzy zmaterializowany widok jeziora z ograniczeniem dotyczącym jakości danych, komentarzem oraz partycjonowaniem. Klauzula OR REPLACE zastępuje dowolny istniejący widok o tej samej nazwie.
CREATE OR REPLACE MATERIALIZED LAKE VIEW silver.cleaned_order_data
(
CONSTRAINT valid_quantity CHECK (quantity > 0) ON MISMATCH DROP
)
PARTITIONED BY (category)
COMMENT "Cleaned order data joined from products and orders"
AS SELECT
p.productID,
p.productName,
p.category,
o.orderDate,
o.quantity,
o.totalAmount
FROM bronze.products p INNER JOIN bronze.orders o
ON p.productID = o.productID
Poniższy przykład tworzy prostszy zmaterializowany widok jeziora. Klauzula IF NOT EXISTS uniemożliwia błąd, jeśli widok już istnieje, dzięki czemu jest bezpieczny dla skryptów wdrażania.
CREATE MATERIALIZED LAKE VIEW IF NOT EXISTS silver.products_with_sales AS
SELECT
p.productID,
p.productName,
p.category,
CASE
WHEN COUNT(o.orderID) OVER (PARTITION BY p.productID) > 0 THEN TRUE
ELSE FALSE
END AS has_sales
FROM bronze.products p LEFT JOIN bronze.orders o
ON p.productID = o.productID
Wskazówka
Zarządzaj odświeżaniem zmaterializowanego widoku jeziora danych z poziomu lakehouse
Po utworzeniu zmaterializowanych widoków jeziora danych nie koordynuj ich odświeżania z poziomu notesu. Zamiast tego użyj dwóch wbudowanych funkcji w lakehouse:
- Pochodzenie danych: Fabric określa kolejność zależności między zmaterializowanymi widokami jeziora danych na podstawie ich definicji. Aby otworzyć widok pochodzenia, wybierz kartę Zmaterializowane widoki jeziora na wstążce, a następnie wybierz pozycję Zarządzaj. Z tego miejsca możesz śledzić przebieg w toku i sprawdzać zależności nadrzędne i podrzędne dla każdego widoku.
- Zaplanowane odświeżanie: w tym samym widoku Zarządzanie utwórz co najmniej jeden harmonogram, aby odświeżyć wszystkie zmaterializowane widoki lake lub wybrany podzestaw. Każdy harmonogram jest uruchamiany niezależnie i odświeża widoki w kolejności zależności, więc widoki podrzędne zawsze odczytują świeże dane z ich widoków nadrzędnych. Fabric automatycznie ponawia próby w przypadku przejściowych błędów.
Użyj notatników, aby tworzyć i modyfikować definicje zmaterializowanych widoków lake. Niech śledzenie pochodzenia danych i zaplanowane odświeżanie odpowiadają za kolejność, uruchamianie i ponawianie prób — aby zapewnić niezawodne, powtarzalne dane przy mniejszej ilości kodu do utrzymania.
Importuj pliki za pomocą USING OneLake_Files
Oprócz definiowania zmaterializowanego widoku jeziora z tabel za pomocą AS select_statement, możesz zdefiniować taki, który pobiera surowe pliki (CSV lub Parquet) bezpośrednio z OneLake. Widok pobierający plik wykorzystuje klauzulę USING OneLake_Files wskazującą na fizyczny folder OneLake lub skrót do folderu OneLake zamiast zapytania AS SELECT . Ten wzór sprawia, że stanowi naturalną warstwę brązu dla architektury medalionowej.
Poniższa tabela pokazuje, która składnia dotyczy każdego stylu autorstwa:
| Aspect | Widok zmaterializowany jeziora danych oparty na tabeli | Oparty na plikach zmaterializowany widok na jezioro |
|---|---|---|
| Source | Stoły lub inne zmaterializowane widoki na jezioro | Fizyczny folder OneLake lub skrót do folderów OneLake |
| Definition | AS select_statement |
USING OneLake_Files + OPTIONS |
| Formaty | Dowolna tabela zapytania. | CSV, Parquet |
| Schema | Pochodzące z SELECT |
schema_mode
=
DYNAMIC lub FIXED |
| Pochodzenie źródłowe | Tabele/widoki w górnym toku | Folder źródłowy, plus kolumna __filepath__ na wiersz |
| Typowa warstwa | Srebro, złoto | Brąz |
| Ograniczenia jakości danych | Supported | Zastosuj w docelowym widoku tabelarycznym |
Składnia
CREATE [OR REPLACE] MATERIALIZED LAKE VIEW [IF NOT EXISTS] [workspace.lakehouse.schema].MLV_Identifier
USING OneLake_Files
OPTIONS (
'format' = 'csv' | 'parquet',
'path' = 'abfss://<workspace>@<host>/<lakehouse>/Files/<folder>/',
['header' = 'true' | 'false',]
['delimiter' = '<char>']
)
[TBLPROPERTIES (
'schema_mode' = 'DYNAMIC' | 'FIXED',
'refresh_mode' = 'APPEND_ONLY' | 'FULL' | 'MIRROR'
)]
Uwaga / Notatka
Zmaterializowany widok lake pozyskujący pliki nie ma AS SELECT klauzuli — źródłem jest folder wskazany w OPTIONS. Aby przetworzyć pobrane dane, stwórz widok zmaterializowanego jeziora oparty na tabelach poniżej, który wybiera z tego widoku.
OPTIONS – odniesienie
| Option | Dotyczy | Opis |
|---|---|---|
format |
CSV, Parquet | Format pliku źródłowego. Obsługiwane wartości to csv i parquet. |
path |
CSV, Parquet | Fizyczny folder OneLake lub skrót folderu OneLake (abfss://…), który zawiera pliki źródłowe. Usługa rekurencyjnie importuje pliki z zagnieżdżonych podfolderów podczas tworzenia widoku. |
header |
CSV | Wskazuje, czy pierwszy wiersz każdego pliku zawiera nazwy kolumn. Wartość domyślna to false. |
delimiter |
CSV | Znak ogranicznika pól (na przykład , lub |). Domyślnie używa przecinka. |
Uwaga / Notatka
W przypadku plików CSV obecnie obsługiwane są tylko header i delimiter. Dodatkowe opcje parsowania (takie jak nullValue, quote, i escape) nie są jeszcze dostępne.
Dokumentacja TBLPROPERTIES
| Property | Values | Opis |
|---|---|---|
schema_mode |
DYNAMIC (wartość domyślna), FIXED |
DYNAMIC dodaje nowo odkryte kolumny i zapisuje, NULL gdy plik nie zawiera ustalonej kolumny.
FIXED ustala schemat w momencie tworzenia i odrzuca późniejsze rozbieżności. |
refresh_mode |
APPEND_ONLY, FULL, MIRROR |
APPEND_ONLY dodaje wiersze z nowych plików bez usuwania wierszy z usuniętych plików.
FULL ponownie przetwarza bieżący folder jako pełną migawkę.
MIRROR utrzymuje zmaterializowany wynik zgodny z dodawaniem i usuwaniem plików w folderze źródłowym. |
Example
Poniższy przykład wczytuje pliki CSV z folderu z wierszem nagłówka do widoku bronze. Każdy wiersz otrzymuje także kolumnę __filepath__ zapisującą plik źródłowy, z którego został odczytany.
CREATE MATERIALIZED LAKE VIEW bronze.raw_orders
USING OneLake_Files
OPTIONS (
'format' = 'csv',
'path' = 'abfss://SalesWorkspace@onelake.dfs.fabric.microsoft.com/SalesLake.Lakehouse/Files/orders/',
'header' = 'true'
)
TBLPROPERTIES (
'schema_mode' = 'DYNAMIC',
'refresh_mode' = 'APPEND_ONLY'
);
Następnie możesz budować widoki na jezioro materializowane ze srebra i złota, które wybierają spośród ; bronze.raw_ordersFabric rejestruje zależność i odświeża je w kolejności. Aby prześledzić pliki przez pipeline, zobacz Manage Fabric materialized lake views lineage.
Uwaga / Notatka
Gdy używasz FIXED schematu, a folder źródłowy zawiera wiele plików z różnymi schematami w momencie początkowego CREATE, widok zawodzi, ponieważ nie potrafi pogodzić jednego stałego schematu. Skieruj widoki FIXED na pliki, które korzystają z tego samego schematu, lub użyj DYNAMIC. Jest to znane ograniczenie, podobne do zachowania schematu stałego w transformacjach skrótowych.
Important
Ścieżki źródłowe zawierające surową spację lub %20 nie są obecnie obsługiwane. Możesz użyć skrótu do folderu OneLake jako źródła: podczas tworzenia pobierane są pliki dostępne w katalogu głównym skrótu oraz w zagnieżdżonych folderach. Zarządzane odświeżanie wykrywa nowe pliki dodane w katalogu głównym skrótu, ale nie wykrywa rekursywnie nowych plików dodanych w zagnieżdżonych folderach skrótów.
Wskazówka
Aby przetworzyć cały folder źródłowy na żądanie, uruchom REFRESH MATERIALIZED LAKE VIEW <name> FULL;. Podobnie jak w przypadku widoków tabelowych, nie organizuj ciągłego odświeżania z notatnika — użyj Lineage i Scheduled refresh, aby automatycznie pobierać nowe pliki.
Pobieranie listy zmaterializowanych widoków jeziora
Aby uzyskać listę wszystkich zmaterializowanych widoków na jeziorze danych w schemacie, użyj następującej składni:
SHOW MATERIALIZED LAKE VIEWS <IN/FROM> Schema_Name;
Aby na przykład wyświetlić listę wszystkich zmaterializowanych widoków jeziora w schemacie silver :
SHOW MATERIALIZED LAKE VIEWS IN silver;
Pobierz zapytanie, które utworzyło zmaterializowany widok jeziora
Aby uzyskać instrukcję CREATE dla zmaterializowanego widoku jeziora, użyj następującej składni:
SHOW CREATE MATERIALIZED LAKE VIEW MLV_Identifier;
Aby na przykład pobrać definicję elementu products_with_sales:
SHOW CREATE MATERIALIZED LAKE VIEW products_with_sales;
Aktualizowanie zmaterializowanego widoku jeziora
Aby zmodyfikować definicję zmaterializowanego widoku lake (takiego jak SELECT zapytanie, ograniczenia lub partycjonowanie), użyj polecenia CREATE OR REPLACE . Alternatywnie możesz usunąć istniejący widok i utworzyć go ponownie.
Zmienianie nazwy zmaterializowanego widoku jeziora
Aby zmienić nazwę istniejącego zmaterializowanego widoku jeziora, użyj ALTER MATERIALIZED LAKE VIEW polecenia . Składnia jest następująca:
ALTER MATERIALIZED LAKE VIEW MLV_Identifier RENAME TO MLV_Identifier_New;
Na przykład, aby zmienić nazwę products_with_sales:
ALTER MATERIALIZED LAKE VIEW products_with_sales RENAME TO products_with_sales_v2;
Uwaga / Notatka
Polecenie ALTER MATERIALIZED LAKE VIEW jest obsługiwane tylko w przypadku zmiany nazwy. Aby zmodyfikować definicję lub inne właściwości (takie jak SELECT zapytanie, ograniczenia lub partycjonowanie), zobacz Aktualizowanie zmaterializowanego widoku typu lake.
Usuwanie zmaterializowanego widoku jeziora
Zmaterializowany widok jeziora można usunąć przy użyciu opcji Usuń w eksploratorze obiektów lakehouse lub uruchamiając DROP polecenie. Składnia jest następująca:
DROP MATERIALIZED LAKE VIEW MLV_Identifier;
Aby na przykład usunąć products_with_sales:
DROP MATERIALIZED LAKE VIEW products_with_sales;
Uwaga / Notatka
Usunięcie lub zmiana nazwy widoku jeziora zmaterializowanego wpływa na widok pochodzenia oraz harmonogram odświeżania. Pamiętaj, aby zaktualizować odwołanie we wszystkich zależnych zmaterializowanych widokach jeziora.
Bieżące ograniczenia
Następujące ograniczenia dotyczą instrukcji Spark SQL dla zmaterializowanych widoków lake:
-
Nazwy schematów — nazwy schematów z wielką literą (na przykład
MYSCHEMA) nie są obsługiwane. Użyj małych liter lub liter mieszanych. -
Brak instrukcji języka manipulowania danymi (DML) — nie można uruchamiać instrukcji
INSERT,UPDATEaniDELETEna zmaterializowanym widoku lake. Dane są uzupełniane wyłącznie przez zapytanieSELECTokreślone w definicji. -
Brak zapytań dotyczących podróży czasowych — zapytanie w definicji zmaterializowanego widoku Delta Lake nie może używać składni podróży czasowej Delta Lake (np.
SELECTlub ). -
Brak wsparcia dla funkcji zdefiniowanych przez użytkownika — funkcje zdefiniowane przez użytkownika (UDF) nie są obsługiwane w
SELECTzapytaniu definiującym zmaterializowany widok typu lake. -
Brak widoków tymczasowych jako źródeł —
SELECTzapytanie może odwoływać się do tabel i innych zmaterializowanych widoków jeziora, ale nie widoków tymczasowych. -
Właściwości platformy Spark na poziomie sesji — właściwości konfiguracji platformy Spark ustawione na poziomie sesji (na przykład
spark.conf.set(...)) nie są stosowane podczas zaplanowanego odświeżania. Zamiast tego ustaw właściwości na poziomie lakehouse lub obszaru roboczego.