Oszlopok átnevezése és törlése Delta Lake oszlopleképezéssel

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:

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. name a 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. id a 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:

  1. Szüneteltetheti az összes egyidejű írási műveletet, beleértve a streamelési feladatokat és az ETL-folyamatokat.
  2. Kapcsolja ki a prediktív optimalizálást a táblában.
  3. 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 schemaTrackingLocation elemnek a streaming írási cél checkpointLocation könyvtárán belül kell lennie.
  • Az olyan munkaterhelések esetén, amelyek több forrástáblából olvasnak, a checkpointLocation kö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:

  1. Az adatfolyam leállítása
  2. Oszlopok leképezésének engedélyezése a táblázaton
  3. Indítsa újra a streamet (első újraindítás – inicializálja az oszlopleképezést)
  4. 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:

További erőforrások