Skip to content

全局配置

关于全局配置

全局配置使您能够微调dbt在您的计算机上 如何 运行,无论是您的个人笔记本电脑、远程运行的编排工具,还是(在某些情况下)dbt Cloud。通常,它们不同于大多数项目配置资源配置,后者告诉dbt运行 什么

全局配置控制日志的可视化输出、dbt解析项目的方式,以及当dbt发现版本不匹配或模型失败时该怎么办。这些配置是“全局”的,因为它们可用于所有dbt命令,并且可以为在同一台机器或同一环境中运行的所有项目设置。

从v1.0开始,您可以在三个地方设置全局配置。当这三个都设置好时,命令行标记优先,然后是环境变量和最后的yaml配置(通常是profiles.yml)。

命令行标记

命令行(CLI)标记紧跟在dbt之后,位于子命令之前。设置后,命令行票房将覆盖环境变量和配置文件配置。

使用此非布尔配置结构,将<THIS-CONFIG>替换为您正在启用或禁用的配置,将<SETTING>替换为配置的新设置,并将<SUBCOMMAND>替换为此配置应用的命令:

$ --<THIS-CONFIG>=<SETTING> <SUBCOMMAND>

非布尔类型配置示例:

$ dbt --printer-width=80 run
$ dbt --indirect-selection=eager test

要打开布尔类型配置,您将使用--<THIS-CONFIG>命令行标记和--no-<THIS-ONFIG>命令行标记来关闭布尔配置,将<THIS-CONNIG>替换为您正在启用或禁用的配置,并将<SUBCOMMAND>替换为此配置应用的命令。

布尔类型配置结构示例

$ dbt --<THIS-CONFIG> <SUBCOMMAND>
$ dbt --no-<THIS-CONFIG> <SUBCOMMAND>

布尔类型配置示例:

$ dbt --version-check run
$ dbt --no-version-check run

环境变量

环境变量包含一个DBT_ 前缀

$ export DBT_<THIS-CONFIG>=True
$ dbt run

Yaml配置

对于大多数全局配置,您可以在profiles.ymlconfig:块中设置“用户配置文件”配置。这种配置样式为使用此配置文件目录的所有项目设置默认值,通常是在本地计算机上运行的所有项目。

config:
  <THIS-CONFIG>: true

例外:一些全局配置实际上是在dbt_project.yml中设置的,而不是profiles.yml,因为它们控制着dbt将日志和工件放置在哪里。这些文件路径总是相对于dbt_project.yml的位置。有关更多详细信息,请参阅下面的“日志和目标路径”

缓存所选资源的数据库对象

谨慎实验配置标记

这应该被视为一个 不确定性的 标记,因为它是实验性的,可能会发生变化。我们保留对此配置标记进行突破性更改的权利。

在运行开始时,dbt缓存关于所有模式(schema)中所有对象的元数据,在这些模式中它可能会具体化资源(如模型)。默认情况下,dbt缓存与项目相关的所有模式。启用此配置后,dbt将仅缓存与当前运行所选资源相关的架构。当运行大型项目的一个子集时,这可以显著提高速度。

例如,为了提高速度和性能,同时专注于开发Salesforce模型,这些模型被具体化为自己的专用模式,您可以选择这些模型并加上cache-selected-only标记:

$ dbt --cache-selected-only run --select salesforce

前面的例子使您能够开始使用salesforce模型,dbt将只缓存这些模型,而不是整个项目。

将配置写入到 profile.yml:

config:
  cache_selected_only: true

检查版本兼容性

建议项目设置dbt版本要求,特别是如果它们使用更新的功能,或者这些功能可能会在dbt Core的未来版本中中断。默认情况下,如果使用不兼容的dbt版本运行项目,则dbt将引发错误。

您可以使用VERSION_CHECK配置来禁用此检查并抑制错误消息:

$ dbt --no-version-check run
Running with dbt=1.0.0
Found 13 models, 2 tests, 1 archives, 0 analyses, 204 macros, 2 operations....

调试日志级别

DEBUG配置将dbt的调试日志进行标准输出。这样除了显示logs/dbt.log文件之外还可以在终端显示调试级别日志信息的效果。这个输出会很冗长。

