Skip to content

环境变量

环境变量可用于自定义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 添加和更新环境变量。

环境变量tab

您会注意到有一个 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

项目的部分解析和IDE会话中途更改环境变量存在一些已知问题。如果您发现您的dbt项目没有编译到您设置的值,请尝试删除dbt项目中的target/partial_parse.msgpack文件,这将迫使dbt重新编译整个项目。

处理机密信息

虽然dbt Cloud中的所有环境变量都是静态加密的,但dbt Cloud具有管理具有机密或其他敏感值的环境变量的额外功能。如果您希望从所有日志和错误消息中删除特定的环境变量,除了模糊UI中的值外,还可以在键前面加DBT_ENV_SECRET_dbt v1.0及以后版本都支持此功能。

DBT_ENV_SECRET前缀

注意: 环境变量可用于存储[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 ID
  • DBT_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