Partíciófelderítés külső táblákhoz
Ez a cikk ismerteti a Unity Catalog külső táblák alapértelmezett partíciófelderítési stratégiáját, valamint egy opcionális beállítást, amely lehetővé teszi egy partíció metaadat-naplójának engedélyezését, amely konzisztenssé teszi a partíciófelderítést a Hive metaadattárával.
A Databricks javasolja, hogy engedélyezze a partíció metaadatainak naplózását a jobb olvasási sebesség és lekérdezési teljesítmény érdekében a Unity Catalog külső, partíciókkal rendelkező tábláihoz.
Mi a Unity Catalog alapértelmezett partíciófelderítési stratégiája?
Alapértelmezés szerint a Unity Catalog rekurzív módon listázza a tábla helyének összes könyvtárát, hogy automatikusan felderítse a partíciókat. A sok partíciókönyvtárral rendelkező nagy táblák esetében ez számos táblaművelet késését növelheti.
Partíció metaadatok naplózásának használata
Fontos
Ez a funkció a nyilvános előzetes verzióban érhető el.
A Databricks Runtime 13.3 LTS-ben és újabb verziókban opcionálisan engedélyezheti a partíció metaadatainak naplózását, amely a Unity Catalogban regisztrált külső táblák partíciófelderítési stratégiája. Ez a viselkedés összhangban van a Hive metaadattárban használt partíciófelderítési stratégiával. Ez a viselkedés csak a partíciókkal rendelkező és Parquetet, ORC-t, CSV-t vagy JSON-t használó külső Unity Catalog-táblákra van hatással. A Databricks javasolja az új viselkedés engedélyezését a táblák jobb olvasási sebessége és lekérdezési teljesítménye érdekében.
Fontos
A partíció metaadatainak naplózását engedélyező táblák viselkedésbeli változást mutatnak a partíciófelderítésben. A partíciók táblahelyének automatikus vizsgálata helyett a Unity Catalog csak a partíció metaadataiban regisztrált partíciókat tartja tiszteletben. Lásd: Partíció metaadatainak manuális hozzáadása, elvetése vagy javítása.
Ez a viselkedés lesz az alapértelmezett a Databricks Runtime jövőbeli verziójában. Az ezzel a funkcióval rendelkező táblák csak a Databricks Runtime 13.3 LTS és újabb verziók használatával olvashatók és írhatók.
Feljegyzés
A Databricks Runtime 12.2 LTS-sel vagy az alábbiakkal kell lekérdeznie egy táblát, hogy meggyőződjön arról, hogy nem használja az új partíciónapló viselkedését.
Partíció metaadatok naplózásának engedélyezése
Ha engedélyezni szeretné a partíció metaadatainak naplózását egy táblán, engedélyeznie kell egy Spark-konföderációt az aktuális SparkSessionhoz, majd létre kell hoznia egy külső táblát. Ez a beállítás csak a táblát létrehozó SparkSessionban szükséges. Miután létrehozott egy táblát, amelyen engedélyezve van a partíció metaadatainak naplózása, az megőrzi ezt a beállítást a tábla metaadatainak részeként, és a funkciót minden további számítási feladatban használja.
Az alábbi szintaxis azt mutatja be, hogy az SQL használatával állít be Spark-konföderációt egy jegyzetfüzetben. A Spark-konfigurációkat a számítás konfigurálásakor is beállíthatja.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Fontos
Csak a Databricks Runtime 13.3 LTS-ben és újabb verziókban engedélyezett partíció metaadatok naplózásával rendelkező táblákat olvashat és írhat. Ha a Databricks Runtime 12.2 LTS-en vagy alatta futó számítási feladatoknak használniuk kell a táblákat, ne használja ezt a beállítást.
A külső táblák nem törlik a mögöttes adatfájlokat, amikor elveti őket. A Databricks szintaxis használatát CREATE OR REPLACE
javasolja a táblák frissítéséhez a partíció metaadat-naplózásának használatához, ahogyan az alábbi példában is látható:
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';
A Unity Catalog a táblák és kötetek útvonalátfedő szabályaira kényszeríti a szabályokat. Ha egy tábla már létezik ezen a helyen, nem regisztrálhat új Unity Catalog-táblát adatfájlok gyűjteményére.
Táblákkal végzett munka partíció metaadataival
A Databricks azt javasolja, hogy az összes olvasási és írási táblában használjon táblaneveket a Unity Catalogban regisztrált összes táblához. A partíció metaadataival rendelkező táblák esetében ez garantálja, hogy a táblaregisztrációhoz hozzáadott új partíciók bekerülnek a Unity Katalógusba, és hogy a tábla lekérdezései az összes regisztrált partíciót beolvassák.
Az elérésiút-alapú minták olvasáshoz vagy íráshoz való használata azt eredményezheti, hogy a partíciók figyelmen kívül hagyva vagy nem regisztrálva lesznek a Unity Catalog metaadattárában. Lásd: Korlátozások.
Partíciók listázása
A következő paranccsal megjelenítheti a Unity Catalogban regisztrált összes partíciót partíció metaadatként:
SHOW PARTITIONS <table-name>
Annak ellenőrzéséhez, hogy egy partíció regisztrálva van-e a Unity Catalogban, használja a következő parancsot:
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
Partíció metaadatainak manuális hozzáadása, elvetése vagy javítása
A Unity Catalog megköveteli, hogy a külső táblák összes partíciója a záradék használatával LOCATION
a táblaregisztráció során regisztrált könyvtárban legyen.
Ha engedélyezve van a partíció metaadatainak engedélyezése, a partíciók automatikus felderítése a tábla helyén le van tiltva. Ha a külső rendszerek adatokat írnak a tábla helyére, vagy elérésiút-alapú írásokkal ad hozzá vagy felülírnak rekordokat a táblában, manuálisan kell javítania a partíció metaadatait.
Az Azure Databricks Hive-stílusú particionálást használ a Parquet, ORC, CSV és JSON által támogatott táblák tárolására. A hive stílusú partíciók kulcs-érték párokat tartalmaznak, amelyeket egy egyenlőségjel kapcsol össze a partíciókönyvtárban, például year=2021/month=01/
.
Ha a táblázat Hive-stílusú particionálást használ, a MSCK REPAIR
Partíció metaadatait szinkronizálhatja a Unity Katalógusban a táblahelyen található partíciókkal. Az alábbi szintaxisbeli példák a gyakori műveleteket mutatják be:
-- Add and remove parition metadata to match directories in table location
MSCK REPAIR TABLE <table_name> SYNC PARTITIONS;
-- Add partitions in the table location that are not registered as partition metadata
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;
-- Drop partitions registered as partition metadata that are not in the table location
MSCK REPAIR TABLE <table_name> DROP PARTITIONS;
Lásd: REPAIR TABLE.
Más partíciótípusok elérési útjainak manuális megadása
Ha a táblázat nem hive stílusú particionálást használ, a partíciók hozzáadásakor manuálisan kell megadnia a partícióhelyeket. A partíciók manuális megadása a szintaxishoz MSCK REPAIR
képest is csökkentheti a késést, különösen a nagy számú partícióval rendelkező táblák esetében. A következő szintaxis példája egy partíció hozzáadását mutatja be:
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
Szintaxist is használhat ALTER TABLE
a partíciók helyének elvetéséhez, átnevezéséhez, helyreállításához és beállításához. Lásd: ALTER TABLE ... PARTITION.
Új partíció metaadatainak letiltása
A Spark-konföderáció azt szabályozza, hogy az új táblák használnak-e partíció metaadatokat, alapértelmezés szerint le van tiltva. Ezt a viselkedést explicit módon is letilthatja. Az alábbi szintaxis az SQL-t használja a Spark-konferencia letiltásához:
SET spark.databricks.nonDelta.partitionLog.enabled = false;
Ez csak azt szabályozza, hogy a SparkSession-ben létrehozott táblák használnak-e partíció metaadatokat. Ha le szeretné tiltani a partíció metaadatait egy olyan táblában, amely a viselkedést használja, el kell dobnia és újra létre kell hoznia a táblát egy Olyan SparkSession-ben, amelyben nincs engedélyezve a Spark-konferencia.
Feljegyzés
Bár a Databricks Runtime 12.2 LTS-ben vagy az alatta engedélyezett partíció metaadatokkal rendelkező táblákba nem tud olvasni vagy írni, ezekhez a táblákhoz futtathat vagy DROP
utasításokat is futtathatCREATE OR REPLACE TABLE
, ha rendelkezik megfelelő jogosultságokkal a Unity Catalogban.
Korlátozások
Az alábbi korlátozások érvényesek:
- A Databricks Runtime 12.2 LTS vagy újabb verziójával engedélyezett partíció metaadatait tartalmazó táblák nem olvashatók és nem írhatók.
- Ha egy táblát a címtár elérési útján olvas, az összes partíciót visszaadja, beleértve a manuálisan hozzáadott vagy elvetett partíciókat is.
- Ha táblanév helyett elérési út használatával szúr be vagy ír felül rekordokat egy táblában, a rendszer nem rögzíti a partíció metaadatait.
- Az Avro fájlformátum nem támogatott.