--debug标记可以简写成 -d.

$ dbt --debug run
...

实验解析器

使用USE_EXPERIMENTAL_PARSER配置,您可以选择最新和最棒的静态解析器实验版本,该版本仍在进行采样以获得100%的正确性。有关更多详细信息,请参阅解析文档

config:
  use_experimental_parser: true

快速失败

-x--fail-fast标记提供给dbt-run,以使dbt在单个资源在失败时立即退出。如果第一个模型失败时其他模型正在进行中,那么dbt将终止这些仍在运行的模型的连接。

例如,您可以选择四个模型运行,但如果第一个模型发生故障,则该故障将阻止其他模型运行:

$ dbt -x run --threads 1
Running with dbt=1.0.0
Found 4 models, 1 test, 1 snapshot, 2 analyses, 143 macros, 0 operations, 1 seed file, 0 sources

14:47:39 | Concurrency: 1 threads (target='dev')
14:47:39 |
14:47:39 | 1 of 4 START table model test_schema.model_1........... [RUN]
14:47:40 | 1 of 4 ERROR creating table model test_schema.model_1.. [ERROR in 0.06s]
14:47:40 | 2 of 4 START view model test_schema.model_2............ [RUN]
14:47:40 | CANCEL query model.debug.model_2....................... [CANCEL]
14:47:40 | 2 of 4 ERROR creating view model test_schema.model_2... [ERROR in 0.05s]

Database Error in model model_1 (models/model_1.sql)
  division by zero
  compiled SQL at target/run/debug/models/model_1.sql

Encountered an error:
FailFast Error in model model_1 (models/model_1.sql)
  Failing early due to test failure or runtime error

日志格式

LOG_FORMAT配置指定应如何格式化dbt的日志。如果此配置的值为json,则dbt将以格式输出完全结构化的日志;否则,它将输出文本格式的日志,这些日志对于CLI来说更稀少,在logs/dbt.log中则更详细。

$ dbt --log-format json run
{"code": "A001", "data": {"v": "=1.0.0"}, "invocation_id": "1193e449-4b7a-4eb1-8e8e-047a8b3b7973", "level": "info", "log_version": 1, "msg": "Running with dbt=1.0.0", "node_info": {}, "pid": 35098, "thread_name": "MainThread", "ts": "2021-12-03T10:46:59.928217Z", "type": "log_line"}

详细的结构化日志

json格式值与DEBUG配置结合使用,可以生成丰富的日志信息,这些信息可以通过管道传输到监控工具中进行分析:

$ dbt --debug --log-format json run

想了解更多请参阅结构化日志.

部分解析

PARTIAL_PARSE配置可以在项目中打开或关闭部分解析。有关更多详细信息,请参阅解析文档

config:
  partial_parse: true
dbt --no-partial-parse run

打印宽度

默认情况下,dbt将打印出填充到80个字符宽的行。您可以通过在profiles.yml文件中添加以下内容来更改此设置:

config:
  printer_width: 120

日志和目标路径

默认情况下,dbt会将日志写入名为logs/的目录,并将所有其他工件写入名为target/的目录。这两个目录都在与dbt_project.yml文件的同一目录中,即运行dbt的根目录。

与其他全局配置一样,可以使用CLI标记(--target path--log path)或环境变量(DBT_target_pathDBT_log_path)来覆盖环境或调用的这些值。

与本页中记录的其他全局配置(可以在profiles.yml中设置)不同,项目路径是在dbt_project.yml中配置的。这是因为profiles.ymldbt_project.yml通常位于计算机上不同的文件系统中,并且日志和工件路径总是相对于dbt_program.yml的位置定义的。

[target-path](target-path): "other-target"
[log-path](log-path): "other-logs"

发送匿名使用统计信息

我们希望构建尽可能好的dbt版本,其中至关重要的一部分是了解用户如何使用dbt。为此,我们在dbt中添加了一些简单的事件跟踪(使用Snowplow)。我们不跟踪凭证、原始模型内容或模型名称(我们认为这些是私人的,坦率地说,与我们无关)。

