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, ...)];