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

Databricks Premium环境下适配dbt的Azure Blob Storage访问方案咨询

适配dbt的Azure Blob存储访问方案(基于Databricks Premium)

针对你的约束条件(无需集群全局配置、支持SAS令牌、兼容有无HNS的存储账户、dbt可直接访问),以下是几种可行方案:

方案1:Databricks Secrets + dbt环境变量注入

通过环境变量动态传递SAS令牌,结合Databricks Secrets管理凭据,无需修改集群配置:

  • 在Databricks中创建密钥范围,分别存储不同权限的SAS令牌(如storage-sas-read、storage-sas-write)
  • 配置dbt profiles.yml,通过环境变量引用SAS配置:
    dbt_databricks_profile:
      target: dev
      outputs:
        dev:
          type: databricks
          host: <你的Databricks工作区URL>
          http_path: <集群HTTP路径>
          token: <Databricks访问令牌>
          schema: <目标Schema>
          extra_config:
            spark.azure.storage.account.name.<存储账户名>.blob.core.windows.net.sas: "{{ env_var('DBT_STORAGE_SAS') }}"
    
  • 启动dbt作业时,根据权限需求传入对应SAS令牌:
    # 只读作业
    export DBT_STORAGE_SAS=$(databricks secrets get --scope <密钥范围> --key storage-sas-read) && dbt run
    # 读写作业
    export DBT_STORAGE_SAS=$(databricks secrets get --scope <密钥范围> --key storage-sas-write) && dbt run
    
  • dbt模型中直接使用存储路径:
    -- 无HNS存储账户(用wasbs协议)
    SELECT * FROM parquet.`wasbs://<容器名>@<存储账户名>.blob.core.windows.net/<数据路径>`
    -- 有HNS存储账户(用abfss协议)
    SELECT * FROM parquet.`abfss://<容器名>@<存储账户名>.dfs.core.windows.net/<数据路径>`
    

方案2:Unity Catalog External Locations + SAS存储凭据(仅ADLS Gen2)

若部分存储账户为启用HNS的ADLS Gen2,可利用Unity Catalog的存储凭据功能(支持SAS令牌):

  • 在Unity Catalog中创建基于SAS的存储凭据:
    CREATE CREDENTIAL storage_sas_cred
    WITH (
      TYPE = 'SAS',
      SAS_TOKEN = SECRET('<密钥范围>', '<SAS令牌密钥>')
    );
    
  • 创建外部位置并关联凭据:
    CREATE EXTERNAL LOCATION adls_gen2_location
    URL 'abfss://<容器名>@<存储账户名>.dfs.core.windows.net/'
    WITH (CREDENTIAL storage_sas_cred);
    
  • 给dbt对应的Databricks主体分配不同权限(如SELECT对应只读,MODIFY对应读写),模型中直接引用外部位置路径或绑定的外部表:
    SELECT * FROM <Schema名>.<外部表名>
    

方案3:dbt宏动态注入Spark配置

通过dbt宏在模型执行前动态加载SAS令牌,无需依赖外部环境变量:

  • 编写dbt宏:
    {% macro set_storage_sas(secret_scope, secret_key, storage_account) %}
      {% set sas_token = databricks_secrets(secret_scope, secret_key) %}
      {% do run_query(f"SET spark.azure.storage.account.name.{storage_account}.blob.core.windows.net.sas = '{sas_token}'") %}
    {% endmacro %}
    
  • 在dbt模型开头调用宏,指定对应的密钥和存储账户:
    {{ set_storage_sas('<密钥范围>', 'storage-sas-read', '<存储账户名>') }}
    SELECT * FROM parquet.`wasbs://<容器名>@<存储账户名>.blob.core.windows.net/<数据路径>`
    

核心注意事项

  • 无HNS的存储账户必须使用wasbs://协议,abfss://仅支持启用HNS的ADLS Gen2账户
  • 所有凭据必须存储在Databricks Secrets中,禁止硬编码
  • 临时集群无需预配置任何存储凭据,由dbt动态加载,降低维护成本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:25:29