Optimalizace tabulek Delta Lake a pořadí V

Formát tabulky Lakehouse a Delta Lake jsou centrální pro Microsoft Fabric, protože tabulky jsou optimalizované pro analýzy, je klíčovým požadavkem. Tato příručka popisuje koncepty, konfigurace a způsob optimalizace tabulek Delta Lake a jejich použití na nejběžnější vzory použití velkých objemů dat.

Co je V-Order?

V-Order je optimalizace doby zápisu do formátu souboru Parquet, která umožňuje bleskově rychlé čtení ve výpočetních modulech Microsoft Fabric, jako jsou Power BI, SQL, Spark a další.

Moduly Power BI a SQL využívají technologii Microsoft Verti-Scan a soubory parquet objednaných V-Ordered k dosažení doby přístupu k datům v paměti, jako jsou doby přístupu k datům. Spark a další výpočetní moduly, které nejsou Verti-Scan, využívají také soubory objednané V s průměrnou rychlostí 10 % rychlejšího čtení s některými scénáři až 50 %.

Pořadí V-Order funguje tak, že u souborů Parquet použijete speciální řazení, distribuci skupiny řádků, kódování slovníku a kompresi, takže ve výpočetních strojích vyžadovat méně síťových, diskových a procesorových prostředků, které zajistí nákladovou efektivitu a výkon. Řazení V-Order má 15% vliv na průměrné doby zápisu, ale poskytuje až 50% větší kompresi.

Je to 100% opensourcový formát parquet kompatibilní. Všechny parketové motory ho můžou číst jako běžné soubory parquet. Rozdílové tabulky jsou efektivnější než kdy dřív; Funkce jako Z-Order jsou kompatibilní s V-Order. Vlastnosti tabulky a příkazy optimalizace lze použít pro řízení pořadí V v jeho oddílech.

V-Order se použije na úrovni souboru parquet. Tabulky Delta a její funkce, jako jsou Z-Order, komprimace, vakuum, časová cesta atd. jsou ortogonální do V-Order, jako například, jsou kompatibilní a lze je použít společně pro další výhody.

Řízení zápisů V-Order

Pořadí V-Order je ve výchozím nastavení povolené v Microsoft Fabric a v Apache Sparku je řízeno následujícími konfiguracemi.

Konfigurace Výchozí hodnota Popis
spark.sql.parquet.vorder.enabled true Řídí zápis na úrovni relace V-Order.
TBLPROPERTIES("delta.parquet.vorder.enabled") false (nepravda) Výchozí režim V-Order u tabulek
Možnost zapisovače datového rámce: parquet.vorder.enabled Odstavení Řízení zápisů V-Order pomocí zapisovače datového rámce

Pomocí následujících příkazů můžete řídit použití zápisů V-Order.

Kontrola konfigurace V-Order v relaci Apache Sparku

%%sql 
SET spark.sql.parquet.vorder.enabled 

Zakázání zápisu V-Order v relaci Apache Sparku

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

Povolení zápisu V-Order v relaci Apache Sparku

Důležité

Pokud je tato možnost povolená na úrovni relace. Všechny zápisy parquet jsou vyrobeny s povolenou objednávkou V. To zahrnuje tabulky, které nejsou delta parquet a tabulky Delta s parquet.vorder.enabled vlastností tabulky nastavenou na hodnotu nebo truefalse.

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

Řízení pořadí V-Order pomocí vlastností tabulky Delta

Při vytváření tabulky povolte vlastnost tabulky V-Order:

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

Důležité

Pokud je vlastnost tabulky nastavena na true, příkazy INSERT, UPDATE a MERGE se budou chovat podle očekávání a provádět optimalizaci doby zápisu. Pokud je konfigurace relace V-Order nastavena na true nebo spark.write ji povolí, zápisy budou V-Order, i když je TBLPROPERTIES nastavena na false.

Povolení nebo zakázání pořadí V-Order změnou vlastnosti tabulky:

%%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 povolení nebo zakázání pořadí V-Order pomocí vlastností tabulky budou ovlivněny pouze budoucí zápisy do tabulky. Soubory Parquet udržují řazení použité při vytváření. Pokud chcete změnit aktuální fyzickou strukturu tak, aby se použila nebo odebrala pořadí V-Order, přečtěte si níže část Řízení objednávky při optimalizaci tabulky.

Řízení pořadí V přímo u operací zápisu

Všechny příkazy pro zápis Apache Spark dědí nastavení relace, pokud nejsou explicitní. Všechny následující příkazy zapisují pomocí V-Order implicitně děděním konfigurace relace.

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 >= '2017-01-01' AND end_date <= '2017-01-31'")\
  .saveAsTable("myschema.mytable") 

Důležité

Pořadí V se vztahuje pouze na soubory ovlivněné predikátem.

V relaci, kde spark.sql.parquet.vorder.enabled není nastavena nebo nastavena na hodnotu false, by následující příkazy zapisovaly pomocí pořadí V:

df_source.write\
  .format("delta")\
  .mode("overwrite")\
  .option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-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()

Co je optimalizovat zápis?

