Optymalizacja tabel Delta Lake za pomocą rzędu V

Format tabeli Lakehouse i Delta Lake są kluczowe dla Microsoft Fabric. Utrzymanie zoptymalizowanych tabel delty jest kluczem do wydajności i efektywności kosztowej prac analitycznych.

Ten artykuł pomaga zdecydować, kiedy użyć V-order oraz pokazuje główne wzorce konfiguracji i konserwacji stołów Delta.

Skorzystaj z tego artykułu, aby:

  • Zrozum, co zmienia V-order i kiedy to pomaga.
  • Zrozum, jak Z-Order i V-Order się uzupełniają.
  • Wybierz odpowiedni poziom kontroli: sesja, właściwość tabeli lub operacja zapisu.
  • Zastosuj wzorce konserwacji tabeli delty w odpowiednim kontekście środowiska uruchomieniowego platformy Spark.

Wskazówki dotyczące stosowania V-order w zależności od scenariuszy zużycia znajdziesz w artykule Cross-workload table maintenance and optimization.

Czym jest V-order?

V-order to optymalizacja czasu zapisu dla plików Parquet, która może poprawić wydajność zapytań w dalszej części w silnikach Fabric.

Na pierwszy rzut oka:

  • Gdzie pomaga najbardziej: Wzorce z dużą liczbą operacji odczytu, takie jak pulpit nawigacyjny, interaktywna analiza i powtarzające się skanowania.
  • Jak to pomaga: Reorganizuje układ Parquet (na przykład rozkład grup wierszy, kodowanie i kompresję), aby zwiększyć wydajność odczytu.
  • Typowy kompromis: Operacje zapisu mogą trwać dłużej (często około 15% średnio), podczas gdy odczyty mogą znacznie poprawić się w zależności od obciążenia.
  • Zgodność silnika: Pliki pozostają zgodne ze standardem open-source Parquet, a funkcje Delta, takie jak Z-Order, pozostają zgodne.
  • Zakres: V-order jest na poziomie plików. Operacje delta, takie jak kompaktowanie, VACUUM i cofanie w czasie, mogą być używane z nim.

Zapisy w kolejności V sterowania

V-order służy do optymalizacji układu plików Parquet dla szybszej wydajności zapytań, zwłaszcza w scenariuszach wymagających dużej liczby odczytów. W Fabric V-order jest domyślnie wyłączony dla wszystkich nowo utworzonych przestrzeni roboczych, aby zoptymalizować wydajność dla obciążeń inżynierii danych wymagających intensywnego zapisu.

Zachowanie w kolejności V w Apache Spark jest kontrolowane za pomocą następujących konfiguracji:

Konfigurowanie Wartość domyślna opis
spark.sql.parquet.vorder.default false Steruje zapisem V-order na poziomie sesji. Ustawiono na false domyślnie w nowych obszarach roboczych usługi Fabric.
TBLPROPERTIES("delta.parquet.vorder.enabled") Nieustawiony Steruje domyślnym zachowaniem V-orderu na poziomie tabeli.
Opcja zapisywania ramki danych: parquet.vorder.enabled Nieustawiony Używany do sterowania kolejnością V na poziomie operacji zapisu.

Użyj poniższych poleceń, aby włączyć lub nadpisać zapisy w kolejności V w zależności od potrzeb dla swojego scenariusza.

V-order jest domyślnie wyłączony w nowych przestrzeniach roboczych Fabric (spark.sql.parquet.vorder.default=false), aby poprawić wydajność zapisu dla potoków pobierania i transformacji.

Dla obciążeń wymagających intensywnego odczytu, takich jak interaktywne zapytania czy dashboardy, włącz V-order, ustawiając spark.sql.parquet.vorder.default na .true Możesz też przełączać się na readHeavyforSparkReadHeavy profile zasobów, które automatycznie włączają V-order dla wydajności skoncentrowanej na odczytie.

W środowisku uruchomieniowym Fabric w wersji 1.3 lub nowszej ustawienie spark.sql.parquet.vorder.enable zostało usunięte. Ponieważ V-order można zastosować automatycznie podczas optymalizacji Delty z OPTIMIZE, nie potrzebujesz tego starszego ustawienia. Jeśli migrujesz z wcześniejszych wersji środowiska uruchomieniowego, usuń to ustawienie z kodu.

Sprawdź konfigurację V-order w sesji Apache Spark

Użyj tych poleceń, aby potwierdzić bieżącą wartość sesji przed jej zmianą.

