如何在dbt Python模型中访问环境变量?现有文档仅覆盖SQL模型
在dbt Python模型中访问环境变量的方法
有两种常用方式可以在dbt Python模型中读取环境变量,以下是具体实现:
1. 使用Python内置的os模块
直接通过Python标准库的os模块读取,和普通Python脚本写法一致:
import os import pandas as pd def model(dbt, session): dbt.config(materialized="table") # 读取环境变量,可设置默认值避免变量不存在报错 api_key = os.getenv("MY_API_KEY", "default_value") # 示例:用读取到的变量执行后续操作 # ... return pd.DataFrame({"api_key": [api_key]})
2. 使用dbt官方提供的env_var函数(推荐)
这个方法和dbt SQL模型中访问环境变量的逻辑对齐,会遵循dbt的环境变量优先级规则(比如从profiles.yml、系统环境、.env文件加载的变量):
import pandas as pd def model(dbt, session): dbt.config(materialized="table") # 调用dbt.env_var读取环境变量,支持设置默认值 db_host = dbt.env_var("DB_HOST", "localhost") # 示例:在配置块中直接使用 dbt.config( schema=dbt.env_var("TARGET_SCHEMA", "public") ) # 后续业务逻辑 # ... return pd.DataFrame({"db_host": [db_host]})
注意事项
- 确保目标环境变量已正确配置:可通过系统环境变量、dbt profiles.yml的
env段,或是项目中的.env文件(需配合python-dotenv包加载)设置。 - 使用
dbt.env_var能保证和SQL模型的环境变量读取逻辑统一,减少不一致问题。
内容的提问来源于stack exchange,提问作者Yohei Onishi
相关产品推荐
相关产品推荐

