1、关于dbt项目
dbt项目告诉dbt其项目的上下文以及如何转换数据(构建数据集)。通过设计,dbt执行dbt项目的顶层结构,例如dbt_project.yml文件、models目录、snapshot目录,等等。在顶级目录中,您可以以满足组织和数据管道需要的任何方式组织项目。
所有的项目至少都需要dbt_project.yml项目配置文件。DBT支持许多不同的资源,所以一个项目可能还包括:
models: 每个模型都位于一个单独的文件中,并包含将原始数据转换为数据集以便进行分析的逻辑,或者,更常见的是,它是这种转换的中间步骤。snapshots: 一种捕获可变表状态的方法,以便以后可以引用它。seeds: 可以使用dbt将带有静态数据的CSV文件加载到数据平台中。tests: 编写SQL查询来测试项目中的模型和资源。macros: 可以多次重用的代码块。docs: 可以为你的项目创建文档。sources: 一种命名和描述由Extract和Load工具加载到仓库中的数据的方法。exposures: 一种定义和描述项目下游使用的方法。metrics: 一种为项目定义度量的方法。analysis: 一种在项目中组织分析SQL查询的方法。
项目配置
每个dbt项目都包含一个名为dbt_project.yml的项目配置文件。它定义了dbt项目和其他项目配置的目录。
编辑dbt_project.yml来设置常见的项目配置,例如:
name: snake case模式的项目名version: 项目的versionrequire-dbt-version: 限制您的项目只能使用的dbt Core版本范围profile: dbt用于连接到数据平台的配置文件model-paths: 模型model和源source文件所在的目录seed-paths: seed文件所在的目录test-paths: test文件所在的目录analysis-paths: analysis所在的目录macro-paths: 宏所在的目录snapshot-paths: 快照所在的目录docs-paths: 文档快所在的目录vars: 要用于数据编译的项目变量
新项目
你可以创建新的项目,并通过在GitHub、GitLab和BitBucket等托管的git存储库中与他人共享它们。 在与数据平台建立连接后,从命令行运行dbt init来初始化新项目。在项目初始化期间,dbt在项目目录中创建示例模型文件,以帮助您快速开始开发。
2、构建DAG
2.1、Sources
使用sources
Sources可以命名和描述通过提取和加载工具加载到您的仓库中的数据。 通过将这些tables声明为 dbt 中 的sources:
- 使用
{{ source() }}函数从模型中的源表中选择,帮助定义数据的血缘 - 测试您对源数据的假设
- 计算源数据的新鲜度
声明source
源定义在.yml文件中,嵌套在sources:键下面
从source中查询
一旦定义了source,就可以使用{{source()}}函数在模型中引用它。
使用{{source()}}函数还会在模型和源表之间创建依赖关系。
对源进行测试和添加文档
你可以:
- 将测试添加到源
- 将描述添加到源中,作为文档站点的一部分呈现
FAQs:
- 如果我的源表不在目标数据库中怎么办? 使用database属性来定义源所在的数据库。
- 如何仅对我的源运行测试? 要对所有源运行测试,请使用以下命令:
dbt test --select source:*
在一个源(及其所有表)上运行测试:
dbt test --select source:jaffle_shop
仅在一个源表上运行测试:
dbt test --select source:jaffle_shop.orders
- 如何运行一个源的下游模型? 要运行源下游的模型,请使用
source:选择器:
dbt run --select source:jaffle_shop+
要运行一个源表下游的模型:
dbt run --select source:jaffle_shop.orders+
快照源数据新鲜度
通过一些额外的配置,dbt可以选择性地快照源表中数据的“新鲜度”。这有助于理解数据管道是否处于健康状态,并且是为仓库定义sla的关键组件。
(1)声明源新鲜度
要配置源来快照新鲜度信息,在源中添加一个freshness块,在表声明中添加loadd_at_field:
在freshness块中,可以提供warn_after和error_after中的一个或两个。如果两者都没有提供,那么dbt将不会为这个源中的表计算新鲜度快照。
此外,需要loadd_at_field来计算表的新鲜度。如果没有提供loadd_at_field,那么dbt将不会计算表的新鲜度。
这些配置是层级应用的,因此为源指定的freshness和loaded_at_fiels值将应用该源中定义的所有表。当源中的所有表都具有相同的loaded_at_field时,这非常有用,因为在顶级源定义中只需指定一次配置。
(2)检查源数据新鲜度
要快照源的新鲜度信息,请使用 dbt source freshness 命令:
dbt source freshness
在幕后,dbt使用新鲜度属性构造一个select查询,如下所示。您可以在日志中找到这个查询。