dbt 演变以及周边工具是越来月多了,而且有不少db 已经支持dbt 的集成玩法了,官方提供了一些相关开发文档,一些不是很清晰
对于我们实际需要开发的,就可以自己摸索,现在new sql 是越来越多了,但是并不是都能更好的支持dbt 内置的一些功能,

连接管理部分

这个部分官方有完整的信息,文档有提供,如下是dremio 的实现,具体参考https://docs.getdbt.com/guides/dbt-ecosystem/adapter-development/3-building-a-new-adapter

dbt  adapter 开发一些资料_参考资料

 

macro 部分

这个部分,官方已经提供了说明,有一些是必须实现的,如下,同时dbt 实现了一种方法重定向的能力(adapter.dispatch)同时对于宏方法的实现包含了
一些约定<new adapter>__ 可以重写默认的实现,default__ 作为默认实现(dbt core 部分实现的),对于需要以来明确包宏的可以通过adapter.dispatch明确定义,参考{{ return(adapter.dispatch('concat', 'dbt_utils')(fields)) }}

dbt  adapter 开发一些资料_github_02

 

官方core 提供的一些全局宏定义

dbt  adapter 开发一些资料_开发文档_03

 

一个特殊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-scaffoldhttps://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