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

posted on   荣锋亮  阅读(8)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用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 无关的构建器工具包

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示