连接profiles
相关文档¶
profiles.yml介绍: 了解更多有关profile的配置.
使用命令行连接您的数据仓库¶
当您从命令行中调用dbt时,dbt会解析您的dbt_project.yml文件并获取profile字段, 这些字段用于连接您的数据仓库
dbt检查您的profiles.yml文件中是否有同名的配置。配置文件包含连接到数据仓库所需的所有详细信息。
默认情况下dbt希望profiles.yml文件存放到 ~/.dbt/ 目录下.
dbt会在当前的工作目录里查找profiles.yml,如果没有则会在~/.dbt/目录里查找.
该文件通常存放在dbt项目之外,以避免将敏感数据提交到git代码库里,但当使用环境变量加载敏感数据时,就可以将profiles.yml提交到git里.
# example profiles.yml file
jaffle_shop:
target: dev
outputs:
dev:
type: postgres
host: localhost
user: alice
password: <password>
port: 5432
dbname: jaffle_shop
schema: dbt_alice
threads: 4
关于profiles.yml文件¶
在你的profiles.yml文件里, 您可以根据需要存储任意数量的配置项。通常需要为每个数据仓库提供一个profile配置文件,但大多数公司只有一个数据仓库。
关于高级配置选项, 请参阅profiles.yml参考文章.
关于profiles¶
一个profile包含 targets, 和一个特定的 default target.
每个 target 指定要连接到的数据仓库类型, 连接凭证, 以及dbt特定的配置.
您要提供的target因数据仓库而异, 每个支持的数据仓库配置示例请查看支持数据平台.
专业提示: 如果密码包含特殊字段,您可能需要将加上引用. 更多信息请参考这里.
设置profile¶
设置你的profile,复制一份指定数据仓库的profile放到profiles.yml文件里,并更新以下内容:
- Profile name: 将profile文件的名称替换为合理的名称–通常使用组织的名称。请确保这与
dbt_project.yml文件中的profile名称相同. target: 这是dbt项目默认的target,必须是你在profile里设置的targets之一,通常设置成dev.- Populating your target:
type: 连接的数据仓库类型- Warehouse credentials(数据仓库凭证): 如果你没有请从你的数据仓库管理员处获取,用户凭证信息非常敏感,不应该分享到组织外部.
schema: dbt构建项目时默认使用的schema.threads: dbt项目在运行时的线程数.
您可以在下面找到在targets中哪些值怎么使用的详细信息。
验证您的数仓凭证信息
使用debug 命令来检查你是否能正常连接你的数仓.只需要在dbt项目中运行dbt debug.
理解profiles里的targets¶
dbt支持在一个profile里有多个target来鼓励使用单独的开发和生产环境,参阅dbt Core环境.
分析师使用dbt本地开发时的典型profile文件将有一个名为dev的target,并将其设置为默认值。
您的profile文件中也可能有一个prod target,它在生产环境中创建对象。然而,由于通常需要按计划执行生产任务,因此我们建议将dbt项目部署到本地以外的机器上。大多数dbt用户在本地机器上的profile文件中只有一个dev target。
如果您的profile文件中有多个target,并且希望使用默认以外的target,则可以使用--target选项命令来执行此操作。
理解数仓凭证¶
我们建议每个dbt用户使用自己的数据库凭证,包括一个用于dbt在生产环境下运行的单独用户,这有助于调试恶意查询,简化schema的所有权,并提高安全性.
为了确保您在target中使用的用户凭证允许dbt运行,您需要确保用户具有适当的权限。虽然所需的确切权限因数据仓库而异,但您的用户至少必须能够:
- 可读权限
- 创建schema
- 读取系统
tables
无创建schema权限运行
如果你的用户没有创建schema的权限,你在运行dbt时需要使用一个已经存在的schema
理解目标schemas¶
目标schema表示dbt将在其中构建对象,并且通常用作仓库中不同环境之间的区别。
info BigQuery中的schema
为了保持一致性,dbt在所有支持的仓库中的目标中使用术语schema,但请注意,在BigQuery的情况下,一个schema实际上是一个数据集。
schema在用于生产模式下的命名方式,应清楚地表明它已准备好供最终用户用于分析——我们通常将其命名为analytics.
在开发过程中,我们发现一种行之有效的模式是将dev目标中的schema命名为dbt_<username>。将你的名字放到schema的后缀中可以让多个用户在dbt中进行开发,因为每个用户都有自己单独的schema进行开发,这样用户就不会在彼此之上进行构建,并确保对象所有权和权限在整个schema中是一致的。
请注意,不需要预先创建目标schema——dbt将在运行时检查该schema是否已经存在,如果不存在,则创建该schema。
虽然目标target代表dbt将使用的默认schema,但将模型拆分为单独的schema是很有意义的,可以通过使用自定义schema来完成。
理解threads(线程)¶
当dbt运行时,它会创建模型之间链接的有向无环图(DAG)。线程数表示dbt一次可以处理DAG中的最大路径数——增加线程数可以最大限度地减少项目的运行时间。profile文件中线程的默认值为4 threads.
例如,如果指定threads:1,则dbt将只构建一个模型,并在完成构建之后再进入下一个模型。指定threads:8意味着dbt将在不违反依赖关系的情况下同时处理 多达 8个模型——它可以处理的实际模型数量可能会受到依赖关系图中可用路径的限制。
您可以设置的最大线程数并没有限制——虽然增加线程数通常会减少执行时间,但需要考虑以下几点:
- 增加线程数量会增加数据仓库的负载,这可能会影响数据栈中的其他工具。例如,如果BI工具使用与dbt相同的资源,那么它们的查询可能会在dbt运行期间进行排队。
- 数据库允许您运行的并发查询数量受您有多少模型的一个限制——一些模型可能会需要排队。
通常,线程的最佳数量取决于数据仓库及其配置。最好测试不同的值,以找到适合您项目的最佳线程数。我们建议先将其设置为4。
通过在执行dbt命令时使用--threads选项,可以使用与target中定义的不同的线程数。
高级: 自定义一个profile文件目录¶
使用以下示例确定profiles.yml的父目录:
--profiles-diroptionDBT_PROFILES_DIRenvironment variable- current working directory
~/.dbt/directory
要检查 profiles.yml 文件用于安装 dbt 的预期位置,您可以运行以下命令:
您可能希望将profiles.yml文件存储在不同于~/.dbt/的目录中——例如,如果您正在使用环境变量加载你的凭据,则可以选择将此文件包含在dbt项目的根目录中。
请注意,无论文件在哪个目录中,都需要将其命名为profiles.yml。
有多种方法可以将dbt指向到profiles.yml文件的不同位置:
1. 执行dbt命令时使用 --profiles-dir 选项¶
$ dbt run --profiles-dir path/to/directory
如果使用此方法,则每次运行dbt命令时都需要提供--profiles-dir选项。
2. 使用DBT_PROFILES_DIR 环境变量更改默认位置,此环境变量会覆盖dbt在其中查找profiles.yml文件的目录。您可以通过运行以下命令:¶
高级: 使用环境变量¶
凭据可以直接放在profiles.yml文件中,也可以从环境变量加载。使用环境变量对于dbt的生产部署特别有用。您可以在此处中找到有关环境变量的更多信息。