首页 > 其他分享 >dbt fromyaml 上下文方法简单说明

dbt fromyaml 上下文方法简单说明

时间:2024-05-10 16:34:24浏览次数:33  
标签:CUSTOMER info dbt yaml dict 上下文 my fromyaml

fromyaml 上下文方法可以用来加载yaml 内容,属于一个工具类,比如automate-dv 就使用了不少方法

参考使用

{%- set info -%}
source_model: 
  raw_staging: "raw_customer"
derived_columns:
  SOURCE: "!1"
  LOAD_DATETIME: "CRM_DATA_INGESTION_TIME"
  EFFECTIVE_FROM: "BOOKING_DATE"
  START_DATE: "BOOKING_DATE"
  END_DATE: "TO_DATE('9999-12-31')"
hashed_columns:
  CUSTOMER_HK: "CUSTOMER_ID"
  NATION_HK: "NATION_ID"
  CUSTOMER_NATION_HK:
    - "CUSTOMER_ID"
    - "NATION_ID"
  CUSTOMER_HASHDIFF:
    is_hashdiff: true
    columns:
      - "CUSTOMER_NAME"
      - "CUSTOMER_ID"
      - "CUSTOMER_PHONE"
      - "CUSTOMER_DOB"
{%- endset -%}
 
{% set metadata_dict = fromyaml(info) %}
   
{{log(metadata_dict, info=True)}}

内部处理

  • 实际上就是包装了一个context 方法
@contextmember()
@staticmethod
def fromyaml(value: str, default: Any = None) -> Any:
    """The fromyaml context method can be used to deserialize a yaml string
    into a Python object primitive, eg. a `dict` or `list`.
 
    :param value: The yaml string to deserialize
    :param default: A default value to return if the `string` argument
        cannot be deserialized (optional)
 
    Usage:
 
        {% set my_yml_str -%}
        dogs:
         - good
         - bad
        {%- endset %}
        {% set my_dict = fromyaml(my_yml_str) %}
        {% do log(my_dict['dogs'], info=true) %}
        -- ["good", "bad"]
        {% do my_dict['dogs'].pop() }
        {% do log(my_dict['dogs'], info=true) %}
        -- ["good"]
    """
    try:
        return safe_load(value)
    except (AttributeError, ValueError, yaml.YAMLError):
        return default
  • safe_load 方法
def safe_load(contents) -> Optional[Dict[str, Any]]:
    return yaml.load(contents, Loader=SafeLoader)

参考资料

https://docs.getdbt.com/reference/dbt-jinja-functions/fromyaml
https://automate-dv.readthedocs.io/en/latest/

标签:CUSTOMER,info,dbt,yaml,dict,上下文,my,fromyaml
From: https://www.cnblogs.com/rongfengliang/p/18161256

相关文章

  • dbt macro 中获取relation 的几种方法
    很多时候我们是希望在自己开发的macro中引用relation这样可以获取实际模型在数据库中的信息,方便数据的写入,或者进行查询实现动态能力,尤其在进行数据质量方便的处理时候,以下简单说明下一些可选的方法参考方法直接使用api.Relation.create创建新的如果知道一些信息(database......
  • 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(......
  • 进程上下文详解
    由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁,你的程序反而不能支持更高的TPS。时间片多任务系统往往需要同时执行多道作业。作业数往往大于机器的CPU......
  • 上下文切换
    CPU上下文切换可分为进程上下文切换、线程上下文切换和中断上下文切换。怎么查看系统上下文切换情况vmstat5cs(contextswitch):每秒上下文切换次数。in(interrupt):每秒中断次数。r(RunningorRunnable):就绪队列长度,也就是正在运行和等待CPU的进程数。b(Blocked):处......
  • dbt show 命令处理简单说明
    dbtshow主要做以下事情内部处理编译基于sql的model,test,analysis,或者执行基于--inline的sql,当前不支持python模型在dw中执行查询在终端中预览结果备注:默认limit为5,但是可以自己调整通过--limit参数,同时dbtshow使用的一直是最新的数据以及编译模型,不会使用物化的......
  • db.create_all() 报错上下文?flask_sqlalchemy创建数据库找不到上下文?
    问题报错:RuntimeError:Workingoutsideofapplicationcontext.Thistypicallymeansthatyouattemptedtousefunctionalitythatneededthecurrentapplication.Tosolvethis,setupanapplicationcontextwithapp.app_context().Seethedocumentationform......
  • 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......