在调用dbt和运行模型时会生成使用情况统计信息。这些事件包含基本的平台信息(OS+python版本)和元数据,例如调用是否成功、花费了多长时间、表示原始模型内容的匿名哈希密钥以及运行的节点数。您可以在[tracking.py]中查看所有事件定义(https://github.com/dbt-labs/dbt-core/blob/HEAD/core/dbt/tracking.py).

默认情况下,此选项处于启用状态,您可以随时选择退出事件跟踪,方法是将以下内容添加到profiles.yml文件中:

config:
  send_anonymous_usage_stats: False

您也可以使用DO_NOT_TRACK环境变量来启用或禁用发送匿名数据。有关更多信息,请参阅环境变量

DO_NOT_TRACK=1 等同于 DBT_SEND_ANONYMOUS_USAGE_STATS=False DO_NOT_TRACK=0 等同于 DBT_SEND_ANONYMOUS_USAGE_STATS=True

静态解析器

STATIC_PARSER配置可以启用或禁用静态解析器的使用。有关更多详细信息,请参阅解析文档

config:
  static_parser: true

严格

从V1.0开始,-S--strict标记已被弃用

在输出中抑制非错误日志

默认情况下,dbt在标准输出中输出所有日志。您可以使用QUIET配置在标准输出中只显示错误日志。日志仍将包括传递给print()宏的任何内容的输出。例如,您可以取消显示除错误日志以外的所有日志,以便更容易地查找和调试jinja错误。

config:
  quiet: true

支持-q--quiet 标记, dbt run 只显示错误日志并取消显示非错误日志.

$ dbt --quiet run
...

禁止标准输出中包含print()信息

默认情况下,dbt在标准输出中包含print()消息。您可以使用NO_PRINT配置来防止这些消息显示在标准输出中。

config:
  no_print: true

支持--no-print 标记, dbt run 禁止在标准输出中包含 print() 信息.

$ dbt --no-print run
...

使用颜色

默认情况下,dbt会对它在终端中打印的输出进行着色。您可以通过在profiles.yml文件中添加以下内容来关闭此功能:

config:
  use_colors: False
$ dbt --use-colors run
$ dbt --no-use-colors run

警告转为错误

打开WARN_ERROR配置会将dbt警告转换为错误。任何时候dbt通常都会发出警告,以代替升级到一个致命错误。比如--select不选择资源、弃用、没有关联模型的配置、无效的测试配置,或配置为返回警告的测试。

$ dbt --warn-error run
...

将任何和警告转换为错误可能非常适合您的需求,但可能有一些警告您根本不关心,有些警告您非常关心。

WARN_ERROR_OPTIONS配置使您能够更精确地控制哪些类型的警告被视为错误。可以通过includeexclude参数指定应被视为错误的警告。警告名称可以在[dbt-core's types.py文件]中找到(https://github.com/dbt-labs/dbt-core/blob/main/core/dbt/events/types.py).

include参数可以设置为all*以将所有警告视为异常,也可以设置为特定警告名称列表以将其视为异常。当include设置为all*时,可选的exclude参数可以设置为排除将特定警告视为异常的情况。

WARN_ERRORWARN_ERROR_OPTIONS互斥

WARN_ERRORWARN_ERROR_OPTIONS是互斥的.即使在多个位置指定配置(例如env-var+CLI标记),也只能指定一个,否则会出现使用错误。

$ dbt --warn-error-options '{"include": "all"}' run
...
$ dbt --warn-error-options '{"include": "all", "exclude":[NoNodesForSelectionCriteria]}' run
...
$ dbt --warn-error-options '{"include": [NoNodesForSelectionCriteria]}' run
...
$ WARN_ERROR_OPTIONS='{"include": [NoNodesForSelectionCriteria]}' dbt run
...
config:
  warn_error_options:
    include: all
    exclude: 
      - NoNodesForSelectionCriteria

编写JSON工件

WRITE_JSON配置确定dbt是否将JSON工件(例如manifest.JSONrun_results.JSON)写入target/目录。JSON序列化可能很慢,关闭此标记 可能 加快dbt的运行。或者,如果您想执行dbt操作并避免覆盖上一个运行步骤中的工件,则可以禁用此配置。

dbt --no-write-json run