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

Spark SQL执行ALTER TABLE ADD COLUMNS新增列报ParseException排查

Spark SQL ADD COLUMNS 解析异常定位

异常触发场景

执行ALTER TABLE语句为Delta表新增列时抛出ParseException解析错误,执行代码如下:

spark.sql("ALTER TABLE deltaTable ADD COLUMNS (abc LongType, dea LongType AFTER ttt)")

对应报错栈核心信息:

ParseException  
    /databricks/spark/python/pyspark/sql/session.py in sql(self, sqlQuery)
    --> 777         return DataFrame(self._jsparkSession.sql(sqlQuery), self._wrapped)
    
    /databricks/spark/python/lib/py4j-0.10.9.1-src.zip/py4j/java_gateway.py in __call__(self, *args)
    -> 1304         return_value = get_return_value(
       1305         answer, self.gateway_client, self.target_id, self.name)

错误原因

代码存在两处不符合Spark SQL(Delta表扩展)语法规则的问题:

  • 类型声明错误:LongType是Spark DataFrame API层面的类型类名,不属于SQL语法支持的类型关键字,Spark SQL中对应64位长整型的类型为BIGINT
  • 位置子句使用错误:AFTER 列名是Delta表对ADD COLUMNS语法的扩展,用于指定新增列的位置,该修饰符不能写在多列定义的括号内部。当使用括号包裹多列批量新增时,括号内仅支持列名、类型、注释、默认值的定义,不支持单列位置修饰;如果需要给单列指定位置,不能放在批量定义的括号里。

修正写法

无位置要求场景

两列都默认新增到表的末尾,直接修正类型名即可:

spark.sql("ALTER TABLE deltaTable ADD COLUMNS (abc BIGINT, dea BIGINT)")

指定列位置场景

需要将dea列放到ttt列之后时,拆分语句单独执行带位置修饰的列新增:

# 新增abc列到表末尾
spark.sql("ALTER TABLE deltaTable ADD COLUMNS abc BIGINT")
# 新增dea列到ttt列之后
spark.sql("ALTER TABLE deltaTable ADD COLUMNS dea BIGINT AFTER ttt")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 01:01:00