首页 > 其他分享 >dbt this macro 处理简单说明

dbt this macro 处理简单说明

时间:2024-03-31 10:35:30浏览次数:23  
标签:------------------ macro self 简单 table model dbt schema

dbt this macro提供了一种方便的对于当前模型展现的方法,可以使用在增量模型以及pre&post hooks 中
this 实际是就类似ref('<the_current_model>') 是一个relation 包含了database,schema 以及模型标识

使用示例

一个增量处理的,基于this 可以方便的引用模型

{{ config(materialized='incremental') }}
 
select
    *,
    my_slow_function(my_column)
 
from raw_app_data.events
 
{% if is_incremental() %}
  where event_time > (select max(event_time) from {{ this }})
{% endif %}

内部实现

基于dbt 标准的装饰器 (ModelContext 类中的属性)

@contextproperty()
def this(self) -> Optional[RelationProxy]:
    """`this` makes available schema information about the currently
    executing model. It's is useful in any context in which you need to
    write code that references the current model, for example when defining
    a `sql_where` clause for an incremental model and for writing pre- and
    post-model hooks that operate on the model in some way. Developers have
    options for how to use `this`:
 
        |------------------|------------------|
        | dbt Model Syntax | Output           |
        |------------------|------------------|
        |     {{this}}     | "schema"."table" |
        |------------------|------------------|
        |  {{this.schema}} | schema           |
        |------------------|------------------|
        |  {{this.table}}  | table            |
        |------------------|------------------|
        |  {{this.name}}   | table            |
        |------------------|------------------|
 
    Here's an example of how to use `this` in `dbt_project.yml` to grant
    select rights on a table to a different db user.
 
    > example.yml:
 
        models:
          project-name:
            post-hook:
              - "grant select on {{ this }} to db_reader"
    """
    if self.model.resource_type == NodeType.Operation:
        return None
   # 结合方便的模型配置,通过db_wrapper 进行relation 的创建
    return self.db_wrapper.Relation.create_from(self.config, self.model)

说明

dbt this macro 实现了方便的对于当前模型的使用,可以提升模型的灵活性

参考资料

core/dbt/context/providers.py
https://docs.getdbt.com/reference/dbt-jinja-functions/this

标签:------------------,macro,self,简单,table,model,dbt,schema
From: https://www.cnblogs.com/rongfengliang/p/18096937

相关文章

  • 使用Python清理重复音乐文件:一个简单的解决方案
    在日常生活中,我们经常会从各种渠道获取音乐资源,例如购买、下载或者从朋友那里借来。然而,有时候我们可能会发现自己的音乐库里存在着大量的重复音乐文件,这不仅浪费了存储空间,而且在听歌的时候也会带来不便。针对这个问题,我编写了一个简单的Python程序来帮助清理重复的音乐文件。为......
  • 简单了解组策略
    实验介绍:组策略在部分意义上是控制用户可以或不能在计算机上做什么,例如:施行密码复杂性策略避免用户选择过于简单的密码。一:基于本地的组策略在dns1上win+r打开运行对话框,输入命令gpedit.msc这样就能打开本地组策略编辑器这里可以看到计算机设置和用户设置这里的配置只对本......
  • STM32中RFID模块(MFRC522)简单应用
    1.前言​ 此篇只是对RFID模块的简单概述以及应用,没有原理,对提供的店家提供的代码,进行注释,以及简单使用流程2.函数//功能:寻卡//参数说明:req_code[IN]:寻卡方式//0x52=寻感应区内所有符合14443A标准的卡//0x26=寻未进入休眠状......
  • linux---简单模拟实现shell(内置命令的解析)
    准备工作的知识我们要模拟实现一个命令行解释器的话,需要运用进程替换的知识。我们用我,如花,王婆,实习生的例子来说:这里的“我”就是程序员,如花是操作系统,王婆是命令行解释器bash,实习生则是子进程,我们用户想要和操作系统交流的话,就需要通过bash,而命令行解释器(王婆)不会自己去执行......
  • Linux下history命令简单原理
    前言在我们平时操作linux服务器时,有时候需要使用之前操作过的命令,这个时候history就派上用场了,它会记录你的历史操作命令。使用历史记录会持久化存储,默认位置是当前用户目录下的.bash_history文件。当Linux系统启动一个Shell时,Shell会从.bash_history文件中,读取......
  • upload-labs简单题解
    upload-labs详解1-19关通关全解(最全最详细一看就会)-CSDN博客Upload-labs1-21关靶场通关笔记(含代码审计)_upload-labs21关-CSDN博客搭建upload-labs环境参考文章渗透测试——upload-labs环境部署_upload-loadsphpstudy-CSDN博客文件上传浅谈-CSDN博客 Pass-01考点:J......
  • 验证码demo(简单实现)
    前言我们注意到我们登录网站的时候经常会用到网络验证码,今天我们就简单实现一个验证码的前后端交互问题,做一个小demo准备我们这里并不需要依靠原生的java来实现,而是只需要引入一个maven依赖,使用现成的封装好的即可,这是我使用的是hutool工具包网址:Hutool......
  • [NSSRound#19 Basic]bestkasscn的超级简单密码
    题目:fromCrypto.Util.numberimport*importgmpy2fromfunctoolsimportreducefromsecretimportflagp=getPrime(1024)i=0whileTrue:r=p*5+iifisPrime(r):i=0breakelse:i+=1whileTrue:q=p*......
  • AI写作智能免费一键生成:让写作变简单,输入标题,轻松装作
    首先,这篇文章是基于笔尖AI写作进行文章创作的,喜欢的宝子,也可以去体验下,解放双手,上班直接摸鱼~按照惯例,先介绍下这款笔尖AI写作,宝子也可以直接下滑跳过看正文~笔尖Ai写作面向写作领域的全能型Ai写作工具笔尖Ai写作助手包括:Ai论文、Ai开题报告、Ai公文写作、Ai商业计划书、文......
  • Spring Cloud中从0-1实现高效的API接口,快来简单有效的方式来构建API接口
    目录1.添加POM依赖2.构建目录结构3.构建文件4.实现API接口4.1.MyBatis4.1.1.控制层(Controller)4.1.2.服务接口层(ServiceInterface)4.1.3.服务层(ServiceImplementation)4.1.4.实体类(Entity)4.1.5.数据访问层(Mapper) 4.1.6.JUnit单元测试Controller层测......