dbt macro kwargs 参考的使用

从机制上实际上属于jinja2 的功能,可以实现灵活的扩展能力

jinja2 macro 提供的几个变量

  • varargs
    就类似python 的var 变量
  • kwargs
    是实现了keywords 参数的变量,可以获取传递的keyword 信息(实际上就是一个字典)
  • caller
    是在使用call tag 时候使用的,比如dbt 的statement macro 就使用了此方法

一个参考使用

比如自定义ref 我们可以自己传入一些参数

  • 定义
{% macro ref(model_name, v=None)%}
 
    {%- set relation = builtins.ref(model_name, v=v) -%}
 
    {{log('user my ref' ~ relation , info=True)}}
    # 此处通过kwargs 获取一些参数
    {{log("kwargs info mybranch  " ~ kwargs.get('mybranch'),info=True)}}
 
    {% if execute %}
        {% set my_source = model.config %}
        {%- set relation2 = api.Relation.create(schema=my_source.schema, identifier=my_source.table) -%}
        {% if my_source.branch %}
           {{ return (relation2 ~ ' AT ' ~ ' branch ' ~ my_source.branch) }}
        {% else %}
          {{ return (relation2) }}
        {% endif %}
    {% endif %}
 
    {{return (relation)}}
{% endmacro %}
  • 使用
{{
    config(
        branch='prod',
        schema = "dbtv4",
        table = "dalongdemoapp"
    )
}}
# 此处实现自定义参数的传递
select * from {{ref("nessiev3",mybranch='prod')}}

说明

使用好kwargs 特性,实际上就具有了类似config 的一些能力,对于提示dbt macro 的扩展能力还是很方便的,比如dbt 一些macro 就使用了此方法(dbt-adapter 的merge,dbt-utils 的not_null_proportion)

参考资料

dbt/include/global_project/macros/materializations/models/incremental/merge.sql
macros/generic_tests/not_null_proportion.sql
https://jinja.palletsprojects.com/en/3.1.x/templates/

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

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2023-06-10 nginx-clojure-0.6.0 集成nginx 1.25.0 构建的解决方法
2023-06-10 nginx-clojure 源码构建一些问题
2023-06-10 nginx-clojure 0.6.0 的一些新特性
2020-06-10 使用openresty+empty_gif 进行请求数据分析
2020-06-10 使用lua-resty-repl 调试openresty
2020-06-10 supervisord golang 实现试用
2020-06-10 Prisma 2.0 ga

导航

< 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
点击右上角即可分享
微信分享提示