dbt 一些默认可以扩展的macro
我只结合adapter 包中对于global macro 一些扩展进行说明,还会有其他地方支持扩展的macro(比如自定义schema 的)
系统adapter 提供的几个扩展
dbt/adapters/sql/impl.py 中
- 几个参考定义
以下这几个是留给了具体adapter 实现进行扩展(有一些是留给具体adapter 进行实现了,默认也包含了一些实现)
LIST_RELATIONS_MACRO_NAME = "list_relations_without_caching"
GET_COLUMNS_IN_RELATION_MACRO_NAME = "get_columns_in_relation"
LIST_SCHEMAS_MACRO_NAME = "list_schemas"
CHECK_SCHEMA_EXISTS_MACRO_NAME = "check_schema_exists"
CREATE_SCHEMA_MACRO_NAME = "create_schema"
DROP_SCHEMA_MACRO_NAME = "drop_schema"
RENAME_RELATION_MACRO_NAME = "rename_relation"
TRUNCATE_RELATION_MACRO_NAME = "truncate_relation"
DROP_RELATION_MACRO_NAME = "drop_relation"
ALTER_COLUMN_TYPE_MACRO_NAME = "alter_column_type"
VALIDATE_SQL_MACRO_NAME = "validate_sql"
- 可以覆盖的实现
这个我在schema 自定义部分也说明了,dbt adapter 包含了默认实现,但是可以自己覆盖重写
special_override_macros = [
"ref",
"source",
"config",
"generate_schema_name",
"generate_database_name",
"generate_alias_name",
]
说明
实际上以上部分在dbt adapter 开发中也有说明到(具体是必须实现的macro 部分)
如下 (required 说明是必须实现,但是global 没有提供默认实现)
alter_column_type
check_schema_exists
create_schema
drop_relation
drop_schema
get_columns_in_relation (required)
list_relations_without_caching (required)
list_schemas
rename_relation
truncate_relation
current_timestamp(required)
copy_grants
了解以上注意事项对于开发dbt adapter 会有不少帮助,但是并不是以上扩展必须使用macro 实现,对于一些不支持的我们可以结合python 代码去实现,比如dremio 对于schema 部分的处理就直接自己基于python 实现了,没有基于macro (因为dremio 不支持基于schema,基于macro 的sql 操作不方便)
参考资料
dbt/adapters/sql/impl.py
https://docs.getdbt.com/docs/build/custom-schemas
https://docs.getdbt.com/guides/adapter-creation?step=3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-05-04 基于s3的一种luarocks 私服多租户解决方案
2022-05-04 luarocks 私服搭建&简单使用
2022-05-04 luarocks 简单使用&openresty 离线集成说明
2020-05-04 grafana 开发参考资料
2020-05-04 pmm 2.x 与1.x 的差异
2019-05-04 cube.js 学习(十)cube 来自官方的学习网站
2019-05-04 Optimize Cube.js Performance with Pre-Aggregations