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

posted on 2024-05-04 00:24  荣锋亮  阅读(5)  评论(0编辑  收藏  举报

导航