首页 > 其他分享 >dbt class 简单说明

dbt class 简单说明

时间:2023-07-31 22:23:46浏览次数:104  
标签:%- -% name format class source relation 简单 dbt

dbt class 可以用来创建数据仓库中的一些对象(比如关系,列)当需要通过高级模式进行模型以及宏构建的时候就比较有用
在不少开源同时也包括官方core 中都有使用到

主要包含的功能

  • Relation 对象创建
    参考(对于在宏中使用 api.Relation.create创建)
 
{% set relation = api.Relation.create(schema='snowplow', identifier='events') %}
  • Column 创建
{%- set string_column = api.Column('name', 'varchar', char_size=255) %}

dremio 中的使用

比如buildin 改写的时候

 {%- macro ref(model_name) -%}
  {%- set relation = builtins.ref(model_name) -%}
  {%- if execute -%}
    {%- set model = graph.nodes.values() | selectattr("name", "equalto", model_name) | list | first -%}
    {%- if model.config.materialized == 'reflection' -%}
      {% do exceptions.CompilationError("Reflections cannot be ref()erenced (" ~ relation ~ ")") %}
    {%- endif -%}
    {%- set format = model.config.format if
      model.config.materialized not in ['view', 'reflection']
      and model.config.format is defined
      else none -%}
    {%- set format_clause = format_clause_from_node(model.config) if format is not none else none -%}
    {%- set relation2 = api.Relation.create(database=relation.database, schema=relation.schema, identifier=relation.identifier, format=format, format_clause=format_clause) -%}
    {{ return (relation2) }}
  {%- else -%}
    {{ return (relation) }}
  {%- endif -%}
{%- endmacro -%}
 
{%- macro source(source_name, table_name) -%}
  {%- set relation = builtins.source(source_name, table_name) -%}
  {%- if execute -%}
    {%- set source = graph.sources.values() | selectattr("source_name", "equalto", source_name) | selectattr("name", "equalto", table_name) | list | first -%}
    {%- set format = source.external.format if
      source.external is defined
      and source.external.format is defined
      else none -%}
    {%- set format_clause = format_clause_from_node(source.external) if format is not none else none -%}
    {%- set relation2 = api.Relation.create(database=relation.database, schema=relation.schema, identifier=relation.identifier, format=format, format_clause=format_clause) -%}
    {{ return (relation2) }}
  {%- else -%}
    {{ return (relation) }}
  {%- endif -%}
{%- endmacro -%}

说明

dbt 还提供了其他一些比较有用的宏,可以进行一些内置功能的改写(可以用来判断对于dbt 兼容的支持)
比如builtins 包含了ref,source,同时adapter 支持了不少功能(具体参考链接),dispatch 使用的地方也
比较多可以进行方便的重定向支持(就是将方法的调用使用其他模块提供的方法进行替换),对于开放三
方模式以及一些高级功能开发的时候比较有用

参考资料

https://docs.getdbt.com/reference/dbt-classes#relation
https://github.com/dremio/dbt-dremio
https://docs.getdbt.com/reference/dbt-jinja-functions/adapter
https://docs.getdbt.com/reference/dbt-jinja-functions/dispatch
https://docs.getdbt.com/reference/dbt-jinja-functions/builtins
https://docs.getdbt.com/reference/dbt-jinja-functions/config

标签:%-,-%,name,format,class,source,relation,简单,dbt
From: https://www.cnblogs.com/rongfengliang/p/17594792.html

相关文章

  • 【补充】isinstance()issubclass()
    【补充】isinstance()/issubclass()isinstance()函数和issubclass()函数是Python中的两个内置函数用于判断对象与类之间的关系。【1】isinstance()isinstance()函数用于检查一个对象是否是一个类的实例。它接受两个参数第一个参数是待检查的对象第二个参数是类或类型。......
  • 剑指 Offer 30. 包含min函数的栈(简单)
    题目:classMinStack{public:stack<int>st1;//维护原栈stack<int>st2;//维护最小值的栈/**initializeyourdatastructurehere.*/MinStack(){}voidpush(intx){st1.push(x);......
  • 搭建一个简单的HTTP API Service( python+flask )
    1背景学习HTTP接口相关知识,为了方便,在本地搭建了一个可用的API环境用于学习和测试2环境windows10python3.10Flask2.3.2主要接口逻辑测试post方法get方法服务端请求日志代码提交至giteehttps://gitee.com/hahawa2/simple_api_demo......
  • 第2章 变量和简单数据类型
    2.1运行hello_world.py时发生的情况print是一个函数,直接打印内容到控制台2.2变量message代表变量,而python始终使用整个变量的最新值2.2.1变量的命名和使用1.变量名只能包括字母,数字,下划线2.变量名不能包含空格,下划线代表空格进行分隔单词3.变量名不能和关键字重名4......
  • 简简单单学docker在群晖nas中构建docker版aspnetcore网站
    琢磨了n天,掉了好多头发,终于可以了,踩坑无数!终于行了!先来了解下:1.net运行时runtime和sdk,简单来说就是sdk开发用的,runtime是用来运行的,所以构建dockerfile只用runtime就够了!2.docker运行不需要打包操作系统如ubuntu等进入包内!特殊需要的可以!这个问题都必须了解!正式开始1.用vs202......
  • 程序员推荐的最简单有效的科学健脑…
    1、勤练脑力可使记忆力增强,感兴趣的程序猿可以来试试勤练脑力可使记忆力增强,勤做有氧运动可使大脑灰质增加,勤于思考可使理智与情感有机互补。这些措施看上去很美,但美中不足的是,它们对大脑的训练都不够彻底,这也是越来越多此类研究的通病。记忆训练对大脑的好处当然比看真人秀什么......
  • 用SQL实现数据稽核的简单案例
    假设有一个电商平台的数据库,其中包含订单表orders和订单明细表order_items,需要对这两张表进行数据稽核,确保订单总金额(total_amount)与订单明细表中的订单金额之和一致。创建订单表orders:CREATETABLEorders(order_idINTPRIMARYKEY,customer_idINT,order_da......
  • 简单配置Sql专家云
    一、实例配置1.添加实例   点击全面诊断实例配置,右上角点击添加。2.填写实例信息  根据下图填写对应的信息,连接测试成功后点击保存。3.添加完成  4.修改实例   找到对应的实例,点击下图蓝色框修改即可。 5.停止实例  找到对应的实例,点击下图红色框......
  • JDK 版本异常导致 flutter doctor --android-licenses 出错 (class file version 61.0
    flutterdoctor--android-licensesError:AJNIerrorhasoccurred,pleasecheckyourinstallationandtryagainExceptioninthread"main"java.lang.UnsupportedClassVersionError:com/android/sdklib/tool/sdkmanager/SdkManagerClihasbeencompil......
  • Caused by: java.lang.ClassNotFoundException: org.springframework.dao.support.Dao
    ​ 这个错误通常发生在缺少相关的依赖库或配置不正确时。根据错误信息,可以看出缺少了org.springframework.dao.support.DaoSupport类的定义。org.springframework.dao.support.DaoSupport是SpringFramework中的一个类,提供了对数据访问对象(DAO)的支持。这个错误通常发生在没有正......