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 2024-04-12 07:38  荣锋亮  阅读(51)  评论(0)    收藏  举报

导航