Přejmenování a odstranění sloupců pomocí mapování Delta Lake

Mapování sloupců Delta Lake umožňuje přejmenování nebo vyřazení sloupců pouze metadat bez přepsání datových souborů. Mapování sloupců také umožňuje znaky, které Parquet nepodporuje v názvech sloupců, jako jsou mezery, takže můžete přímo ingestovat data CSV nebo JSON do Delta Lake bez přejmenování sloupců.

Požadavky

Před povolením mapování sloupců si projděte omezení.

Mapování sloupců vyžaduje následující:

  • Protokoly Delta: verze čtečky 2 nebo vyšší a verze zapisovače 5 nebo vyšší. Viz kompatibilita a protokoly funkcí Delta Lake.
  • Čtení tabulek s povoleným mapováním sloupců vyžaduje Databricks Runtime 10.4 LTS a vyšší.

Povolení mapování sloupců

Pomocí následujícího příkazu povolte mapování sloupců s režimem id v nové tabulce:

CREATE table <table-name> (
  id INT,
  name STRING
)
USING DELTA
TBLPROPERTIES (
  'delta.columnMapping.mode' = 'id'
);

Pomocí následujícího příkazu povolte mapování sloupců s režimem name u existující tabulky:

ALTER TABLE <table-name> SET TBLPROPERTIES (
  'delta.columnMapping.mode' = 'name'
)

Podrobnosti o režimech mapování sloupců najdete v tématu Režimy mapování sloupců.

Přejmenování sloupce

Pokud je pro tabulku Delta Lake povolené mapování sloupců, můžete sloupec přejmenovat:

ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name

Další příklady najdete v tématu Aktualizace schémat tabulek s vývojem schématu.

Odstranit sloupce

Pokud je pro tabulku Delta Lake povolené mapování sloupců, můžete odstranit jeden nebo více sloupců:

ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)

Další podrobnosti najdete v tématu Aktualizace schémat tabulek s vývojem schématu.

Režimy mapování sloupců

Vlastnost delta.columnMapping.mode tabulky umožňuje změnám pouze metadat označit sloupce jako odstraněné nebo přejmenované bez přepsání datových souborů. K dispozici jsou následující režimy:

  • none (výchozí): Mapování sloupců není povolené. Názvy sloupců podléhají omezením pojmenování Parquet.
  • name: Umožňuje přejmenování a zahazování sloupců pouze v metadatech a povoluje speciální znaky v názvech sloupců. name u nových a existujících tabulek je možné nastavit režim.
  • id: Umožňuje přejmenování a zahazování sloupců pouze v metadatech a povoluje speciální znaky v názvech sloupců. id Režim musí být nastaven při vytváření tabulky a nelze ho nastavit u existujících tabulek.

Note

Databricks doporučuje id režim pro většinu případů použití pro účely kompatibility. Režim se ale nastaví automaticky, pokud nezadáte hodnotu name a povolíte funkce kompatibility Icebergu, například delta.columnMapping.mode.

Podporované znaky v názvech sloupců

Pokud je pro tabulku Delta Lake povolené mapování sloupců, můžete do názvů sloupců zahrnout mezery a libovolný z těchto znaků: ,;{}()\n\t=.

Odebrání mapování sloupců

Warning

Odebrání mapování sloupců přepíše všechny datové soubory, aby se názvy fyzických sloupců nahradily logickými názvy. Tato operace nepodporuje řešení konfliktů na řádkové úrovni ani fyzické konflikty.

Souběžné operace zápisu způsobí chybu ConcurrentModificationException.

Před odebráním mapování sloupců:

  1. Pozastavte všechny souběžné operace zápisu, včetně úloh streamování a kanálů ETL.
  2. Vypněte prediktivní optimalizaci tabulky.
  3. U velkých tabulek naplánujte tuto operaci během období s nízkou aktivitou.

Mapování sloupců z tabulky můžete odebrat pomocí následujícího příkazu:

ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')

Pokud chcete odebrat mapování sloupců a downgradovat protokol tabulky, přečtěte si téma Zachování kompatibility.

Zachovat kompatibilitu

V Databricks Runtime 15.4 LTS a novějším můžete pomocí příkazu DROP FEATURE odebrat mapování sloupců a snížit verzi protokolu tabulky, a tím zachovat kompatibilitu se čtečkami používajícími Databricks Runtime 10.3 a starší.

Important

Vyřazení mapování sloupců z tabulky neodebere náhodné předpony použité v názvech adresářů pro dělené tabulky.

Viz Smazat tabulku Delta Lake a snížit protokol tabulky.

Mapování sloupců a streamování

Neaditivní změny schématu, například přejmenování nebo odstranění sloupců, mohou narušit streamované čtení. Použijte a schemaTrackingLocation, aby Delta Lake mohl sledovat změny schématu a zabránit selháním streamů.

Configuration

Při konfiguraci schemaTrackingLocation:

  • Každé streamování přečtené ze zdrojové tabulky musí mít vlastní schemaTrackingLocation.
  • schemaTrackingLocation musí být v adresáři checkpointLocation cíle streamovacího zápisu.
  • Pro úlohy, které čtou z více zdrojových tabulek, zadejte jedinečné podadresáře v rámci checkpointLocation každého zdroje.

Úplný seznam možností streamování v Delta Lake najdete v tématu Delta Lake.

Povolení mapování sloupců u aktivního datového proudu

Povolení mapování sloupců u aktivní úlohy streamování:

  1. Zastavení streamu
  2. Povolení mapování sloupců v tabulce
  3. Restartujte stream (první restartování – inicializuje mapování sloupců)
  4. Znovu spusťte stream (druhé restartování – povolí změny schématu).

Jakékoli další změny schématu (přidání nebo vyřazení sloupců nebo změna typů sloupců) vyžadují restartování datového proudu.

Příklad

Chcete-li pro streamované čtení z tabulky Delta Lake s mapováním sloupců zadat schemaTrackingLocation, použijte následující příklad:

checkpoint_path = "/path/to/checkpointLocation"

(spark.readStream
  .option("schemaTrackingLocation", checkpoint_path)
  .table("delta_source_table")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .toTable("output_table")
)

Omezení

Povolení mapování sloupců může narušit následující:

Další zdroje informací