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

如何用Databricks Asset Bundles在多环境为DLT及Notebook任务设置默认目录

最优配置方案:Notebook任务的默认目录/模式传递

针对Notebook任务逐个配置参数效率低的问题,推荐以下几种高效方式:

1. DAB全局环境变量直接注入

在databricks.yaml的环境定义中统一配置目录/模式参数,然后在Notebook任务中直接引用,无需重复编写base_parameters:

environments:
  dev:
    vars:
      default_catalog: dev_catalog
      default_schema: dev_schema
  prod:
    vars:
      default_catalog: prod_catalog
      default_schema: prod_schema

resources:
  jobs:
    raw_to_silver_job:
      name: "raw_to_silver"
      tasks:
        - task_key: "process_notebook"
          notebook_task:
            notebook_path: "/Workspace/Notebooks/raw_to_silver"
            base_parameters:
              catalog: "{{ env.default_catalog }}"
              schema: "{{ env.default_schema }}"

利用DAB的变量替换能力,所有Notebook任务都能复用环境级的参数定义,避免重复配置。

2. 封装Notebook全局配置模块

创建一个通用的config_notebook,专门负责读取环境参数并设置全局会话配置,其他业务Notebook直接导入该模块即可:

# config_notebook.py
import os
from pyspark.sql import SparkSession

# 读取DAB注入的参数或环境变量
default_catalog = dbutils.widgets.get("catalog") if dbutils.widgets.get("catalog") else os.environ.get("DEFAULT_CATALOG")
default_schema = dbutils.widgets.get("schema") if dbutils.widgets.get("schema") else os.environ.get("DEFAULT_SCHEMA")

# 设置Spark会话默认目录/模式
spark = SparkSession.getActiveSession()
spark.sql(f"USE CATALOG {default_catalog}")
spark.sql(f"USE SCHEMA {default_schema}")

# 定义全局变量供其他Notebook使用
globals()["DEFAULT_CATALOG"] = default_catalog
globals()["DEFAULT_SCHEMA"] = default_schema

业务Notebook只需添加一行导入:

%run "/Workspace/Notebooks/config_notebook"

# 直接使用全局变量
df = spark.read.table(f"{DEFAULT_SCHEMA}.raw_data")

不用每个Notebook都处理参数传递,统一由配置模块管理。

3. DAB任务模板复用

将Notebook任务的通用配置封装为DAB模板,后续任务直接引用模板,自动继承参数配置:

templates:
  notebook_task_template:
    task_key: "{{ task_key }}"
    notebook_task:
      notebook_path: "{{ notebook_path }}"
      base_parameters:
        catalog: "{{ env.default_catalog }}"
        schema: "{{ env.default_schema }}"

resources:
  jobs:
    raw_to_silver_job:
      name: "raw_to_silver"
      tasks:
        - template: notebook_task_template
          vars:
            task_key: "process_raw"
            notebook_path: "/Workspace/Notebooks/raw_to_silver"
    silver_to_gold_job:
      name: "silver_to_gold"
      tasks:
        - template: notebook_task_template
          vars:
            task_key: "process_silver"
            notebook_path: "/Workspace/Notebooks/silver_to_gold"

通过模板复用,批量创建Notebook任务时无需重复编写参数部分。


跨Databricks环境共享目录/模式的最佳实践

1. 独立配置文件管理

创建单独的env_config.yaml文件,集中存储各环境的目录/模式配置,然后在databricks.yaml中导入:

# env_config.yaml
dev:
  default_catalog: dev_catalog
  default_schema: dev_schema
prod:
  default_catalog: prod_catalog
  default_schema: prod_schema

在databricks.yaml中引用:

environments:
  dev:
    vars: "{{ include 'env_config.yaml' | fromYaml | get('dev') }}"
  prod:
    vars: "{{ include 'env_config.yaml' | fromYaml | get('prod') }}"

将配置与部署逻辑分离,便于统一维护和版本控制。

2. Azure Pipelines变量组注入

将各环境的配置存入Azure Pipelines变量组(如Dev_Config、Prod_Config),然后在流水线中通过--var参数传递给DAB:

# Azure Pipelines yaml
stages:
- stage: DeployDev
  variables:
  - group: Dev_Config
  jobs:
  - job: DeployDAB
    steps:
    - script: |
        databricks bundle deploy --environment dev --var default_catalog=$(DEFAULT_CATALOG) --var default_schema=$(DEFAULT_SCHEMA)
      displayName: "Deploy to Dev Environment"

- stage: DeployProd
  variables:
  - group: Prod_Config
  jobs:
  - job: DeployDAB
    steps:
    - script: |
        databricks bundle deploy --environment prod --var default_catalog=$(DEFAULT_CATALOG) --var default_schema=$(DEFAULT_SCHEMA)
      displayName: "Deploy to Prod Environment"

无需修改DAB配置文件,直接通过流水线变量组管理环境差异,符合CI/CD最佳实践。

3. Databricks全局初始化脚本

在Databricks工作区创建全局初始化脚本,自动为所有集群设置默认目录/模式:

# init_script.sh
#!/bin/bash
echo "Setting default catalog and schema..."
cat << 'EOF' > /databricks/init/set_defaults.py
from pyspark.sql import SparkSession
import os

spark = SparkSession.getActiveSession()
spark.sql(f"USE CATALOG {os.environ['DEFAULT_CATALOG']}")
spark.sql(f"USE SCHEMA {os.environ['DEFAULT_SCHEMA']}")
EOF
/databricks/python/bin/python /databricks/init/set_defaults.py

然后在DAB的集群配置中注入环境变量:

resources:
  clusters:
    processing_cluster:
      name: "processing-cluster"
      spark_env_vars:
        DEFAULT_CATALOG: "{{ env.default_catalog }}"
        DEFAULT_SCHEMA: "{{ env.default_schema }}"
      init_scripts:
        - workspace:
            path: "/Workspace/InitScripts/set_defaults.sh"

所有运行在该集群上的Notebook、任务都会自动加载默认目录/模式,无需在代码或任务配置中额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:24:50