dbt adapter 开发一些资料
dbt 演变以及周边工具是越来月多了,而且有不少db 已经支持dbt 的集成玩法了,官方提供了一些相关开发文档,一些不是很清晰
对于我们实际需要开发的,就可以自己摸索,现在new sql 是越来越多了,但是并不是都能更好的支持dbt 内置的一些功能,
连接管理部分
这个部分官方有完整的信息,文档有提供,如下是dremio 的实现,具体参考https://docs.getdbt.com/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter
macro 部分
这个部分,官方已经提供了说明,有一些是必须实现的,如下,同时dbt 实现了一种方法重定向的能力(adapter.dispatch)同时对于宏方法的实现包含了
一些约定<new adapter>__
可以重写默认的实现,default__
作为默认实现(dbt core 部分实现的),对于需要以来明确包宏的可以通过adapter.dispatch
明确定义,参考{{ return(adapter.dispatch('concat', 'dbt_utils')(fields)) }}
官方core 提供的一些全局宏定义
一个特殊buildin 宏的处理,对于ref,source,config 可能需要自己扩容,有时就可以重写了,比如dremio 就重写了ref 以及source
config 部分可以方便的进行参数的传递(比如物化处理部分)
说明
dbt adapter扩展,对于宏处理是比较核心的,同时dbt 以来了multidispatch 模式很好的解决了宏方法选择的问题,dbt core 实现了大部分可共享的
宏,我们可以很方便的进行重写,当然开发中还是得遵循已给dbt 的项目实践(吐槽一些吧,实际上dbt 官方文档部分关于命名也不是很统一)
参考资料
core/dbt/clients/jinja.py
https://github.com/dbt-labs/dbt-database-adapter-scaffold
https://docs.getdbt.com/reference/dbt-jinja-functions
https://docs.getdbt.com/reference/dbt-jinja-functions/dispatch
https://docs.getdbt.com/guides/advanced/creating-new-materializations
https://docs.getdbt.com/guides/advanced/using-jinja
https://docs.getdbt.com/reference/dbt-jinja-functions/config
https://docs.getdbt.com/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter
https://docs.getdbt.com/guides/dbt-ecosystem/adapter-development/4-testing-a-new-adapter
https://docs.getdbt.com/guides/best-practices/how-we-style/0-how-we-style-our-dbt-projects
https://docs.getdbt.com/guides/best-practices/materializations/2-available-materializations
https://docs.getdbt.com/reference/dbt-classes
https://docs.getdbt.com/reference/dbt-jinja-functions/adapter
https://docs.getdbt.com/reference/dbt-jinja-functions/builtins