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


Táblák particionálása az Azure Databricksben

Feljegyzés

A Databricks azt javasolja, hogy az összes új Delta-táblához használjuk a folyékony fürtözést. Lásd: Folyékony fürtözés használata Delta-táblákhoz.

A folyékony fürtöket néha "folyékony partícióknak" is nevezik. Ez a cikk csak az örökölt Delta particionálásra vonatkozik, a folyékony fürtözésre nem.

Ez a cikk áttekintést nyújt arról, hogyan particionálhatja a táblákat az Azure Databricksben, és konkrét javaslatokat tartalmaz arra vonatkozóan, hogy mikor érdemes particionálást használnia a Delta Lake által támogatott táblákhoz. A beépített funkciók és optimalizálások miatt a legtöbb, 1 TB-nál kevesebb adattal rendelkező tábla nem igényel partíciókat.

Az Azure Databricks alapértelmezés szerint a Delta Lake-t használja az összes táblához. Az alábbi javaslatok feltételezik, hogy a Delta Lake-et minden táblához használhatja.

A Databricks Runtime 11.3 LTS-ben és újabb verziókban az Azure Databricks automatikusan csoportosítja az adatokat nem particionált táblákban a betöltési idő alapján. Lásd: Betöltési időfürtök használata.

Particionálásra van szükség a kis táblákhoz?

A Databricks azt javasolja, hogy ne particionáljon olyan táblákat, amelyek kevesebb mint egy terabájtnyi adatot tartalmaznak.

Mi a minimális méret a táblák egyes partícióihoz?

A Databricks azt javasolja, hogy minden partíció legalább egy gigabájtnyi adatot tartalmazzon. A kevesebb, nagyobb partícióval rendelkező táblák általában túlteljesítettek a sok kisebb partícióval rendelkező táblákon.

Betöltési időfürtök használata

A Delta Lake és a Databricks Runtime 11.3 LTS vagy újabb, nem particionált táblák használatával automatikusan kihasználhatja a betöltési idő fürtözését. A betöltési idő hasonló lekérdezési előnyöket biztosít a datetime mezőkön alapuló particionálási stratégiákhoz anélkül, hogy optimalizálnia vagy finomhangolnia kellene az adatokat.

Feljegyzés

A betöltési idő fürtözésének fenntartása érdekében, ha nagy számú módosítást UPDATE hajt végre egy táblán vagy MERGE utasításon, a Databricks azt javasolja, hogy a betöltési sorrendnek megfelelő oszlop használatával ZORDER BY fussonOPTIMIZE. Ez lehet például egy esemény-időbélyeget vagy létrehozási dátumot tartalmazó oszlop.

A Delta Lake és a Parquet osztozik a particionálási stratégiákon?

A Delta Lake a Parquetet használja az adatok tárolásának elsődleges formátumaként, és egyes, megadott partíciókkal rendelkező Delta-táblák az Apache Sparkban tárolt Parquet-táblákhoz hasonló szervezetet mutatnak be. Az Apache Spark Hive-stílusú particionálást használ az adatok Parquet formátumú mentésekor. A Hive-stílusú particionálás nem része a Delta Lake protokollnak, és a számítási feladatok nem támaszkodhatnak erre a particionálási stratégiára a Delta-táblák használatához.

Számos Delta Lake-funkció megszakítja a Parquet, Hive vagy akár korábbi Delta Lake protokollverziókból átvitt adatelrendezések feltételezéseit. A Delta Lake-ben tárolt adatokkal mindig hivatalosan támogatott ügyfeleket és API-kat kell használnia.

Miben különböznek a Delta Lake-partíciók a többi adattó partícióitól?

