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

使用DBT执行Nessie命令出现语法错误,Spark环境下运行正常

问题原因与解决方案

核心问题定位

从堆栈跟踪可见,Spark Thrift Server实际加载的Nessie扩展版本为0.51.1,但EMR配置中指定的是0.63.0,版本不一致导致语法解析失败。USE REFERENCE是Nessie较新版本才支持的语法,旧版本解析器无法识别该指令。同时,DBT通过Thrift Server连接Spark时,Thrift Server未正确继承EMR Spark的依赖配置,导致未加载指定版本的Nessie扩展。

解决方案

1. 统一依赖版本并确保Thrift Server加载正确包

修改EMR的spark-defaults配置,强制Thrift Server使用与Spark一致的依赖包:

[
  {
    "Classification": "iceberg-defaults",
    "Properties": {
      "iceberg.enabled": "true"
    }
  },
  {
    "Classification": "spark-defaults",
    "Properties": {
      "spark.jars.packages": "org.apache.iceberg:iceberg-spark-runtime-3.3_2.12:1.3.0,org.projectnessie.nessie-integrations:nessie-spark-extensions-3.3_2.12:0.63.0",
      "spark.sql.catalog.dev_catalog": "org.apache.iceberg.spark.SparkCatalog",
      "spark.sql.catalog.dev_catalog.auth_type": "NONE",
      "spark.sql.catalog.dev_catalog.catalog-impl": "org.apache.iceberg.nessie.NessieCatalog",
      "spark.sql.catalog.dev_catalog.ref": "main",
      "spark.sql.catalog.dev_catalog.uri": "https://nessie-dev.dev.XYZ.cloud/api/v1",
      "spark.sql.catalog.dev_catalog.warehouse": "s3://.../nessie_catalog/",
      "spark.sql.defaultCatalog": "dev_catalog",
      "spark.sql.execution.pyarrow.enabled": "true",
      "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,org.projectnessie.spark.extensions.NessieSparkSessionExtensions",
      "spark.hive.thriftserver.jars": "${spark.jars}"
    }
  }
]

修改后重启EMR集群,确保Thrift Server加载指定版本的依赖。

2. 临时兼容写法(无需重启集群)

如果无法立即重启集群,可在DBT中使用旧版本兼容的分支切换语法,效果与USE REFERENCE一致:

ALTER SESSION SET spark.sql.catalog.dev_catalog.ref = 'demo_branch2';

3. 验证依赖加载有效性

集群重启后,登录主节点执行以下命令,确认Thrift Server加载的Nessie版本为0.63.0:

ps aux | grep thriftserver | grep nessie

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:20:37