Megosztás a következőn keresztül:


Delta Lake-táblaoptimalizálás és V-Order

A Lakehouse és a Delta Lake táblaformátum központi szerepet játszik a Microsoft Fabricben, ezért kulcsfontosságú követelmény, hogy a táblákat elemzésre optimalizálják. Ez az útmutató bemutatja a Delta Lake táblaoptimalizálási fogalmait, konfigurációit, és azt, hogy hogyan alkalmazható a leggyakoribb Big Data-használati mintákra.

Mi az a V-Order?

A V-Order egy írási idő optimalizálása a parquet fájlformátumra , amely villámgyors olvasást tesz lehetővé a Microsoft Fabric számítási motorjaiban, például a Power BI-ban, az SQL-ben, a Sparkban és másokban.

A Power BI és az SQL-motorok a Microsoft Verti-Scan technológiát és a V-Ordered parquet fájlokat használják a memóriában, például az adatelérési idők eléréséhez. A Spark és más nem Verti-Scan számítási motorok is élvezhetik a V-Ordered fájlokat, átlagosan 10%-kal gyorsabban olvashatók, bizonyos forgatókönyvek akár 50%-kal is.

A V-Order úgy működik, hogy speciális rendezést, sorcsoport-eloszlást, szótárkódolást és tömörítést alkalmaz a parquet-fájlokon, így kevesebb hálózati, lemez- és CPU-erőforrást igényel a számítási motorokban az olvasáshoz, ami költséghatékonyságot és teljesítményt biztosít. A V-Order rendezés 15%-os hatással van az átlagos írási időkre, de akár 50%-kal több tömörítést is biztosít.

100%-ban nyílt forráskódú parquet formátumnak felel meg; minden parkettamotor normál parquet-fájlként tudja olvasni. A deltatáblák minden eddiginél hatékonyabbak; az olyan funkciók, mint a Z-Order, kompatibilisek a V-Order szolgáltatással. A táblatulajdonságok és az optimalizálási parancsok a partíciók V-Order vezérlőjén használhatók.

A V-Order a parquet fájl szintjén van alkalmazva. A Delta táblák és funkciói, mint például a Z-Order, a tömörítés, a vákuum, az időutazás stb. ortogonálisak a V-Orderhez, így kompatibilisek, és együtt használhatók a további előnyök érdekében.

V-Order írások szabályozása

A V-Order alapértelmezés szerint engedélyezve van a Microsoft Fabricben, az Apache Sparkban pedig az alábbi konfigurációk vezérlik.

Konfiguráció Alapértelmezett érték Leírás
spark.sql.parquet.vorder.enabled true Szabályozza a munkamenetszintű V-Order írást.
TBLPROPERTIES("delta.parquet.vorder.enabled") false Alapértelmezett V-Order mód táblákon
Adatkeret-író beállítás: parquet.vorder.enabled foglalatból kivesz V-Order írások vezérlése Dataframe-íróval

Az alábbi parancsokkal szabályozhatja a V-Order írások használatát.

V-Order konfiguráció ellenőrzése az Apache Spark-munkamenetben

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

V-Order írás letiltása az Apache Spark-munkamenetben

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

V-Order írás engedélyezése az Apache Spark-munkamenetben

Fontos

Amikor engedélyezve van a munkamenet szintjén. Minden parquet írás engedélyezve van a V-Order funkcióval. Ide tartoznak a nem Delta-parquet táblák és a Delta-táblák, és a parquet.vorder.enabled táblatulajdonság értéke vagy true false.

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

V-Order szabályozása Delta-táblatulajdonságokkal

V-Order táblatulajdonság engedélyezése a tábla létrehozásakor:

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

Fontos

Ha a táblatulajdonság igaz értékre van állítva, az INSERT, UPDATE és MERGE parancsok a várt módon fognak viselkedni, és végrehajtják az írási idő optimalizálását. Ha a V-Order munkamenet-konfiguráció értéke igaz, vagy a spark.write engedélyezi, akkor az írások akkor is V-Sorrend lesznek, ha a TBLPROPERTIES értéke hamis.

A V-Order engedélyezése vagy letiltása a táblatulajdonság módosításával:

%%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");

Miután táblatulajdonságokkal engedélyezte vagy letiltotta a V-Order szolgáltatást, a rendszer csak a későbbi írásokat érinti. A parquet-fájlok megtartják a létrehozásukkor használt sorrendet. Ha módosítani szeretné az aktuális fizikai struktúrát a V-Order alkalmazásához vagy eltávolításához, olvassa el a "V-Order szabályozása táblázat optimalizálásakor" című szakaszt alább.

V-Order vezérlése közvetlenül írási műveletekhez

Minden Apache Spark-írási parancs örökli a munkamenet-beállítást, ha nem explicit. Az alábbi parancsok v-order használatával írnak a munkamenet-konfiguráció implicit öröklésével.

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") 

Fontos

A V-Order csak a predikátum által érintett fájlokra vonatkozik.

Egy olyan munkamenetben, ahol spark.sql.parquet.vorder.enabled nincs megadva vagy hamisra van állítva, a következő parancsok v-order használatával írnak:

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()

Mi az írás optimalizálása?

