You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除ADLS中Parquet格式Delta Table的指定列?

解决路径式Delta表删除列的问题

前提:升级Delta表版本并开启列映射

你遇到的错误说明当前Delta表不支持列删除,必须先升级表版本并开启name列映射模式,以下是针对路径式Delta表(未注册到元数据的ADLS路径存储)的操作方法:

方法1:使用Scala API设置属性

import io.delta.tables.DeltaTable

val deltaTable = DeltaTable.forPath("abfss://CONTAINER@STORAGEACCOUNT.dfs.core.windows.net/path/to/data/folder/")
// 设置所需表属性
deltaTable.alter(_.setTableProperties(
  Map(
    "delta.columnMapping.mode" -> "name",
    "delta.minReaderVersion" -> "2",
    "delta.minWriterVersion" -> "5"
  )
))

方法2:使用Spark SQL设置属性

直接用路径代替表名,在SQL中操作:

ALTER TABLE delta.`abfss://CONTAINER@STORAGEACCOUNT.dfs.core.windows.net/path/to/data/folder/` 
SET TBLPROPERTIES (
   'delta.columnMapping.mode' = 'name',
   'delta.minReaderVersion' = '2',
   'delta.minWriterVersion' = '5'
)

删除指定列

完成属性设置后,即可删除目标列:

方法1:Scala API删除列

// 复用之前定义的deltaTable实例
deltaTable.alter(_.dropColumns("ABC"))

方法2:Spark SQL删除列

ALTER TABLE delta.`abfss://CONTAINER@STORAGEACCOUNT.dfs.core.windows.net/path/to/data/folder/` 
DROP COLUMN ABC

验证操作结果

执行以下代码确认列已删除:

deltaTable.toDF.printSchema()
// 或用SQL查看表结构
DESCRIBE TABLE delta.`abfss://CONTAINER@STORAGEACCOUNT.dfs.core.windows.net/path/to/data/folder/`

说明:路径式Delta表无需注册到元数据,直接通过delta.路径``的格式即可在SQL中引用,操作会直接作用于ADLS路径下的Delta表数据,无需额外写回步骤(Delta的操作是事务性的,自动同步到路径)。

内容的提问来源于stack exchange,提问作者ROODAY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:45:45