利用dbt_utils工具包生成代理键

欢迎来数据分析工程系列教程,本文我们学习使用dbt的实用程序包生成代理键。DBT是转换数据仓库中的数据的强大工具,同时还包括丰富的生态工具包,其中一个常用的工具是生成代理键,这对于数据建模和分析至关重要。

DBT Utils 实践应用指南 从总体上介绍了几类功能,本文重点介绍generate_surrogate_key宏如何生成代理键,并基于示例展示最佳实践指南。

主键和代理键

  • 主键

主键是表中行记录的标识符。主键能确保行不重复,唯一确定一行记录,同时能与其他表建立关系。

  • 代理键

当数据记录没有唯一的主键时,代理键就可以解决问题了。通常在分析层由主键派生产生的,确保每个记录都有唯一的标识符。

  • dbt_utils.generate_surrogate_key

dbt_utils包提供了一组宏函数来简化常用任务。其中generate_surrogate_key宏用于创建代理键。

生成代理键

  • 何时使用: 当表缺少唯一主键时,或合并来自多个数据源的数据时,需要代理键唯一标识记录。
  • 如何使用: generate_surrogate_key宏使用多个字段连接、基于hash算法(默认为MD5)生成唯一代理键。
{{ dbt_utils.generate_surrogate_key('field_a', 'field_b') }}
  • 处理空值

如果任何值为空,则整个连接的字符串可能返回为空。

解决方法: 使用coalesce函数替换空值。该函数用默认值替换空值,从而确保连接字符串保持唯一。

分隔符重要性: 为了确保唯一性,可以在字段之间添加分隔符,特别是在处理空值时能避免空值错误。

select
  {{ dbt_utils.generate_surrogate_key(
    coalesce(activity_date,'NO_ACTIVITY'), 
    '---', 
    user_id) 
  }} as primary_key, 

  activity_date,
  user_id,
  total_actions

from {{ ref('int__user_daily_activity') }}
  • 自定义哈希函数

虽然MD5是默认的散列函数,但也可以使用SHA,因为它具有加密优势。

如何切换: 在项目的macros目录下添加hash.sql宏覆盖dbt中的默认哈希宏。该文件应包括以下内容:

{% macro default__hash(field) -%}
  sha(cast({{ field }} as {{ api.Column.translate_type('string') }}))
{%- endmacro %}

最佳实践

  • 一致性: 确保在整个项目中使用相同的方法生成代理键。
  • 数据完整性: 定期在dbt中测试代理键,以确保数据的完整性和唯一性。
  • 避免陷阱: 小心空值,并确保使用分隔符来保持唯一性。

最后总结

代理键在数据建模中是非常有价值的,特别是在处理来自不同来源的数据时。使用dbt_utils包的generate_surrogate_key宏,让生成代理键变得简单、流程,让你能专注于分析,而不是准备数据。期待您的真诚反馈,更多内容请阅读数据分析工程专栏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值