Delta类型扩展
注意
该功能在Delta Lake 3.2及以上版本中作为预览功能提供。
类型扩展功能允许将Delta表中的列类型更改为更宽泛的类型。这支持通过ALTER TABLE ALTER COLUMN命令手动更改类型,以及在INSERT和MERGE INTO命令中使用模式演进自动迁移类型。
支持的类型变更
Delta Lake 3.2及以上版本中的功能预览支持有限的类型变更:
BYTE转换为SHORT和INT。SHORT转换为INT
类型变更支持顶级列以及嵌套在结构体、映射和数组中的字段。
如何启用Delta Lake类型扩展
重要
启用类型扩展会设置Delta表功能typeWidening-preview,这是一个读写协议功能。一旦设置此表功能,只有支持该功能的客户端才能对表进行读写操作。您必须使用Delta Lake 3.2或更高版本来读写此类Delta表。
您可以通过将表属性delta.enableTypeWidening设置为true来在现有表上启用类型扩展:
ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'true')
或者,您可以在创建表时启用类型扩展:
CREATE TABLE <table_name> USING DELTA TBLPROPERTIES('delta.enableTypeWidening' = 'true')
禁用类型扩展:
ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'false')
禁用类型扩展可以防止未来的类型变更被应用到表中。它不会影响之前已应用的类型变更,特别是不会移除类型扩展表功能,也不会允许不支持类型扩展表功能的客户端读写该表。
要从表中移除类型扩展表功能并允许不支持此功能的其他客户端读写该表,请参阅移除类型扩展表功能。
手动应用类型变更
当在Delta表上启用类型扩展时,您可以使用ALTER COLUMN命令更改列的类型:
ALTER TABLE <table_name> ALTER COLUMN <col_name> TYPE <new_type>
表模式已更新,无需重写底层的Parquet文件。
移除类型扩展表功能
可以使用DROP FEATURE命令从Delta表中移除类型扩展功能:
ALTER TABLE <table_name> DROP FEATURE 'typeWidening-preview' [TRUNCATE HISTORY]
有关删除Delta表功能的更多信息,请参阅Drop Delta table features。
当禁用类型扩展功能时,必要时会重写底层的Parquet文件,以确保文件中的列类型与Delta表模式中的列类型匹配。 从表中移除类型扩展功能后,不支持该功能的Delta客户端即可对该表进行读写操作。