dbt 使用adapter.dispatch 进行macro 的覆盖处理
adapter.dispatch 是一个很方便的功能,可以实现方法的重载,对于不同环境可以使用不同的macro ,以下是一个简单示例
macro 定义
- appdemo.sql
注意在macros 目录下,当然可以修改
{% macro demo(name,age) %}
# 注意此处我没有指定,namespace 或者package, 对于package 开发人员推荐明确指定下namespace 或者package
{{adapter.dispatch('app')(name,age) }}
{% endmacro %}
# 默认是以<adapterprefix>__ 开头的,同时default__ 属于一个默认实现,dbt 会按照实际的adapter 场景进行查找
{% macro default__app(name,age) %}
{{name ~ age }}
{% endmacro %}
{%macro dremio__app(name,age) %}
{{name ~ age ~ "mydbt" }}
{% endmacro %}}
使用
- mymodel.sql
models 目录
{% set info = demo('dalong',33) %}
SELECT * FROM {{ info }}
- 效果
因为我使用了dbt dremio 的adapter, 而且默认包含了实现就会使用dremio__app macro
说明
dbt adapter macro 提供的一些能力比较方便,可以让macro 实现不少动态能力,当然dbt 还支持自定义pacakge 的搜索实现灵活的包macro 处理
参考资料
https://docs.getdbt.com/reference/dbt-jinja-functions/dispatch
https://github.com/dbt-labs/dbt-utils
https://docs.getdbt.com/docs/build/packages
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2023-04-21 kconfig-hardened-check linux 内核安全选项检查工具
2023-04-21 osboxes 方便的主机镜像服务
2020-04-21 earthly 使用中碰到的一些问题说明
2020-04-21 查看docker的manifest
2020-04-21 earthly特性说明
2020-04-21 earthly 简单试用
2020-04-21 buildkit 并发高效缓存Dockerfile 无关的构建器工具包