首页 > 其他分享 >dbt macro 中获取relation 的几种方法

dbt macro 中获取relation 的几种方法

时间:2024-05-10 13:00:24浏览次数:16  
标签:name get macro Relation relation dbt

很多时候我们是希望在自己开发的macro中引用relation 这样可以获取实际模型在数据库中的信息,方便数据的写入,或者进行查询
实现动态能力,尤其在进行数据质量方便的处理时候,以下简单说明下一些可选的方法

参考方法

  • 直接使用api.Relation.create 创建新的
    如果知道一些信息(database,schema,name)就可以直接使用此方法直接创建relation了,参数的传递方法很多
  • 使用builtins.ref 方法
    传递模型名称就可以了,属于dbt 内置的很不错的选择
  • 通过this 处理
    this 属于一个小技巧,是在执行的时候处理的,所以如果我们在一个模型中调用一个macro macro 使用了this 也是可以获取到当前的模型的relation 的
  • 通过graph nodes 处理
    这个属于一个比较通用的玩法,不少三方包都使用了此方法
    参考处理
{% macro get_relation(relation_name) %}
    {% if execute %}
       ## 通过graph.nodes 结合一些jinja2的filter 获取database、schema、name 信息,结合api.Relation.create 创建新的
        {% set model_get_relation_node = graph.nodes.values() | selectattr('name', 'equalto', relation_name) | first %}
        {% set relation = api.Relation.create(
            database = model_get_relation_node.database,
            schema = model_get_relation_node.schema,
            identifier = model_get_relation_node.alias
        )
        %}
        {% do return(relation) %}
    {% else %}
        {% do return(api.Relation.create()) %}
    {% endif %}
{% endmacro %}

说明

以上是一些简单说明,对于dbt relation 比较重要,动态能力是最好的,不能硬编码,这样不利于后续的升级迭代,同时也缺少了可复用性,不符合dbt 的玩法

参考资料

https://docs.getdbt.com/reference/dbt-jinja-functions/builtins

标签:name,get,macro,Relation,relation,dbt
From: https://www.cnblogs.com/rongfengliang/p/18184051

相关文章

  • dbt plugin 系统简单说明
    dbt实际上提供了一个plugin架构(属于扩展与adapter的plugin机制是不一样的)只是目前官方缺少文档的说明以下是一些简单说明内部处理插件接口定义目前相对简单,只提供了核心是3个方法initialize,get_nodes,get_manifest_artifactsclassdbtPlugin:"""......
  • dbt on_configuration_change 简单说明
    dbton_configuration_change目前主要是在处理物化视图中,on_configuration_change包含了三类设置参考设置apply是默认参数,尝试进行更新存在的数据库对象continue允许继续运行,但是提供一个警告fail如果捕捉到变动就失败参考使用比如模型上的{{config(......
  • dbt show 命令处理简单说明
    dbtshow主要做以下事情内部处理编译基于sql的model,test,analysis,或者执行基于--inline的sql,当前不支持python模型在dw中执行查询在终端中预览结果备注:默认limit为5,但是可以自己调整通过--limit参数,同时dbtshow使用的一直是最新的数据以及编译模型,不会使用物化的......
  • dbt docs generate 简单说明
    dbtdocsgenerate核心是获取dbt项目的元数据信息(包含了project的)以及相关table的(dbt模型相关的),然后通过提供的解析页面进行显示目前是基于静态处理的(先生成,然后基于纯web的解析渲染)对于展示方法很多,可以基于dbt的docsserve命令也可以基于自己的静态webserver(nginx或......
  • dbt 自定义schema 简单说明
    dbt的schema我们是可以灵活进行自定义的,可以实现一个比较有意思的事情使用场景模型级别的schema自定义seed数据schema自定义不同env或者vars的schema自定义不同targetschema的自定义schema自定义核心是generate_schema_name这个macro,我们可以自己定义参考自......
  • dbt Relation 扩展简单说明
    dbt的Relation实际上就是包含关系数据库表,数据库,schema一些信息的描述,dbt官方提供了api.Relation.create等操作进行Relation的维护,当然系统的builtins也提供了一些基本的操作能力,内部使用上会使用dbtBaseRelation中的各类实现比如pg就自己扩展了一个,同时在自己的m......
  • dbt 自定义AdapterPlugin 中dependencies 简单说明
    结合dbt-redshift的对于dependencies部分的定义以及使用简单说明下参考代码Plugin:AdapterPlugin=AdapterPlugin(adapter=RedshiftAdapter,#type:ignorecredentials=RedshiftCredentials,include_path=redshift.PACKAGE_PATH,dep......
  • dbt dbt-audit-helper 包提供的一些方便macro
    dbt-audit-helper从字面意思是dbt的审计帮助工具,但是实际上我们也可以使用此工具做一些数据质量相关的东西dbt-audit-helper提供的macro比较数据输出包含了compare_relations,compare_queries,compare_row_counts比较列compare_column_values,cmpare_all_columns,com......
  • dbt seed 处理简单说明
    dbt支持基于seed的快速建模处理(比较适合测试环境使用),我们只需要提供csv格式的文件,之后执行dbtseed就会创建对应的模型,之后我们就可以在dbt模型中引用了,以下简单说明下内部实现以及处理参考使用seed文件位置一般我们会在dbt项目的seed目录中放对应的seed文件,就是......
  • error: possibly undefined macro: AC_CHECK_HEADERS
    Hi,Ihavebeengettingthebelowerrorafterrunning./bootstrap:autoreconf:running:/usr/bin/autoconf--force--warnings=allconfigure.ac:133:error:possiblyundefinedmacro:AC_CHECK_HEADERSIfthistokenandothersarelegitimate,pleaseusem4_pat......