首页 > 其他分享 >dbt 使用adapter.dispatch 进行macro 的覆盖处理

dbt 使用adapter.dispatch 进行macro 的覆盖处理

时间:2024-04-21 09:13:54浏览次数:41  
标签:__ name macro adapter dispatch dbt age

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

标签:__,name,macro,adapter,dispatch,dbt,age
From: https://www.cnblogs.com/rongfengliang/p/18105158

相关文章

  • 过程宏(proc-macro)
    优点增加代码的复用。性能。因为是在编译时生成,所以会得到更好的性能。没测试过,有待商榷过程宏的分类proc-macroproc-macro-deriveproc-macro-attribute构建过程宏的必要设置构建过程宏,要在cargo.toml里面设置一些参数,这是必须的。一般来说,过程宏必须是一个库,或者作为......
  • Microsoft Wi-Fi Direct Virtual Adapter 是 Windows 操作系统中的一个虚拟网络适配器
    MicrosoftWi-FiDirectVirtualAdapter是Windows操作系统中的一个虚拟网络适配器,用于支持Wi-FiDirect功能。Wi-FiDirect是一种无需基础设施的连接技术,允许支持Wi-Fi的设备之间直接进行点对点连接,无需通过传统的Wi-Fi路由器或接入点。作用:直连功能: MicrosoftWi-......
  • (译) 理解 Elixir 中的宏 Macro, 第六部分:原地代码生成
    ElixirMacros系列文章译文[1](译)UnderstandingElixirMacros,Part1Basics[2](译)UnderstandingElixirMacros,Part2-MacroTheory[3](译)UnderstandingElixirMacros,Part3-GettingintotheAST[4](译)UnderstandingElixirMacros,Part4-Div......
  • Android开发基础:AdapterView类视图控件的使用,Fragment,ViewPager2视图控件的使用
    目录一,Adapter1.什么是Adapter? 2.Android中的常用Adapter二,AdapterView1.AdapterView简介 2.AdapterView的子视图对象 三,ListView滑动列表形式四,GridView网格形式显示 五,Fragment和ViewPager2视图控件的使用1.什么是Fragment?2.ViewPager23.TabLayout+ViewPage......
  • (译) 理解 Elixir 中的宏 Macro, 第五部分:组装 AST
    ElixirMacros系列文章译文[1](译)UnderstandingElixirMacros,Part1Basics[2](译)UnderstandingElixirMacros,Part2-MacroTheory[3](译)UnderstandingElixirMacros,Part3-GettingintotheAST[4](译)UnderstandingElixirMacros,Part4-Div......
  • dbt debug macro 简单说明
    dbt支持debugmacro可以用来进行调试使用{%macromy_macro()%} {%setsomething_complex=my_complicated_macro()%} {{debug()}} {%endmacro%}参考实现实际上就是通过环境变量开启了一个debug上下文变量ifos.en......
  • Double dispatch和Visitor
    DoubledispatchandvisitorDispatch运行时多态,通过基类指针查找具体派生类的方法。Singledispatch单派发示例:Base*p=newDerived();p->Func();Doubledispatch派发、分发、分派,可以类比:总机-分机两次dispatch经常发生在使用vector保存同一类层级的指针......
  • Macros --The Magic Wand of Rust
    HelloandwelcometothewonderfulworldofRustmacros!Today,wewillembarkonanexcitingadventuretogethertoexplorethemagicalpowersofRustmacros.Areyouready?Bringyourcuriosityandlet'sgo!InRust,macrosarelikewizardsofprogr......
  • dbt statement macro 简单说明
    statementblocks实际上就是一个标准的jinja2macro调用包装,提供了方便的sql执行能力,因为需要进行查询结果的存储,dbt提供了一个store_result的macro,内部数据的处理基于了agate这个方便的python数据处理包为了查询使用提供了load_resultmacro以下只说明关于stateme......
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
    ElixirMacros系列文章译文[1](译)UnderstandingElixirMacros,Part1Basics[2](译)UnderstandingElixirMacros,Part2-MacroTheory[3](译)UnderstandingElixirMacros,Part3-GettingintotheAST[4](译)UnderstandingElixirMacros,Part4-Div......