如何针对mart与staging子目录配置不同的dbt post-hook?
针对dbt的staging和mart目录配置不同Post-Hook的方法
当然可以,dbt本身就支持按目录层级配置专属的post-hook,刚好能满足你针对staging、mart目录分配不同权限的需求。
假设你的模型目录结构是这样的:
models/ model_repo/ staging/ -- 所有staging层模型文件 mart/ -- 所有mart层模型文件
你可以直接修改dbt_project.yml的models配置块,按子目录层级分别设置post-hook:
models: model_repo: +persist_docs: relation: true columns: true # 给staging子目录下的所有模型配置专属钩子 staging: +post-hook: - "GRANT SELECT ON {{ this }} TO GROUP staging_readers;" - "INSERT INTO {{ this }} values (NOW(),'staging-post-hook')" # 给mart子目录下的所有模型配置专属钩子 mart: +post-hook: - "GRANT SELECT ON {{ this }} TO GROUP mart_readers;" - "GRANT INSERT, UPDATE ON {{ this }} TO GROUP mart_editors;" - "INSERT INTO {{ this }} values (NOW(),'mart-post-hook')"
关键说明:
- dbt会按目录层级继承配置,子目录的post-hook会覆盖父目录的同名配置,如果不需要根目录的通用钩子,直接去掉即可
- 每个子目录下的所有模型都会自动执行对应的钩子语句,不用逐个模型修改
- 如果个别模型需要例外,还可以在模型文件开头单独配置
config(post-hook=...),会覆盖目录级的配置,比如:
{{ config( post-hook=[ "GRANT SELECT ON {{ this }} TO GROUP special_access_group;" ] ) }}
内容的提问来源于stack exchange,提问作者Djokovic
相关产品推荐
相关产品推荐

