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:键下面

搭建DBT项目(一)

从source中查询

一旦界说了source,就能够运用{{source()}}函数在模型中引用它。

搭建DBT项目(一)

运用{{source()}}函数还会在模型和源表之间创立依赖联系。

对源进行测验和添加文档

你能够:

  • 将测验添加到源
  • 将描绘添加到源中,作为文档站点的一部分出现

搭建DBT项目(一)

FAQs:

  1. 假如我的源表不在方针数据库中怎么办? 运用database特点来界说源地点的数据库。

搭建DBT项目(一)

  1. 如何仅对我的源运转测验? 要对一切源运转测验,请运用以下指令:

dbt test –select source:*

在一个源(及其一切表)上运转测验:

dbt test –select source:jaffle_shop

仅在一个源表上运转测验:

dbt test –select source:jaffle_shop.orders

  1. 如何运转一个源的下流模型? 要运转源下流的模型,请运用 source: 选择器:

dbt run –select source:jaffle_shop+

要运转一个源表下流的模型:

dbt run –select source:jaffle_shop.orders+

快照源数据新鲜度

经过一些额定的装备,dbt能够选择性地快照源表中数据的“新鲜度”。这有助于理解数据管道是否处于健康状况,并且是为库房界说sla的要害组件。

(1)声明源新鲜度

要装备源来快照新鲜度信息,在源中添加一个freshness块,在表声明中添加loadd_at_field:

搭建DBT项目(一)

freshness块中,能够供给warn_aftererror_after中的一个或两个。假如两者都没有供给,那么dbt将不会为这个源中的表核算新鲜度快照。

此外,需要loadd_at_field来核算表的新鲜度。假如没有供给loadd_at_field,那么dbt将不会核算表的新鲜度。

这些装备是层级运用的,因此为源指定的freshnessloaded_at_fiels值将运用该源中界说的一切表。当源中的一切表都具有相同的loaded_at_field时,这非常有用,因为在顶级源界说中只需指定一次装备。

(2)查看源数据新鲜度

要快照源的新鲜度信息,请运用 dbt source freshness 指令:

dbt source freshness

在幕后,dbt运用新鲜度特点结构一个select查询,如下所示。您能够在日志中找到这个查询。

搭建DBT项目(一)