Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Delta Lake-oszlopleképezés lehetővé teszi, hogy a metaadat-módosítások az adatfájlok újraírása nélkül átnevezik vagy elvetik az oszlopokat. Az oszlopleképezés lehetővé teszi a Parquet által nem támogatott karakterek használatát az oszlopnevekben, például a szóközökben, így közvetlenül betöltheti a CSV- vagy JSON-adatokat a Delta Lake-be oszlopok átnevezése nélkül.
Előfeltételek
Az oszlopleképezés engedélyezése előtt tekintse át a korlátozásokat.
Az oszlopleképezéshez a következők szükségesek:
- Delta protokollok: az olvasó 2-es vagy újabb verziója, az író 5-ös vagy újabb verziója. Lásd a Delta Lake szolgáltatáskompatibilitását és protokolljait.
- Az oszlopleképezést engedélyező táblák olvasásához a Databricks Runtime 10.4 LTS és újabb verziója szükséges
Oszlopleképezés engedélyezése
Az alábbi paranccsal engedélyezheti az oszlopleképezést egy új táblában id módban:
CREATE table <table-name> (
id INT,
name STRING
)
USING DELTA
TBLPROPERTIES (
'delta.columnMapping.mode' = 'id'
);
Az alábbi paranccsal engedélyezheti az oszlopleképezést meglévő táblán name módban:
ALTER TABLE <table-name> SET TBLPROPERTIES (
'delta.columnMapping.mode' = 'name'
)
Az oszlopleképezési módokról további információt az Oszlopleképezési módok című témakörben talál.
Oszlop átnevezése
Ha egy Delta Lake-tábla esetében engedélyezve van az oszlopleképezés, átnevezhet egy oszlopot:
ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name
További példákért lásd: Táblaséma frissítése sémafejlődéssel.
Oszlopok törlése
Ha egy Delta Lake-tábla esetében engedélyezve van az oszlopleképezés, elvethet egy vagy több oszlopot:
ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)
További részletekért lásd: Táblaséma frissítése sémafejlődéssel.
Oszlopleképezési módok
A delta.columnMapping.mode tábla tulajdonsága lehetővé teszi, hogy csak metaadatokat érintő módosításokkal, az adatfájlok újraírása nélkül töröltként vagy átnevezettként jelöljék meg az oszlopokat. A következő módok érhetők el:
-
none(alapértelmezett): Az oszlopleképezés nincs engedélyezve. Az oszlopnevekre parquet-elnevezési korlátozások vonatkoznak. -
name: Ez lehetővé teszi a csak metaadat-alapú oszlopok átnevezését és elvetését, és lehetővé teszi a speciális karakterek használatát az oszlopnevekben.namea mód új és meglévő táblákon is beállítható. -
id: Ez lehetővé teszi a csak metaadat-alapú oszlopok átnevezését és elvetését, és lehetővé teszi a speciális karakterek használatát az oszlopnevekben.ida módot táblalétrehozáskor kell beállítani, és nem lehet meglévő táblákon beállítani.
Note
A Databricks kompatibilitási célokra a legtöbb használati esetben a módot javasolja id . Azonban a name mód automatikusan beállított, ha nem adsz meg értéket delta.columnMapping.mode , és engedélyezed a Iceberg kompatibilitási funkciókat, például a Iceberg olvasásokat.
Támogatott karakterek az oszlopnevekben
Ha egy Delta Lake-tábla esetében engedélyezve van az oszlopleképezés, a szóközöket és a karaktereket a következő oszlopnevekbe is belefoglalhatja: ,;{}()\n\t=.
Oszlopleképezés eltávolítása
Warning
Az oszlopleképezés eltávolítása átírja az összes adatfájlt a fizikai oszlopnevek logikai nevekre való lecseréléséhez. Ez a művelet nem támogatja a sorszintű vagy fizikai ütközések feloldását.
Az egyidejű írási műveletek okoznak egy ConcurrentModificationException.
Az oszlopleképezés eltávolítása előtt:
- Szüneteltetheti az összes egyidejű írási műveletet, beleértve a streamelési feladatokat és az ETL-folyamatokat.
- Kapcsolja ki a prediktív optimalizálást a táblában.
- Nagy táblák esetén ütemezze ezt a műveletet alacsony tevékenységű időszakokban.
Az oszlopleképezést a következő paranccsal távolíthatja el egy táblából:
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')
Az oszlopleképezés eltávolításához és a táblaprotokoll leminősítéséhez lásd: Kompatibilitás fenntartása.
Kompatibilitás fenntartása
A Databricks Runtime 15.4 LTS-ben és újabb verziókban a paranccsal eltávolíthatja az DROP FEATURE oszlopleképezést, és leminősítheti a táblaprotokollt, fenntartva a kompatibilitást az olvasókkal a Databricks Runtime 10.3-at és az alábbi verziót használva.
Important
Az oszlopleképezés táblából való elvetése nem távolítja el a particionált táblák címtárneveiben használt véletlenszerű előtagokat.
Lásd Delta Lake tábla szolgáltatás megszüntetése és tábla protokoll visszaminősítése.
Oszlopleképezés és streamelés
A nem additív sémamódosítások, például az oszlopok átnevezése vagy elvetése megszakíthatják a streamelési olvasásokat. A schemaTrackingLocation használatával lehetővé teszi a Delta Lake számára a sémaváltozások nyomon követését és a streamhibák megelőzését.
Configuration
A(z) schemaTrackingLocation konfigurálásakor:
- A forrástáblából beolvasott streamek mindegyikének sajátnak
schemaTrackingLocationkell lennie. - A
schemaTrackingLocationelemnek a streaming írási célcheckpointLocationkönyvtárán belül kell lennie. - Az olyan munkaterhelések esetén, amelyek több forrástáblából olvasnak, a
checkpointLocationkönyvtáron belül minden egyes forrástáblához adjon meg egyedi alkönyvtárakat.
A Delta Lake streamelési lehetőségeinek teljes listáját a Delta Lake-ben találja.
Oszlopleképezés engedélyezése aktív streamen
Oszlopleképezés engedélyezése aktív streamelési feladaton:
- Az adatfolyam leállítása
- Oszlopok leképezésének engedélyezése a táblázaton
- Indítsa újra a streamet (első újraindítás – inicializálja az oszlopleképezést)
- Indítsa újra a streamet (második újraindítás – sémamódosítások engedélyezése)
Minden további sémamódosításhoz (oszlopok hozzáadásához vagy elvetéséhez, illetve az oszloptípusok módosításához) újra kell indítania a streamet.
példa
Ha egy oszlopleképezést használó Delta Lake-táblából történő streaming olvasáshoz schemaTrackingLocation szeretne megadni, használja az alábbi példát:
checkpoint_path = "/path/to/checkpointLocation"
(spark.readStream
.option("schemaTrackingLocation", checkpoint_path)
.table("delta_source_table")
.writeStream
.option("checkpointLocation", checkpoint_path)
.toTable("output_table")
)
Korlátozások
Az oszlopleképezés engedélyezése megzavarhatja az alábbiak működését:
- Örökölt számítási feladatok, amelyek címtárnevekre támaszkodnak a Delta Lake-táblák olvasásához. Az oszlopok leképezését használó particionált táblák véletlenszerű elnevezéseket használnak a partíciókönyvtárakban az oszlopnevek helyett. Lásd a Delta Lake és a Parquet particionálási kompatibilitását.
- Alsóbb rétegbeli műveletek változásadatcsatorna használatával. Lásd az oszlopleképezést tartalmazó táblákat.
- A streaming olvasás a Delta Lake-táblából történik, beleértve a Lakeflow-folyamatokban is. Lásd Oszlopleképezés és streamelés.