dbt BaseAdapter简单说明

BaseAdapter是dbt 所有adapter 的父类,dbt 内部默认实现了有一个SQLAdapter 的实现,现有的一些扩展基本实现SQLAdapter 就可以了
比如dremio 的dbt adapter 就是直接扩展的SQLAdapter

BaseAdapter 提供的能力

  • 简单说明

adapter 必须实现一些方法以及macro,一些方法可以被安全的通过空实现覆盖(比如数据库不支持的场景),同时可以通过pass 标记
同时添加docstring 说明,对于macro 的实现,应该按照${adapter_type}__${macro_name} 格式(在include 目录中,这个官方文档也有说明),为了调用adapter 中的macro,可以通过jinja 的操作语法
必须实现的方法

 
- exception_handler
- date_function
- list_schemas
- drop_relation
- truncate_relation
- rename_relation
- get_columns_in_relation
- get_column_schema_from_query
- expand_column_types
- list_relations_without_caching
- is_cancelable
- create_schema
- drop_schema
- quote
- convert_text_type
- convert_number_type
- convert_boolean_type
- convert_datetime_type
- convert_date_type
- convert_time_type
- standardize_grants_dict

macro

- get_catalog

类图

SQLAdapter 实现简单说明

  • 简单说明

BaseAdapter 属于一个基础类,SQLAdapter 是一个方便adapter 实现的包装,简化了adapter的开发,我们不用像BaseAdapter 那样实现很多
方法才能实现一个adapter,需要实现的方法为date_function macro 包含get_catalog ,list_relations_without_caching,get_columns_in_relation

类图

说明

以上是一个简单说明,实际上BaseAdapter 还包含了连接管理以及sql 执行,支持已经包装好了,我们使用起来比较简单,了解adapter 基类有助于理解adapter 的开发,同时结合这些去看官方文档以及dremio 的实现也就比较方便了

参考资料

dbt/adapters/sql/impl.py (adapter 包)
dbt/adapters/base/impl.py (adapter 包)
dbt/adapters/base/meta.py (元类)
https://docs.getdbt.com/guides/adapter-creation?step=1
https://github.com/dremio/dbt-dremio

posted on   荣锋亮  阅读(16)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2023-04-12 gotenberg+ chromiumly + pdf.js 进行office 文档转换以及预览处理
2021-04-12 cube.js playground 使用的一些问题
2020-04-12 easy-rules yaml 组合模式rule 配置
2020-04-12 easy-rules 组合rule说明
2020-04-12 easy-rules mvel yaml 格式规则配置&&试用二——rule 数据返回结果
2020-04-12 easy-rules mvel yaml 格式规则配置&&试用
2019-04-12 Introducing Outflux: a smart way out of InfluxDB

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示