Dokumentacja języka Spark SQL dla zmaterializowanych widoków lake

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 MyTestView staje 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, UPDATE ani DELETE na zmaterializowanym widoku lake. Dane są uzupełniane wyłącznie przez zapytanie SELECT okreś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. SELECT lub ).
  • Brak wsparcia dla funkcji zdefiniowanych przez użytkownika — funkcje zdefiniowane przez użytkownika (UDF) nie są obsługiwane w SELECT zapytaniu definiującym zmaterializowany widok typu lake.
  • Brak widoków tymczasowych jako źródeł — SELECT zapytanie 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.