%%sql 
SET spark.sql.parquet.vorder.default 

Wyłącz zapis w kolejności V w sesji Apache Spark

Użyj tych poleceń, gdy obciążenie zapisem jest duże i chcesz szybciej wprowadzać lub przekształcać dane.

%%sql 
SET spark.sql.parquet.vorder.default=FALSE 

Włączenie zapisu w kolejności V w sesji Apache Spark

Gdy włączasz V-order na poziomie sesji, wszystkie zapisy Parquet w tej sesji używają V-order, w tym tabele Parquet nie-Delta i Delta, nawet jeśli parquet.vorder.enabled jest to wyraźnie ustawione na false.

%%sql 
SET spark.sql.parquet.vorder.default=TRUE 

Steruj kolejnością V za pomocą właściwości tabeli Delta

W tej sekcji jest używana tylko usługa Spark SQL, ponieważ właściwości tabeli są definiowane za pomocą języka SQL DDL i ALTER TABLE instrukcji.

Użyj właściwości tabeli, jeśli chcesz ustawić wartość domyślną na poziomie tabeli, która ma zastosowanie między sesjami.

Włącz właściwość tabeli V-order podczas tworzenia tabeli:

%%sql 
CREATE TABLE person (id INT, name STRING, age INT) USING parquet TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");

Gdy właściwość tabeli jest ustawiona na true, INSERT, UPDATE, i stosujemy MERGE kolejność V w czasie zapisu. Ustawienia na poziomie sesji i zapisu nadal mają pierwszeństwo, więc zapisy mogą nadal używać V-order nawet wtedy, gdy TBLPROPERTIES jest ustawiony na false.

Włącz lub wyłącz V-order poprzez zmianę właściwości tabeli:

%%sql 
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");

ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "false");

ALTER TABLE person UNSET TBLPROPERTIES("delta.parquet.vorder.enabled");

Po włączeniu lub wyłączeniu V-order za pomocą właściwości tabeli, wpływa tylko przyszłe zapisy do tabeli. Pliki Parquet zachowują kolejność używaną podczas tworzenia. Aby zmienić obecną strukturę fizyczną i zastosować lub usunąć urząd V, przeczytaj Table compaction.

Bezpośrednie sterowanie w kolejności V podczas operacji zapisu

W tej sekcji użyto narzędzia PySpark do zademonstrowania interfejsu API zapisywania DataFrame. Ten sam wzorzec jest dostępny w interfejsach API ramki danych Scala z równoważnymi opcjami.

Użyj opcji na poziomie zapisu, jeśli potrzebujesz kontroli nad poszczególnymi operacjami zamiast ustawień domyślnych dla całej sesji lub tabeli.

Wszystkie polecenia zapisu w Apache Spark używają ustawień sesji, jeśli nie są one explicite nadpisane. Poniższe przykłady zapisują się w kolejności V, dziedzicząc konfigurację sesji.

df_source.write\
  .format("delta")\
  .mode("append")\
  .saveAsTable("myschema.mytable")

DeltaTable.createOrReplace(spark)\
  .addColumn("id","INT")\
  .addColumn("firstName","STRING")\
  .addColumn("middleName","STRING")\
  .addColumn("lastName","STRING",comment="surname")\
  .addColumn("birthDate","TIMESTAMP")\
  .location("Files/people")\
  .execute()

df_source.write\
  .format("delta")\
  .mode("overwrite")\
  .option("replaceWhere","start_date >= '2025-01-01' AND end_date <= '2025-01-31'")\
  .saveAsTable("myschema.mytable") 

V-order dotyczy tylko plików objętych daną predykatem.

W sesji, gdzie spark.sql.parquet.vorder.default jest nieustawiona lub ustawiona na , falsenastępujące polecenia zapisują się z użyciem kolejności V:

df_source.write\
  .format("delta")\
  .mode("overwrite")\
  .option("replaceWhere","start_date >= '2025-01-01' AND end_date <= '2025-01-31'")\
  .option("parquet.vorder.enabled","true")\
  .saveAsTable("myschema.mytable")

DeltaTable.createOrReplace(spark)\
  .addColumn("id","INT")\
  .addColumn("firstName","STRING")\
  .addColumn("middleName","STRING")\
  .addColumn("lastName","STRING",comment="surname")\
  .addColumn("birthDate","TIMESTAMP")\
  .option("parquet.vorder.enabled","true")\
  .location("Files/people")\
  .execute()