环境变量
环境变量可用于自定义dbt项目的行为,具体取决于项目运行的位置。请参阅env_var
了解有关如何在项目代码中调用jinja函数{{env_var('DBT_KEY','OPTIONAL_DEFAULT')}}。
环境变量命名和前缀
dbt Cloud中的环境变量必须以`DBT_`或`DBT_ENV_SECERT_”为前缀。环境变量键是大写的且区分大小写。在项目代码中引用 `{{env_var('DBT_KEY')}}` 时,键必须与DBT Cloud的UI中定义的变量完全匹配。
设置和覆盖环境变量¶
优先顺序
可以在dbt Cloud中的多个位置设置环境变量值。因此,dbt Cloud将根据以下优先级顺序(从低到高)解释环境变量:

环境变量有四个级别:
1. 代码中提供给env_varJinja函数的可选默认参数
2. 项目范围的默认值
3. 环境级别
4. 作业级别(作业覆盖)或单个开发的IDE中(个人覆盖)
在项目和环境级别设置环境变量
要在项目和环境级别设置环境变量,请单击左上角的 Deploy,然后选择 Environments 。单击 Environments Variables 添加和更新环境变量。

您会注意到有一个 Project Default列。这是一个很好的地方,可以设置一个值,该值将在整个项目中持续存在,与代码的运行位置无关。当您想要提供catch-all默认值或添加项目范围的令牌或密钥时,我们建议您设置此值。
Project Default 列右侧是您的所有环境。在环境级别设置的值优先于项目级别的默认值。例如,在这里,您可以告诉dbt Cloud在您的“暂存”环境与“生产”环境中以不同的方式解释环境值。

在作业级别重写环境变量
您可能有多个作业在同一环境中运行,并且希望根据作业对环境变量进行不同的解释。
设置或编辑作业时,您将看到一个区域,在该区域中,您可以覆盖在环境或项目级别定义的环境变量值。

每个作业都在特定的部署环境中运行,默认情况下,作业将继承在其运行的环境的环境级别(或最高优先级级别集)上设置的值。如果要在作业级别设置不同的值,请编辑该值以覆盖它。

在个人级别覆盖环境变量
在dbt集成开发环境(IDE)中进行开发时,还可以为环境变量设置个人值覆盖。默认情况下,dbt Cloud使用在项目开发环境中设置的环境变量值。要查看和覆盖这些值,请单击右上角的齿轮图标。在“Your Profile”下,单击 Credentials 并选择您的项目。单击 Edit 并在“Environment Variables”中进行任何更改

若要提供覆盖,开发人员可以编辑并指定要使用的不同值。IDE中的“结果”和“已编译的SQL”选项卡都将遵守这些值。

适当的覆盖范围
如果您没有为每个环境变量设置项目级默认值,那么dbt Cloud可能不知道如何在所有上下文中解释环境变量的值。在这种情况下,dbt将抛出一个编译错误:“Env var required but not provided”。
在IDE中的会话中途更改环境变量
如果在使用IDE的过程中更改了环境变量的值,则可能需要刷新IDE才能使更改生效。
要在开发过程中刷新IDE,请单击IDE右下角的绿色“ready”信号或红色“compilation error”消息。将弹出一个对话框,您应该选择“刷新IDE”按钮。这将把您的环境变量值加载到您的开发环境中。

项目的部分解析和IDE会话中途更改环境变量存在一些已知问题。如果您发现您的dbt项目没有编译到您设置的值,请尝试删除dbt项目中的target/partial_parse.msgpack文件,这将迫使dbt重新编译整个项目。
处理机密信息¶
虽然dbt Cloud中的所有环境变量都是静态加密的,但dbt Cloud具有管理具有机密或其他敏感值的环境变量的额外功能。如果您希望从所有日志和错误消息中删除特定的环境变量,除了模糊UI中的值外,还可以在键前面加DBT_ENV_SECRET_。dbt v1.0及以后版本都支持此功能。

注意: 环境变量可用于存储[git token for repo cloning]/build/environment-variables#clone-private-packages)。我们建议您将git令牌的权限设为只读,并考虑使用具有有限回购访问权限的机器帐户或服务用户的PAT,以保持良好的安全机制。
特殊环境变量¶
dbt Cloud内置了许多预定义的变量。以下环境变量是为部署运行自动设置的,它们的值不能更改。
dbt Cloud上下文
- DBT_ENV: 此key是为DBT Cloud应用程序保留的,将始终解析为“prod"
执行结果
- DBT_CLOUD_PROJECT_ID: 此运行的dbt Cloud项目的ID
- DBT_CLOUD_JOB_ID: 此运行的dbt Cloud作业的ID
- DBT_CLOUD_RUN_ID: 此特定运行的ID
- DBT_CLOUD_RUN_REASON_CATEGORY: 此运行的触发器的"类别"(scheduled, github_pull_request, gitlab_merge_request, azure_pull_request, other其中之一)
- DBT_CLOUD_RUN_REASON: 此运行的特定触发器 (比如 Scheduled, Kicked off by <email>, 或者通过API自定义)
Git详情
注意: 这些变量目前仅适用于GitHub、GitLab和Azure DevOps,通过webhook触发PR构建
DBT_CLOUD_PR_ID: 连接的版本控制系统中的Pull Request IDDBT_CLOUD_GIT_SHA: 正在为此Pull Request生成运行的git-commit SHA
示例¶
环境变量可以以多种方式使用,它们为您提供了强大的功能和灵活性,使您可以在dbt Cloud中更轻松地完成您想做的事情。
克隆私有packages¶
现在您可以将机密设置为环境变量,可以将git令牌传递到包HTTPS URL中,以允许动态克隆私有存储库。阅读有关启用private package cloning的更多信息。
在Snowflake连接中动态设置仓库¶
通过环境变量,可以根据作业动态更改Snowflake虚拟仓库的大小。您可以引用一个环境变量,该变量将在运行时设置为特定的虚拟仓库,而不是直接在项目连接中调用仓库名称。
例如,假设您想在XL仓库中运行完全刷新作业,但增量作业只需要在中型仓库中运行。这两个作业都是在同一个dbt Cloud环境中配置的。在连接配置中,可以使用环境变量将仓库名称设置为 {{env_var('DBT_WAREHOUSE')}}。然后在作业设置中,您可以根据作业的工作负载为DBT_WAREHOUSE 环境变量设置不同的值。

审核您的元数据¶
下面是另一个使用dbt Cloud运行ID的示例,该ID在每次运行时都会自动设置。此附加数据字段可用于审核和调试:
{{ config(materialized='incremental', unique_key='user_id') }}
with users_aggregated as (
select
user_id,
min(event_time) as first_event_time,
max(event_time) as last_event_time,
count(*) as count_total_events
from {{ ref('users') }}
group by 1
)
select *,
-- 注入运行id(如果存在),否则使用“manual”
'{{ env_var("DBT_CLOUD_RUN_ID", "manual") }}' as _audit_run_id
from users_aggregated