DBT(Data Build Tools)是一种数据转换工作流工具,作为数据分析师,我们需要将原始的数据进行各类加工组合来应对更为复杂的数据分析需求。准确来说,dbt 还是来写 sql 做各种数据查询,你可能会想,那我自己写 sql 不就完事了,还用啥 dbt。事实上,由于数据库种类繁多,sql 会存在兼容问题;其次,数据转换会存在数据依赖,比如底层原始数据层层转变为业务数据,你可能需要自己来维护这个依赖关系,其实仔细一想,你就会发现自己做会非常麻烦。
我们可以把 DBT 想象成一个厨师,而原始数据就像是食材。厨师(DBT)的工作就是把食材(原始数据)加工成好吃的菜(有用的数据模型)。这个过程就像是烹饪一样,需要按照一定的顺序和步骤来操作。
DBT 的工作流程就像是烹饪的步骤,我们只需要告诉 DBT 想做什么菜(即你想要的数据模型是什么样的,当然 sql 肯定得自己写),然后,DBT 会按照你的指示,一步步地处理食材(即处理原始数据),最后做出你想要的菜肴(即生成你需要的数据模型)。
其实说到这,你就能明白 dbt 能让我们更聚焦在我们想要什么数据,定义怎样的数据模型,其余的工作流全权交给 dbt 即可,这就是 dbt 的作用。
我们在 dbt 文档开头会留意到两个比较重要的名词,dbt core 和 dbt cloud,新手可能已经不知道该从哪个入手了,这里先解释下区别:
dbt Core
是 dbt
的开源部分,它提供了数据建模、转换和管理的核心功能。使用 dbt Core
,你可以定义和运行数据转换模型,生成 SQL 查询,并将数据写入目标数据仓库(如BigQuery、Snowflake等)。总而言之,你接下来要使用的 dbt 命令都是基于 dbt core,所以这个必须安装(后面细说)。dbt Cloud
是 dbt
的云服务,构建在 dbt Core
的基础之上。它提供了托管服务,CI/CD 部署以及图形化的用户界面,能让你直接在平台运行 dbt
模型而无需自己设置和搭建基础设施,关于 dbt cloud 我后续单独出一篇文章。总而言之,就是 saas 付费服务和开源本地化自行搭建的区别,那么本文自然是从 dbt core 的视角出发了。
除了 dbt core,第二个重要的概念是 dbt adapters,也就是 dbt 适配器,而且我们要做数据处理一定是安装 dbt core + 某个数据库所对应的适配器。
大家都知道不同的数据库在 SQL 查询上都会有些许差异,要记住所有类型的特定语法成本高但收益低,适配器正好帮我们做了这件事,适配器的作用之一是提供一种标准化的接口,让你可以使用相同的 SQL 语法来与不同的底层数据平台交互,而不需要关注 SQL 语句本身。
dbt 本身提供的适配器就非常多,除了官网维护的适配器之外,还有社区自行维护且受 dbt 官方认可的适配器,所以从数据平台(比如 bigQuery、Postgres)到数据库(比如 mysql)本身。
dbt 为所有的适配器都提供了独立的文档,以及配置说明,大家根据自己的数据库类型可以直接来这个文档目录搜索查看即可。
ELT 和 ETL 是两种常见的数据分析模式,它们在数据处理流程中的步骤顺序上有所不同。
ETL:
在 ETL 模式中,数据在提取后经过一系列复杂的转换操作,然后再加载到目标系统。这种模式适用于需要对数据进行多次、复杂转换的情况,比如将多个源的数据合并,进行聚合等。
ELT(提取、加载、转换):
顾名思义,在数据处理顺序上有所不同。ELT 模式中,数据首先加载到目标系统,然后在目标系统内进行转换。这种模式适用于目标系统有足够计算资源的情况,可以在目标系统中直接处理原始数据。
两者区别:
理解 ELT(Extract, Load, Transform)和 ETL(Extract, Transform, Load)的概念有助于更好地理解这三个工具在数据处理和分析中的角色。
整体流程:
这种结合 ELT 和 ETL 的方式,利用了 Fivetran 的强大数据加载能力,同时通过 dbt 提供的数据建模工具,实现了灵活而可维护的数据处理和分析流程。
综合考虑,Fivetran 和 dbt 可以协同工作。Fivetran 负责将数据从源头搬移到数据仓库,而 dbt 则负责在数据仓库中进行进一步的处理和建模,以便更轻松地进行复杂的查询和分析。简单理解,Fivetran 只提供了基础的数据清洗和转换,而 dbt 提供更专业更强大更自由的数据转换。
与 npm 需要依赖 node 一样,pip 命令也需要安装 Python,关于版本这里推荐安装 3.8 3.9 即可,不要安装 3.10。我在安装了 Python 3.10 后出现了安装 mysql 适配器和 core 包时,一直只能安装 0.19.2 的情况,而 core 最新的版本都到了1.1.6,导致我一直陷入了包版本是对的,但是 core 与 mysql 适配器依赖包版本错误需要解决版本冲突的怪圈中,这点切记。
上文已经提到 dbt core 属于 dbt 的开源核心,我们后续使用的命令都由这个包提供。安装 dbt core 的方式有很多,官方支持 pip、docker、homebrew 等等。
上文我们已经安装了 Python ,所以我们在终端执行如下命令即可:
pip install dbt-core
dbt 默认全局安装,所以即便你在某个项目路径下,它还是会基于全局安装,在安装完成之后,我们能执行如下命令检查安装是否完成。
pip show dbt-core
比如我安装的就是 core 1.1.6 版本,这里就能看到安装的版本,路径等相关信息。
我们后续所有工作,都将基于 core 与 adapters 两个包来完成,其实准备来说,当我们执行安装某个适配器时,这个命令会默认安装与之关联的 core 包,也就是一个命令自动安装两个包,这里我们以 bigQuery 为例:
pip install dbt-bigquery
同理,安装之后可以执行命令检查安装包的版本等信息:
pip show dbt-bigquery
某些情况下,你先执行了下载适配器的命令,会默认帮你 core 包,你也许想单独再安装更高版本的 core 包,你可以通过卸载重装的形式来完成,比如:
## 先卸载
pip uninstall dbt-core
## 再安装执行版本包
pip install dbt-core==1.1.6
以上就是 dbt 两个核心的包了,我们只需要安装这两个包就能支撑接下来的所有工作,再做个总结,解释下两个包的作用:
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
添加我为好友,拉您入交流群!
请使用微信扫一扫!