首页 > 其他分享 >dbt dbt-audit-helper 包提供的一些方便macro

dbt dbt-audit-helper 包提供的一些方便macro

时间:2024-04-30 12:11:07浏览次数:24  
标签:audit compare helper relation query dbt select

dbt-audit-helper 从字面意思是dbt 的审计帮助工具,但是实际上我们也可以使用此工具做一些数据质量相关的东西

dbt-audit-helper 提供的macro

  • 比较数据输出
    包含了compare_relations,compare_queries,compare_row_counts
  • 比较列
    compare_column_values, cmpare_all_columns, compare_which_columns_differ, compare_relation_columns
  • 以及打印输出到日志&输出到自定义的测试中

参考使用

  • compare_queries
{% set old_query %}
  select
    id as order_id,
    amount,
    customer_id
  from old_database.old_schema.fct_orders
{% endset %}
 
{% set new_query %}
  select
    order_id,
    amount,
    customer_id
  from {{ ref('fct_orders') }}
{% endset %}
 
{{ audit_helper.compare_queries(
    a_query = old_query,
    b_query = new_query,
    primary_key = "order_id"
) }}
  • 输出结果
{% set old_query %}
    select * from old_database.old_schema.dim_product
    where is_latest
{% endset %}
 
{% set new_query %}
    select * from {{ ref('dim_product') }}
{% endset %}
 
{% set audit_query = audit_helper.compare_column_values(
    a_query = old_query,
    b_query = new_query,
    primary_key = "product_id",
    column_to_compare = "status"
) %}
 
{% set audit_results = run_query(audit_query) %}
 
{% if execute %}
{% do audit_results.print_table() %}
{% endif %}
  • 集成测试的
{% set old_relation = ref('stg_customers') %}
 
{% set dbt_relation = ref('customers') %}
 
{{ audit_helper.compare_relations(
    a_relation = old_relation,
    b_relation = dbt_relation,
    primary_key = "customer_id"
) }}
 
where percent_of_total < 100
  • 测试存储其他地方
{{config(schema='test_appv2')}}
 
{% set old_relation = ref('stg_customers') %}
 
{% set dbt_relation = ref('customers') %}
 
{{ audit_helper.compare_relations(
    a_relation = old_relation,
    b_relation = dbt_relation,
    primary_key = "customer_id"
)}}
where percent_of_total = 100

内部实现简单说明

只说明一个简单的compare_queries

  • compare_queries 内部实现

从处理上核心是对于sql 查询进行数据集的交叉并处理,通过分析包含的相同数据,之后提供结果信息的汇总

{% macro compare_queries(a_query, b_query, primary_key=None, summarize=true, limit=None) -%}
  {{ return(adapter.dispatch('compare_queries', 'audit_helper')(a_query, b_query, primary_key, summarize, limit)) }}
{%- endmacro %}
 
{% macro default__compare_queries(a_query, b_query, primary_key=None, summarize=true, limit=None) %}
 
with a as (
 
    {{ a_query }}
 
),
 
b as (
 
    {{ b_query }}
 
),
 
a_intersect_b as (
 
    select * from a
    {{ dbt.intersect() }}
    select * from b
 
),
 
a_except_b as (
 
    select * from a
    {{ dbt.except() }}
    select * from b
 
),
 
b_except_a as (
 
    select * from b
    {{ dbt.except() }}
    select * from a
 
),
 
all_records as (
 
    select
        *,
        true as in_a,
        true as in_b
    from a_intersect_b
 
    union all
 
    select
        *,
        true as in_a,
        false as in_b
    from a_except_b
 
    union all
 
    select
        *,
        false as in_a,
        true as in_b
    from b_except_a
 
),
 
{%- if summarize %}
 
summary_stats as (
 
    select
 
        in_a,
        in_b,
        count(*) as count
 
    from all_records
    group by 1, 2
 
),
 
final as (
 
    select
 
        *,
        round(100.0 * count / sum(count) over (), 2) as percent_of_total
 
    from summary_stats
    order by in_a desc, in_b desc
 
)
 
{%- else %}
 