Analytické úlohy na strojích pro zpracování velkých objemů dat, jako je Apache Spark, fungují nejefektivněji při použití standardizovaných větších velikostí souborů. Vztah mezi velikostí souboru, počtem souborů, počtem pracovních procesů Sparku a jeho konfigurací hraje důležitou roli při výkonu. Ingestování dat do tabulek Data Lake může mít zděděnou charakteristiku neustálého zápisu velkého množství malých souborů; tento scénář se běžně označuje jako "malý problém se souborem".

Optimalizace zápisu je funkce Delta Lake v Microsoft Fabric a Azure Synapse Analytics v modulu Apache Spark, která snižuje počet zapsaných souborů a má za cíl zvýšit velikost jednotlivých souborů zapsaných dat. Cílovou velikost souboru je možné změnit podle požadavků na úlohy pomocí konfigurací.

Tato funkce je ve výchozím nastavení povolená v prostředí Microsoft Fabric Runtime pro Apache Spark. Další informace o scénářích optimalizace využití zápisu najdete v článku Potřeba optimalizace zápisu v Apache Sparku.

Optimalizace sloučení

Příkaz Delta Lake MERGE umožňuje uživatelům aktualizovat tabulku Delta s rozšířenými podmínkami. Pomocí příkazu MERGE může aktualizovat data ze zdrojové tabulky, zobrazení nebo datového rámce do cílové tabulky. Aktuální algoritmus v opensourcové distribuci Delta Lake ale není plně optimalizovaný pro zpracování nemodifikovaných řádků. Tým Microsoft Spark Delta implementoval vlastní optimalizaci sloučení s nízkým shufflem, neupravené řádky jsou vyloučeny z nákladné operace náhodného náhodného prohazování, která je nutná pro aktualizaci odpovídajících řádků.

Implementace je řízena spark.microsoft.delta.merge.lowShuffle.enabled konfigurací, která je ve výchozím nastavení povolena v modulu runtime. Nevyžaduje žádné změny kódu a je plně kompatibilní s opensourcovou distribucí Delta Lake. Další informace o scénářích použití sloučení s nízkým shufflem najdete v článku Optimalizace sloučení nízkého náhodného náhodného prohazování v tabulkách Delta.

Údržba tabulek Delta

Vzhledem k tomu, že se tabulky Delta mění, efektivita nákladů na výkon a úložiště mají tendenci snížit z následujících důvodů:

  • Nová data přidaná do tabulky můžou zkosit data.
  • Dávkové a streamované rychlosti příjmu dat můžou přinést mnoho malých souborů.
  • Operace aktualizace a odstranění nakonec vytvářejí režijní náklady na čtení; Soubory parquet jsou neměnné podle návrhu, takže tabulky Delta přidávají nové soubory parquet se sadou změn a dále rozšiřují problémy uložené prvními dvěma položkami.
  • Už nepotřebujete datové soubory a soubory protokolů dostupné v úložišti.

Aby byly tabulky v nejlepším stavu pro dosažení nejlepšího výkonu, proveďte operace komprimace přihrádek a úklidu v tabulkách Delta. Komprimace přihrádky se dosahuje příkazem OPTIMIZE ; slučuje všechny změny do větších konsolidovaných souborů parquet. Vyčištění úložiště dereferenced se dosahuje příkazem VAKUA .

Příkazy údržby tabulek OPTIMIZE a VACUUM je možné použít v poznámkových blocích a definicích úloh Sparku a pak je orchestrovat pomocí funkcí platformy. Lakehouse in Fabric nabízí funkci pro použití uživatelského rozhraní k provádění ad hoc údržby tabulek, jak je vysvětleno v článku o údržbě tabulky Delta Lake.

Důležité

Správné navrhování fyzické struktury tabulky na základě frekvence příjmu dat a očekávaných vzorů čtení je pravděpodobně důležitější než spouštění příkazů optimalizace popsaných v této části.

Řízení pořadí V při optimalizaci tabulky

Následující příkazy strukturují bin-compact a přepisují všechny ovlivněné soubory pomocí V-Order, nezávisle na nastavení TBLPROPERTIES nebo nastavení konfigurace relace:

%%sql 
OPTIMIZE <table|fileOrFolderPath> VORDER;

OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> VORDER;

OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> [ZORDER  BY (col_name1, col_name2, ...)] VORDER;

Při společném použití ZORDER a VORDER provede Apache Spark sekvenčně binární komprimace, ZORDER a VORDER.

Následující příkazy komprimují a přepíší všechny ovlivněné soubory pomocí nastavení TBLPROPERTIES. Pokud je TBLPROPERTIES nastavena true na V-Order, všechny ovlivněné soubory jsou zapsány jako V-Order. Pokud je TBLPROPERTIES nenastavený nebo nastaven na hodnotu false na V-Order, dědí nastavení relace; takže pokud chcete z tabulky odebrat pořadí V-Order, nastavte konfiguraci relace na false.

%%sql 
OPTIMIZE <table|fileOrFolderPath>;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate [ZORDER BY (col_name1, col_name2, ...)];