dbt 是 dbt labs 公司在2016年推出的一款基于 Python 的开源数据加工工具。从2019年开始,dbt的用户数量增涨十分迅速。dbt labs 凭借此工具,在2022年估值达到了 42 亿美金。

dbt 的价值

  • dbt 是面向分析工程师提供服务。【分析工程师】是dbt新定义的岗位,是基于 DataOps 思想,综合了数据工程师和数据分析师两者。即分析师也应该会代码开发(实际上,现在很多的数据分析师就是在做sql开发的活)。
  • 数据应该先被加载到数据仓库,再做转换
    传统的 ETL 工作流,T转换的工作在中间,由数据工程师完成。要求数据工程师对业务和数据加工逻辑要非常了解才行。但实际工作要达到这点很难,目前国际上的数仓项目,普遍都只能达到20%的预计目标,近几年数据湖才越来越流行。新的思想是EL-T,即T转换放在最后,由分析师来完成。在此思想下,Fivetran,Airbytes之类的工具才越来载流行。
  • 分析师缺少有效的工具管理他们的工作
    dbt 就是这样的工具,而且在此领域,dbt是唯一的产品,没有竞争对手。2019年,Fivetran宣布放弃集成SQL,开始集成dbt,2021年彻底抛弃SQL,由此可以看出dbt的魅力。

dbt 的特性

  • 开源免费:dbt 有两个产品,dbt-core 是开源免费的,需要安装才可以使用。 dbt-cloud 是付费的云服务。
  • 所有操作都会编译成 SQL 语句,下推到数据库完成,自身不存储数据。自从数据安全法开始推出后,所有 etl 工具都会面临安全要求。dbt 的此特性成了优势。
  • 提供版本管理、配置继承、包、宏等功能点,可以很好地支持团队数据开发。这是DataOps的核心思想,即 Data as Code
  • 提供 test 数据质量测试功能,也是 dbt 的核心思想。由于数据在源源不断的产生,数据交付是一个长期的过程。在以往的数据交付,缺少对数据的测试,只能出了问题再溯源追查,对用户和数据开发者,都是超级痛苦的事情。
  • 自动建表
    dbt可以按照写好的模型,自动编译出建表语句。有些大型项目,成百上千的表,建表真是建得想砸电脑了。
  • 提供文档功能
    这个真的很赞,以往的项目,建模->建表->ETL开发->测试->交付文档,一个小变更就要改一堆东西。别和我说 PowerDesigner 可以自动生成,不准的,特别是在多人协作的时候,合并pdm文件真是个苦力活。dbt 的维护,真得轻松。
  • YAML配置和命令行操作
    搞过 ETL 开发的数据工程师,没几个喜欢拖拉拽的图形化操作。还是命令行操作更方便。yaml文件配置也很好搞,很多机械化的操作,都可以用代码批量做了。

dbt 的缺点

  • 支持的数据库有限
    官方适配器支持的数据库很少,好在还有社区适配器,不然连 clickhousevertica之类的都不支持。惨的是,国内的云平台 MaxComputer 等不在支持范围内。dbt官方网档:Supported data platforms
  • 不能跨数据库读写
    读取和写入的数据库,只能是同一个。这个估计官方是不会改了,好在schema可以通过加后缀的方式,实现跨schema读写,不然得疯。
  • 版本更新慢
    Postgres的版本都到15了,dbt-postgres还只能支持14,唉。免费的,只能将就了。
  • Python 的支持
    一言难尽了,虽然 dbt 是基于 Python 开发的,但只在BigQuery等个别平台中,才可以使用 Python 模型。现在很多 ETL 工具,如 Kettle Talend Alteryx 等,都支持 Python R Java JavaScript 扩展。dbt 的这方面,实在没法尬吹了,只能寄望未来了。

综合以上,在实际部署dbt的时候,还是需要多测试一下,确保版本、适合器、功能都满足需要才成。另外,在 dbt官网 没有找到关于集群的说明,虽然 dbt 的工作模式是下推给数据库执行,但海量数据的处理,我觉得还是存疑的。

但只是分析师小规模使用的话,dbt 还是蛮爽的。

安装 dbt

dbt 有两个产品,dbt-cloud是付费的云端产品,不用安装。通常说的 dbt ,是指 dbt-core ,开源免费的。可以使用 pip 安装,也可以使用 docker 镜像。这里,咱们只说 pip 安装。

从不知道哪个版本开始,dbt 拆分成了以下三个部分,需要分别安装:

  • dbt-coredbt 的核心文件。
  • dbt-<adapter>,目标数据库的适配器,用哪个就装哪个。
  • dbt-utils,扩展包,提供了很多非常有用的扩展功能,比如查询字段名等等。

安装过程

Windows 环境为例:

  1. 安装 Python环境,dbt 是基于 Python,安装方法网上有很多,这里略过了。注意一般不要选择最新版本的 Pythondbt跟不上的。具体可以上 pypi 搜索一下,看 dbt 支持的 Python 版本。
  2. 安装 dbt-core,执行 pip install dbt-core 就好。
  3. 安装 adpater,以 postgres 为例,执行 pip install dbt-postgres 即可,其他适配器,可以在 Supported data platforms 上搜索一下。
  4. 初始化项目,执行 dbt init project-nameproject_name 是自己的项目名称,按需要填。初始化过程中,需要选择使用的适配器,按照自己的情况选就好。
  5. 安装 dbt-utils
    • 先在项目录下,创建 packages.yml 文件,内容如下:
      packages:
        - package: dbt-labs/dbt_utils
          version: 1.1.0
      
    • 在项目目录下,执行 dbt deps 完成安装。
  6. C:\Users\<UserName>\.dbt/ 目录下,找到 profiles.yml,在项目名称项下填写数据库连接信息。其中,dev 下的是开发数据库, prod 是生产环境的数据库,使用 target 控制用哪个配置。
    在这里插入图片描述
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