final as (
 
    select * from all_records
    where not (in_a and in_b)
    order by {{ primary_key ~ ", " if primary_key is not none }} in_a desc, in_b desc
 
)
 
{%- endif %}
 
select * from final
{%- if limit and not summarize %}
limit {{ limit }}
{%- endif %}
   
{% endmacro %}

说明

dbt-audit-helper 是一个很不错的工具包,可以实现不错的模型check,提示数据质量以及做一些模式审计处理

参考资料

https://github.com/dbt-labs/dbt-audit-helper

标签:audit,compare,helper,relation,query,dbt,select
From: https://www.cnblogs.com/rongfengliang/p/18167802

相关文章

  • mysqlalchemy audit extension
    mysqlalchemyauditextensionhttps://sqlalchemy-declarative-extensions.readthedocs.io/en/stable/audit_tables.htmlfromsqlalchemyimportColumn,typesfromsqlalchemy.ormimportdeclarative_basefromsqlalchemy_declarative_extensionsimportdeclarative_......
  • dbt seed 处理简单说明
    dbt支持基于seed的快速建模处理(比较适合测试环境使用),我们只需要提供csv格式的文件,之后执行dbtseed就会创建对应的模型,之后我们就可以在dbt模型中引用了,以下简单说明下内部实现以及处理参考使用seed文件位置一般我们会在dbt项目的seed目录中放对应的seed文件,就是......
  • dbt 使用adapter.dispatch 进行macro 的覆盖处理
    adapter.dispatch是一个很方便的功能,可以实现方法的重载,对于不同环境可以使用不同的macro,以下是一个简单示例macro定义appdemo.sql注意在macros目录下,当然可以修改{%macrodemo(name,age)%}#注意此处我没有指定,namespace或者package,对于package开......
  • dbt docs block 简单说明
    dbtdocsblock是一个jinja2bblock的扩展,以下是一个简单的说明参考使用定义{%docstable_events%} Thistablecontainsclickstreameventsfromthemarketingwebsite. TheeventsinthistablearerecordedbySnowplowandpipedintothewa......
  • dbt doc 函数内部处理简单说明
    dbt提供了一个方便的doc函数,可以方便的使用类似ref模式进行docsblock定义的引用引用参考处理示例version:2models:-name:eventsdescription:'{{doc("table_events")}}'columns:-name:event_iddescription:......
  • dbt asset-paths 简单说明
    dbt的asset-paths是一个比较有意思的配置,可以用来增强我们的文档信息,比如存放一些图片在资源描述中引用资源生成的文档中可以进行显示,提示文档的信息参考配置dbt_project.ymlasset-paths:["assets"]使用假如assets包含一些描述图片信息models/ap......
  • dbt docs block 的一些技巧
    dbt的docs实际上自定义上还是很强大的,可以灵活的docsblock解析,同时docs定义也可以类似model那样进行引用,当然也包含了一些内部固定模式可以灵活的进行文档的自定义一些内置自定义玩法自定义文档路径类似dbt其他资源一样docs也是支持自定义的,否则默认会搜索model-path......
  • dbt flags 变量简单说明
    通过flags可以使用dbtcli的一些参数,比较常用的是对于增量物化处理的场景参考使用{%ifflags.FULL_REFRESH%}droptable...{%else%}--no-op{%endif%}说明支持的参数都在flags中可以看看,一些dbtadapter的实现都会使用到此变量参考......
  • audition 音频 声音 变慢 减速 增加响度 增大音量
    audition音频声音变慢减速增加响度增大音量我这里audition版本是cs6减速减速的那个算法选右边的选项,要不效果不好减速的那个算法选右边的选项,要不效果不好减速的那个算法选右边的选项,要不效果不好增大响度显示窗口完工~......
  • dbt-checkpoint 确保dbt 项目质量的pre-commit hooks 工具
    dbt-checkpoint实际上属于pre-commithooksplugin实现了不少hooks可以用来提升dbt项目的模型质量内部处理上实际是对于dbt的元数据进行解析,当然dbt-checkpoint也提供了不少其他扩展目前包含的hooks只大概说明下,详细的后边介绍下,目前涉及了,model,source,script,macro,modifier......