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

使用DLT与Hive Metastore时配置外部存储及Serverless访问问题

解决方案

1. 解决Serverless SQL Editor无法访问表的问题

Serverless SQL Warehouse无法读取你在Notebook/DLT中设置的临时spark.conf配置,必须为其单独配置Azure存储账户的访问权限,有两种可行方式:

  • 方式一:配置Serverless Warehouse的Spark参数
    进入Serverless Starter Warehouse的配置页面,找到「Spark configuration」,根据你的认证方式添加对应配置:

    • 使用SAS令牌时:
      fs.azure.account.auth.type.<storageaccount>.dfs.core.windows.net SAS
      fs.azure.sas.token.provider.type.<storageaccount>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider
      fs.azure.sas.fixed.token.<storageaccount>.dfs.core.windows.net <你的SAS令牌>
      
    • 使用服务主体(SPN)时:
      fs.azure.account.auth.type.<storageaccount>.dfs.core.windows.net OAuth
      fs.azure.account.oauth.provider.type.<storageaccount>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
      fs.azure.account.oauth2.client.id.<storageaccount>.dfs.core.windows.net <你的SP客户端ID>
      fs.azure.account.oauth2.client.secret.<storageaccount>.dfs.core.windows.net <你的SP客户端密钥>
      fs.azure.account.oauth2.client.endpoint.<storageaccount>.dfs.core.windows.net https://login.microsoftonline.com/<你的租户ID>/oauth2/token
      

    保存配置后重启Serverless Warehouse,再尝试在SQL Editor中访问表。

  • 方式二:给Hive Metastore外部表添加存储属性
    因为你通过@dlt.table(path=...)创建的是外部表,可直接通过SQL语句给表绑定存储认证配置,Serverless访问时会自动读取:

    ALTER TABLE <数据库名>.<表名> SET TBLPROPERTIES (
      'fs.azure.account.auth.type.<storageaccount>.dfs.core.windows.net' = 'SAS',
      'fs.azure.sas.fixed.token.<storageaccount>.dfs.core.windows.net' = '<你的SAS令牌>'
    );
    

    若用SPN认证,替换成对应的SPN属性即可。

2. 全局配置存储访问,避免Notebook重复设置

无需在每个Notebook手动执行spark.conf.set,可通过两种全局方式实现:

  • 方式一:集群级Spark配置
    进入Databricks「Compute」页面,找到你的集群(包括DLT使用的集群),在「Spark configuration」中添加上述fs.azure.account.*配置参数。所有运行在该集群上的Notebook、DLT任务都会自动继承这些配置。

  • 方式二:全局初始化脚本
    创建一个初始化脚本(如adls-config.sh),内容如下:

    #!/bin/bash
    cat << 'EOF' > /databricks/driver/conf/adls.conf
    [driver] {
      "spark.hadoop.fs.azure.account.auth.type.<storageaccount>.dfs.core.windows.net" = "SAS"
      "spark.hadoop.fs.azure.sas.fixed.token.<storageaccount>.dfs.core.windows.net" = "<你的SAS令牌>"
    }
    [executor] {
      "spark.hadoop.fs.azure.account.auth.type.<storageaccount>.dfs.core.windows.net" = "SAS"
      "spark.hadoop.fs.azure.sas.fixed.token.<storageaccount>.dfs.core.windows.net" = "<你的SAS令牌>"
    }
    EOF
    

    将脚本上传到DBFS或ADLS路径,然后在集群配置的「Advanced options」→「Init scripts」中添加该脚本路径。所有使用该脚本的集群都会自动加载存储配置。

3. Hive Metastore下的验证注意事项

  • 确认DLT创建的是外部表(指定path参数默认即为外部表),元数据存在Hive Metastore,数据存储在你指定的ADLS路径。
  • 检查Serverless权限:确保其使用的认证身份(SAS令牌/SPN)拥有ADLS容器的读取权限(如SAS令牌需包含读权限,SPN需绑定Storage Blob Data Reader角色)。
  • 核对路径格式:@dlt.table(path=...)中的路径必须是完整的abfss://{container}@{storageaccount}.dfs.core.windows.net/xxx格式,避免拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:37:43