Delta列映射

注意

此功能在Delta Lake 1.2.0及以上版本中可用。该功能目前处于实验阶段,存在已知限制

列映射功能允许Delta表的列与底层Parquet文件的列使用不同名称。这使得可以在Delta表上执行诸如RENAME COLUMNDROP COLUMNS等模式演进操作,而无需重写底层Parquet文件。该功能还允许用户使用Parquet不允许的字符(例如空格)来命名Delta表列,这样用户可以直接将CSV或JSON数据摄取到Delta中,而无需因之前的字符限制而重命名列。

如何启用Delta Lake列映射

重要

为表启用列映射会升级Delta 表版本。此协议升级不可逆。启用了列映射的表只能在Delta Lake 1.2及以上版本中读取。

列映射需要以下Delta协议:

  • 读取器版本2或更高。

  • Writer版本5或更高。

对于具备所需协议版本的Delta表,您可以通过将delta.columnMapping.mode设置为name来启用列映射。

您可以使用以下命令升级表版本并启用列映射:

  ALTER TABLE <table_name> SET TBLPROPERTIES (
    'delta.minReaderVersion' = '2',
    'delta.minWriterVersion' = '5',
    'delta.columnMapping.mode' = 'name'
  )

注意

启用列映射后无法将其关闭。如果尝试设置'delta.columnMapping.mode' = 'none',将会收到错误提示。

重命名列

当为Delta表启用列映射时,您可以重命名列:

ALTER TABLE <table_name> RENAME COLUMN old_col_name TO new_col_name

更多示例,请参阅重命名列

删除列

当为Delta表启用列映射时,您可以删除一个或多个列:

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

更多详情,请参阅删除列

列名中支持的字符

当为Delta表启用列映射时,您可以在表的列名中包含空格以及以下任意字符:,;{}()\n\t=

已知限制