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
: 项目的version -
require-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查询,如下所示。您能够在日志中找到这个查询。