Míg az Azure Databricks és a Delta Lake olyan nyílt forráskód technológiákra épül, mint az Apache Spark, a Parquet, a Hive és a Hadoop, az ezekben a technológiákban hasznos motivációk és stratégiák particionálása általában nem igaz az Azure Databricksre. Ha a táblázat particionálását választja, a stratégia kiválasztása előtt vegye figyelembe a következő tényeket:

  • A tranzakciókat nem partícióhatárok határozzák meg. A Delta Lake a tranzakciónaplókon keresztül biztosítja az ACID-t , így nem kell partícióval elválasztania egy adatköteget az atomi felderítés biztosításához.
  • Az Azure Databricks számítási fürtöi nem rendelkeznek fizikai adathordozóhoz kötött adat honossággal. A tóházba betöltött adatok a felhőobjektum-tárolóban vannak tárolva. Bár az adatok gyorsítótárazva lesznek a helyi lemeztárolóba az adatfeldolgozás során, az Azure Databricks fájlalapú statisztikákkal azonosítja a párhuzamos betöltéshez szükséges minimális adatmennyiséget.

Hogyan működnek együtt a Z-rendelések és a partíciók?

A partíciók mellett Z-megrendelési indexek is használhatók a nagy adathalmazok lekérdezéseinek felgyorsításához.

Feljegyzés

A legtöbb tábla kihasználhatja a betöltési idő fürtözését , hogy ne kelljen aggódnia a Z-sorrend és a partícióhangolás miatt.

A következő szabályokat fontos szem előtt tartani a partícióhatárok és A-sorrend alapján történő lekérdezésoptimalizálási stratégia tervezésekor:

  • A Z-order a paranccsal OPTIMIZE párhuzamosan működik. A fájlok nem egyesíthetők a partícióhatárok között, ezért a Z-sorrendű fürtözés csak egy partíción belül történhet. Nem particionált táblák esetén a fájlok a teljes táblában kombinálhatók.
  • A particionálás csak alacsony vagy ismert számosságú mezőknél (például dátummezőknél vagy fizikai helyeknél) működik jól, magas számosságú mezőknél, például időbélyegekhez nem. A Z-rendelés minden mezőnél működik, beleértve a nagy számosságú mezőket és a végtelenül növekedő mezőket (például időbélyegeket vagy egy tranzakció vagy rendelési tábla ügyfélazonosítóját).
  • A particionáláshoz használt mezőkre nem lehet Z-sorrendet rendelni.

Ha a partíciók olyan rosszak, miért használják az Azure Databricks egyes funkciói?

A partíciók előnyösek lehetnek, különösen a nagyon nagy táblák esetében. A particionálás számos teljesítménybeli fejlesztése a nagyon nagy (több száz terabájtos vagy nagyobb) táblákra összpontosít.

Számos ügyfél parquet-alapú adattóból migrál a Delta Lake-be. Az CONVERT TO DELTA utasítás lehetővé teszi egy meglévő Parquet-alapú tábla deltatáblává alakítását a meglévő adatok újraírása nélkül. Ezért sok ügyfél nagy táblával rendelkezik, amelyek öröklik a korábbi particionálási stratégiákat. A Databricks által kifejlesztett egyes optimalizálások lehetőség szerint ezeket a partíciókat próbálják kihasználni, ami enyhíti a Delta Lake-hez nem optimalizált particionálási stratégiák lehetséges hátrányait.

A Delta Lake és az Apache Spark nyílt forráskódú technológiák. Bár a Databricks továbbra is olyan funkciókat vezet be, amelyek csökkentik a particionálásra való támaszkodást, a nyílt forráskód közösség továbbra is új, összetettséget csökkentő funkciókat építhet ki.

Túlléphető az Azure Databricks beépített optimalizálása egyéni particionálással?

Az Apache Spark és a Delta Lake néhány tapasztalt felhasználója olyan mintát tervezhet és implementálhat, amely jobb teljesítményt nyújt, mint a betöltési idő fürtözése. A rossz particionálási állapot implementálása nagyon negatív hatással lehet az alsóbb rétegbeli teljesítményre, és az adatok teljes újraírását igényelheti a javításhoz. A Databricks azt javasolja, hogy a felhasználók többsége használja az alapértelmezett beállításokat, hogy elkerülje a költséges hatékonysági problémákat.