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


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.