A Big Data-feldolgozó motorokon, például az Apache Sparkon végzett elemzési számítási feladatok a leghatékonyabban teljesítenek a szabványosított nagyobb fájlméretek használatakor. A fájlméret, a fájlok száma, a Spark-feldolgozók száma és konfigurációi közötti kapcsolat kritikus szerepet játszik a teljesítményben. Az adatok data lake-táblákba való betöltésének öröklődő jellemzője lehet, hogy folyamatosan sok kis fájlt ír; ezt a forgatókönyvet gyakran "kis fájlproblémának" is nevezik.

Az Írás optimalizálása egy Delta Lake a Microsoft Fabricen és az Azure Synapse Analytics szolgáltatás az Apache Spark motorban, amely csökkenti az írott fájlok számát, és célja az írott adatok egyedi fájlméretének növelése. A célfájl mérete számítási feladatonként konfigurációk használatával módosítható.

A funkció alapértelmezés szerint engedélyezve van az Apache Sparkhoz készült Microsoft Fabric Runtime-ban. Az írási használati forgatókönyvek optimalizálásával kapcsolatos további információkért olvassa el az Apache Sparkon való írás optimalizálásának szükségességét ismertető cikket.

Egyesítés optimalizálása

A Delta Lake MERGE paranccsal a felhasználók speciális feltételekkel frissíthetik a deltatáblát. A MERGE paranccsal egy forrástáblából, nézetből vagy DataFrame-ből származó adatokat frissíthet céltáblává. A Delta Lake nyílt forráskód eloszlásának jelenlegi algoritmusa azonban nincs teljesen optimalizálva a nem módosított sorok kezelésére. A Microsoft Spark Delta csapata egyéni alacsony shuffle merge optimalizálást hajtott végre, a nem módosított sorok nem szerepelnek a megfelelő sorok frissítéséhez szükséges költséges egyesítési műveletből.

A megvalósítást a spark.microsoft.delta.merge.lowShuffle.enabled konfiguráció vezérli, amely alapértelmezés szerint engedélyezve van a futtatókörnyezetben. Nem igényel kódmódosítást, és teljes mértékben kompatibilis a Delta Lake nyílt forráskódú disztribúciójával. Ha többet szeretne megtudni az alacsony shuffle merge használati forgatókönyvekről, olvassa el az Alacsony shuffle Merge optimalizálás deltatáblákon című cikket.

Delta-tábla karbantartása

A Delta-táblák változásával a teljesítmény és a tárolási költséghatékonyság a következő okok miatt csökken:

  • A táblához hozzáadott új adatok eltúlozzanak adatokat.
  • A kötegelt és streamelt adatbetöltési sebesség sok kis fájlt eredményezhet.
  • A frissítési és törlési műveletek végül olvasási többletterhelést okoznak; A parquet-fájlok tervezés szerint nem módosíthatók, ezért a Delta-táblák új parquet fájlokat adnak hozzá a módosításkészlettel, tovább erősítve az első két elem által támasztott problémákat.
  • Már nincs szükség a tárolóban elérhető adatfájlokra és naplófájlokra.

Annak érdekében, hogy a táblák a legjobb teljesítmény érdekében a legjobb állapotban maradjanak, végezze el a bin-tömörítési és vákuumozási műveleteket a Delta-táblákban. A bin-tömörítés az OPTIMIZE paranccsal érhető el; az összes módosítást nagyobb, konszolidált parquet fájlokba egyesíti. A dereferenced storage clean-up a VACUUM paranccsal érhető el.

A táblakarbantartási parancsok , az OPTIMIZE és a VACUUM a jegyzetfüzetekben és a Spark-feladatdefiníciókban használhatók, majd platformfunkciókkal vezényelhetők. A Lakehouse in Fabric egy olyan funkciót kínál, amely a felhasználói felület használatával alkalmi táblakarbantartást tesz lehetővé a Delta Lake táblakarbantartási cikkének megfelelően.

Fontos

A táblázat fizikai szerkezetének megfelelő megtervezése a betöltési gyakoriság és a várt olvasási minták alapján valószínűleg fontosabb, mint az ebben a szakaszban leírt optimalizálási parancsok futtatása.

V-Order szabályozása táblázat optimalizálásakor

A következő parancsstruktúrák a TBLPROPERTIES beállítástól vagy munkamenetkonfigurációs beállítástól független V-Order használatával tömörítik és írják át az összes érintett fájlt:

%%sql 
OPTIMIZE <table|fileOrFolderPath> VORDER;

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

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

A ZORDER és a VORDER együttes használata esetén az Apache Spark egymás után hajtja végre a bin tömörítést, a ZORDER-t és a VORDER-t.

Az alábbi parancsok a TBLPROPERTIES beállítással tömörítik és újraírják az összes érintett fájlt. Ha a TBLPROPERTIES értéke V-Order értékre van állítva, az összes érintett fájl V-Order formátumban lesz megírva. Ha a TBLPROPERTIES nem vagy hamis értékre van állítva V-Order értékre, örökli a munkamenet-beállítást; ezért a V-Order táblából való eltávolításához állítsa a munkamenet-konfigurációt hamisra.

%%sql 
OPTIMIZE <table|fileOrFolderPath>;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate;

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