Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ů.nameu 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ů.idRež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ů:
- Pozastavte všechny souběžné operace zápisu, včetně úloh streamování a kanálů ETL.
- Vypněte prediktivní optimalizaci tabulky.
- 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. -
schemaTrackingLocationmusí být v adresářicheckpointLocationcíle streamovacího zápisu. - Pro úlohy, které čtou z více zdrojových tabulek, zadejte jedinečné podadresáře v rámci
checkpointLocationkaž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í:
- Zastavení streamu
- Povolení mapování sloupců v tabulce
- Restartujte stream (první restartování – inicializuje mapování sloupců)
- 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í:
- Starší úlohy, které při čtení tabulek Delta Lake spoléhají na názvy adresářů. Dělené tabulky s mapováním sloupců používají náhodné předpony jako identifikátory místo názvů sloupců pro adresáře oddílů. Podívejte se na kompatibilitu dělení Delta Lake a Parquet.
- Následné operace využívající kanál dat o změnách Viz Tabulky s mapováním sloupců.
- Streamované čtení z tabulky Delta Lake, včetně Lakeflow Spark Declarative Pipelines. Viz mapování sloupců a streamování.