DBT的profiles配置

894 阅读6分钟

1、使用命令行连接到您的仓库

从命令行调用 dbt 时,dbt 会解析您的 dbt_project.yml 并获取profile名称,用于连接到数据仓库。 dbt 然后检查您的profiles.yml 文件以查找具有相同名称的profile。 此profile包含连接到数据仓库所需的所有详细信息。 dbt_project.yml的路径默认在dbt项目的根目录下

image.png

dbt将在当前工作目录中寻找profiles.yml文件,如果未找到,则默认到~/.dbt/目录寻找。

该文件通常位于dbt项目之外,以避免将敏感凭证记录到版本控制。在使用环境变量加载敏感凭证时, profiles.yml可以安全地记录到版本控制。

profiles.yml的路径默认在~/.dbt/

profiles.yml示例截图如下: image.png

2、 关于profiles.yml文件

在您的profiles.yml 文件中,您可以根据需要存储任意数量的profile配置信息。 通常,您使用的每个仓库 都有一个配置信息。

2.1、关于profile

profile由targets和指定的default target组成。

每个target都指定您要连接的仓库类型、连接到仓库的凭据以及一些特定于 dbt 的配置。

您需要在target中提供的凭据因仓库而异,每个支持的仓库的示例配置文件可在支持的数据平台部分中找到。

提示:如果密码包含特殊字符,您可能需要将密码用引号引起来。

2.2、设置profile

  • Profile name:用一个合理的名称替换profile的名称——使用您的组织名称通常是个好主意。 确保它 与 dbt_project.yml 文件中指示的profile名称相同。
  • target:这是dbt 项目将使用的默认target。 它必须是您在配置文件中定义的target之一。 通常它设置为 dev。
  • 填充您的target:
    • type:您要连接的数据仓库的类型
    • 仓库凭据:如果您还没有这些凭据,请从您的数据库管理员那里获取。 请记住,用户凭据是非常敏感的信息,不应共享。
    • schema:dbt 将在其中构建对象的默认模式。
    • 线程:dbt 项目将运行的线程数。

使用debug命令检查连接仓库是否成功。只需在dbt项目中运行dbt调试来测试连接。

2.3、理解profiles中的targets

dbt 在一个profile文件中支持多个targets,以鼓励使用单独的开发和生产环境。

在本地使用 dbt 的典型profile文件将有一个名为 dev 的target,并将此设置为默认值。

如果您的profile配置文件中确实有多个target,并且想要使用默认target以外的target,则可以在执行 dbt 命令时使用 --target 选项执行此操作。

2.4、理解仓库凭据

我们建议每个 dbt 用户都有自己的一组数据库凭据,包括用于 dbt 生产运行的单独用户——这有助于调试恶意查询、简化模式的所有权并提高安全性。

为确保您在target中使用的用户凭据允许 dbt 运行,您需要确保用户具有适当的权限。 虽然所需的确切权限因数据仓库而异,但您的用户至少必须能够:

  • 读取源数据
  • 创建schema
  • 读取系统表

2.5、理解target schemas

target schema表示 dbt 将在其中构建对象的默认schema,并且通常用作仓库中不同环境之间的区别。

用于生产的模式的命名方式应该清楚地表明它已准备好供最终用户用于分析——我们通常命名为 analytics。

在开发中,我们发现一个很好的模式是将dev target中的schema命名为 dbt_。 将您的名字 添加到schema后,可以让多个用户在 dbt 中进行开发,因为每个用户都将拥有自己单独的模式进行开发,这样用户就不会相互叠加。

请注意,无需事先创建target schema - dbt 将在运行时检查该schema是否已经存在,如果不存在则创建它。

虽然target schema表示 dbt 将使用的默认模式,但将模型拆分为单独的模式可能是有意义的,这可以通 过使用自定义模式来完成。

2.6、理解线程

当 dbt 运行时,它会创建模型之间链接的有向无环图 (DAG)。线程数表示 dbt 一次可以处理的通过图的 最大路径数——增加线程数可以最大限度地减少项目的运行时间。

例如,如果您指定线程:1,dbt 将只开始构建一个模型并完成它,然后再进入下一个模型。指定线程:8 意味着 dbt 将同时处理多达 8 个模型而不会违反依赖关系——它可以处理的模型的实际数量可能会受到 依赖关系图的可用路径的限制。

您可以设置的最大线程数没有设置限制 - 虽然增加线程数通常会减少执行时间,但有许多事情需要考 虑:

  • 增加线程数会增加仓库的负载,这可能会影响数据堆栈中的其他工具。例如,如果您的 BI 工具使用 与 dbt 相同的计算资源,则它们的查询可能会在 dbt 运行期间排队。
  • 您的数据库将允许您运行的并发查询数量可能是可以构建多少模型的限制因素——某些模型可能会在 等待可用查询槽时排队。

通常,最佳线程数取决于您的数据仓库及其配置。最好测试不同的值以找到适合您项目的最佳线程数。 我们建议将其设置为 4 开始。

通过在执行 dbt 命令时使用 --threads 选项,您可以使用与target中定义的值不同的线程数。

3、高级:自定义profile目录

profile.yml 的父目录使用以下优先级确定:

  1. --profiles-dir 选项
  2. DBT_PROFILES_DIR 环境表里
  3. 当前目录
  4. ~/.dbt/ 目录

要检查dbt安装后的profiles.yml 文件的预期位置,您可以运行以下命令:

dbt debug --config-dir

您可能希望将您的profiles.yml 文件存储在与~/.dbt/ 不同的目录中——例如,如果您使用环境变量来加载您的凭据,您可以选择将此文件包含在您的dbt 项目的根目录中。

请注意,该文件始终需要命名为profiles.yml,无论它位于哪个目录中。

有多种方法可以将 dbt 指向不同位置的 profiles.yml 文件:

  1. 执行dbt命令的时候使用 --profiles-dir

dbt run --profiles-dir path/to/directory

如果使用此方法,则每次运行dbt命令时都需要提供 --profiles-dir选项。

  1. 使用 DBT_PROFILES_DIR 环境变量更改默认位置 指定此环境变量会覆盖 dbt 查找的profiles.yml 文件的目录。您可以通过运行命令来指定它:

export DBT_PROFILES_DIR=path/to/directory