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