Dbt增量策略模型实践指南

news2024/10/11 19:23:13

参考:dbt Incremental Strategies | Indicium Engineering (medium.com)

本文讨论dbt的增量策略,介绍工作原理、以及各自优缺点。下篇讲解如何在模型中实现增量策略。

使用增量模型可以仅仅处理最近的数据,减少数据处理成本和时间。当然首先要明确我们真的需要使用增量策略吗?增量物化选项是dbt中高级强大的特性,并不需要每个模型都需要使用。使用增量物化模型需要增加一些配置以及一堆jinja条件代码。

增量策略场景

前面我们提及无需在每个模型中使用策略策略。很多场景中完全刷新策略(full refresh)可能更好,本节简要讨论这个议题。在DW中,通常模型缺省采用完全刷新策略。如果没有定义增量物化选项,则每次运行会重建表。首先会删除目标表,然后用整个源表中已转换数据创建并填充新的目标表。

你可能觉得这不是最优的转换过程,因为需要花大量时间和处理能力创建整个表,但它也有其优势之处。

首先,完全刷新策略在复杂性和处理成本/时间之间存在明显的权衡。它复杂度低,无需担心更合增量规则和配置,且能确保目标表可以接收到所有已转换数据,当然也需要花更多时间和资源重建整个表。如果表数据量不是很大,假设少于100万或更少,转换性能不是问题,也不用担心成本和时间,则坚持采用完全刷新策略没有问题。

回到低复杂性及生产率角度来看,使用完全刷新策略可以更快地把目标表提供给最终用户,从而尽快产生价值。这样最终用户可以自由地验证转换并给出反馈,要求更改或优化。

除此之外,在生产环境中有转换后的表可以让分析工程师更精确地了解数据情况,如:数据更新的方式和频率,以及每次运行中处理的数据量。这些都是模型优化步骤中需要考虑的重要问题。在优化步骤中,评估策略以减少转换的成本、处理量或处理时间。这可以通过多种方式实现,例如删除不生成值的列或更改模型物化方式等。下面总结下完全刷新策略的关键点:

分类内容
优势实现简单、更快产生价值、保证所有数据插入至目标表,不考虑数据库更新规则
劣势处理成本高、处理时间多
场景不担心成本和时间时(表数据量小、或转换规则简单),静态数据多于动态数据,历史数据更新频繁

如果你需要降低成本或加快转换速度,或者待处理表经常接收新数据,并且你对dbt比较熟悉,则应该尝试增量模型。

增量模型

增量物化选项目标是为减少处理时间与成本,仅转换并插入最近新增的数据。为了让Dbt知道那些是最新的数据,表中应该有以下类型的列:date, datetime, timestamp, 或 int64。增量模型使用源表中列和目标表过滤那些数据需要增量转换、插入、更新或删除。

特别需要说明的是,增量策略不会捕获对旧记录所做的修改。因此,一个好的做法是定期以完全刷新模式运行表以更新历史数据。

如果满足以下三个条件,模型表将以增量方式运行:

(1) 目标表已经存在于数据库中;

(2) dbt不是以完全刷新模式运行(没有使用——full-refresh 选项);

(3) 运行模型配置了materialized=‘incremental’

dbt提供了四种类型增量策略:

  • append
  • merge
  • delete+insert
  • insert_overwrite

策略的可用性取决于你配置的数据库适配器。dbt官方文档列出了常见适配器及其策略支持列表。

data platform adapterappendmergedelete+insertinsert_overwrite
dbt-postgres
dbt-redshift
dbt-bigquery
dbt-spark
dbt-databricks
dbt-snowflake
dbt-trino
dbt-fabric

dbt-postgres支持下面几种物理策略:

  • append (缺省没有定义unique_key)
  • merge
  • delete+insert (缺省当定义了unique_key)

追加策略(Append)

追加策略非常简单,它只获取选中的记录并将它们插入目标表中。它不能更新或删除记录,只能插入。只有当重复记录对你来说不是问题时,您才能使用此策略。Append不担心重复,它不会检查记录是否已经存在于目标表中,它只会插入新增的记录,不考虑是否重复。

分类内容
优势简单直接;无需扫描目标表、处理成本低;处理时间少;
劣势不更新、删除记录,仅仅插入;存在重复记录;
场景当你只是想插入新增记录,重复记录都不是问题;

合并策略(Merge)

合并策略解决重复记录问题,如果你指定唯一键(支撑组合列)能处理重复键问题。如果基于唯一键检查,目标记录已经存在目标表中,合并策略将更新记录,所以不会有重复记录。如果目标记录不存在则直接插入记录。

为了检查两个表的唯一键,合并策略需要扫描整个目标表,同时查询源表的部分记录。执行全表扫描会有较大的性能成本。如果合并策略不指定唯一键,则变成追加操作。

为了提升合并策略的性能,减少性能成本,目标表可以设置索引,避免执行目报表全表扫描。

分类内容
优势避免重复 、百万级以下数据量运行良好
劣势处理成本高,需要全表扫描(可以使用聚集索引提升性能)
场景表数据量相对小,避免重复记录,希望实现增量,且重复记录需要更新

删除插入

删除插入策略与合并策略类似,但采用插入新记录代替更新记录。首先删除已经存在的记录、然后插入新记录和已存在的记录;因为删除目标表中已经存在的记录,所以也不存在重复记录。

删除插入策略同样也需要全表扫描目标表进行比较唯一键,然后删除已经存在的记录并插入增量记录。采用删除而不是更新,这通常和目标数据支持的存储引擎相关,尤其是基于分区表的情况,采用直接删除分区效率更好。

插入覆盖

最后要介绍的是插入覆盖策略。主要解决全表扫描问题,该方案需要与分区一同工作。

分区表把表按照一定规则分成多个段。插入覆盖支持的分区类型包括:date, datetime, timestamp, int64,粒度可以为hour, day, month 或 year。如果按照int64类型分区需要指定范围,基于对应列值形成分区,所有分区中的记录采用基于相同的粒度值。

插入覆盖策略删除从目标表中删除已选择的分区,然后插入新增已转换的数据分区。因为采用分区表,避免了全表扫描。这是与合并策略的差异,极大地减少了处理数据的数量。

除了使用分区,过程与删除插入策略非常类似,但删除插入策略使用两个独立语句,删除和插入语句。插入覆盖使用合并语句。另外,插入覆盖策略复杂度高,如果分区字段配置不当会造成数据重复。

分类内容
优势低处理成本、低处理时间
劣势高度复杂、配置不当可能造成数据重复
场景数据量非常大,性能和处理数据已经造成问题

总结

现在你应该对何时使用增量和何时不使用增量有了更清晰的概念。此外,你知道每种策略是如何工作的,并且知道何时使用何种策略。在下一篇文章中,我将展示如何在实践中实现增量策略。期待您的真诚反馈,更多内容请阅读数据分析工程专栏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为何一个简单的线上商城 两年销售7000多万?

有一个销售百货的商城,他们的返现模式极为独特且富有吸引力。无论你消费多少,商城都会随机给你返还一定金额的钱,这个返还范围从10元到1000元不等,确实非常随意。 那么,这个商城采用如此随性的返现模式,业绩…

软件性能测试有哪些测试指标?性能测试第三方软件测评中心推荐

作为衡量软件质量的重要指标之一,软件的性能是一种非功能特性,不关心系统是否可以完成特定的功能,而只关心软件系统在运行时的速度是否足够快、是否消耗足够少的资源,因此软件性能测试至关重要。性能测试是指软件测试人员根据产品…

监控台操作台在哪些企业中应用比较广泛

在现代企业管理中,监控台操作台作为一种集成了视频监控、音频监听、数据分析及远程控制等多种功能的综合性操作平台,正逐渐成为众多企业不可或缺的重要设备。其广泛的应用领域不仅提升了企业的运营效率,还极大地增强了企业的安全性能。 一、安…

淘宝程序员没活硬整?在 Excel 和 VSCode 中购物!

大家好,我是程序员鱼皮,最近某宝网站的改进,属实是有点 “新” 了。 你敢相信这是一个购物网站么? 你可以在 Excel 表格中挑选商品进行购物,还原度极高,这两个图表更是点睛之笔。哪个天才想出来的&#xf…

C++Linux项目推荐-Web多人聊天+MySQL+Redis+Websocket+Json,可以写简历的C++项目

1 项目地址 项目配套视频简介:程序员老廖的个人空间-程序员老廖个人主页-哔哩哔哩视频 (bilibili.com) 1.1 项目原有功能 https://github.com/anarthal/servertech-chat.git 功能: 支持HTTP请求,掌握HTTP API json的请求相应 支持Webso…

如何使用ssm实现疫情居家办公OA系统

TOC 10902ssm疫情居家办公OA系统 系统概述 进过系统的分析后,就开始记性系统的设计,系统设计包含总体设计和详细设计。总体设计只是一个大体的设计,经过了总体设计,我们能够划分出系统的一些东西,例如文件、文档、数…

手机怎么玩荒野大镖客2?GameViewer远程助你手机随时随地畅玩大表哥2

手机免费玩电脑游戏,原来手机也能随时随地玩荒野大镖客2?如果你想你手机随时随地畅玩大表哥2,可以使用网易GameViewer远程来实现。 GameViewer远程4K蓝光144帧的高画质,可以让你在玩荒野大镖客2时,体验到开放大世界的所…

2024年11月软考准考证什么时候打印?

打印时间一览表: 北京:2024年11月5日至11月8日 上海:2024年11月6日10:00至11月8日16:00 天津:2024年11月5日9:00后 重庆:2024年11月4日9:00至10日9:05 广东:2024年11月5日9:00至8日17:00 深圳&#xf…

靠“代工+营销”支撑,又突击分红10亿元,毛戈平冲刺上市为哪般

撰稿|行星 来源|贝多财经 10月9日,毛戈平化妆品股份有限公司(下称“毛戈平”或“毛戈平公司”)在港交所更新招股书,继续推进港股上市进程。此前,毛戈平曾于4月8日向港交所递表,但因财务资料已过有效期而“…

selenium:Select类操作复选框和下拉框(7)

复选框/下拉框操作的Select类 主要使用selinium中的类Select来模拟选择网页上的下拉框或者复选框中的内容,使用前先导入 from selenium.webdriver.support.ui import Select 主要方法如下: 函数 功能 select_by_value 根据复选框/下拉框的值选择 se…

openfeign解释及其应用

文章目录 前言一、FeignClient详解注解使用范围注解属性说明value()name()contextId()qualifiers()configurationfallbackfallbackFactorypath 二、openfeign走网关gateway 前言 本文讨论的是springcloud分布式微服务架构下,如何让openfeign请求也走gateway网关 本…

浏览器服务端文件下载控制(安全阻止、文件浏览器打开还是下载行为控制)

文章目录 简介Chrome已阻止不安全内容下载PDF直接打开txt、xml、js文件被自动打开了而不是下载阿里OSS设置response header阿里OSS修改metadata 简介 随着浏览器的发展,有很多安全方面的限制,对我们的文件下载行为产生了很大的影响。 在JavaScript下载…

鸿蒙OS投票机制

(基于openharmony5.0) 投票机制 param get | grep ohos.boot.time 图 投票机制参数图 只有当所有的投票完成,开机动画才会退出,整理需要投票的系统应用(三方应用不参与投票)如下图所示: 以进程foundation为例&…

pytorh学习笔记——波士顿房价预测

机器学习的“hello world”:波士顿房价预测 波士顿房价预测的背景不用提了,简单了解一下数据集的结构。 波士顿房价的数据集,共有506组数据,每组数据共14项,前13项是影响房价的各种因素,比如&…

深入探究d3d9.dll文件:从d3d9.dll文件丢失的原因到解决方案

在使用电脑的过程中,你是否突然遇到过这样令人头疼的情况:当你试图打开某个游戏或者特定的图形软件时,屏幕上弹出一个恼人的错误提示框,上面赫然写着“d3d9.dll文件丢失”。这个看似小小的文件缺失,却可能像一道无法逾…

如何把视频变成自己的原创?提升视频原创度的7个技巧

在短视频平台发布作品时,时常因为原创问题,而被限流。如何在海量视频中脱颖而出,让自己的作品具有独特性和原创性,是每位创作者都需要思考的问题。本文将详细介绍如何通过一系列前期准备和后期处理技巧,将视频素材转化…

Windows11 24H2 纯净专业工作站版:无捆绑,安心使用!

Windows11系统工作站版集成Windows11系统专业版的所有安全优势和其他丰富特性,全面满足用户的使用需求。今天,系统之家小编给大家带来2024最新的Windows11 24H2纯净专业工作站版系统下载,这个系统版本不包含捆绑流氓软件,系统环境…

洛谷 P7076 [CSP-S2020] 动物园(位运算)

题目传送门 解题思路 可以先开一个 把所有动物的编号或起来。 然后对于每一个 和 ,我们可以判断一下这个饲料是否需要购买(对于原来有的动物)。 如果它原本是不需要购买的,我们可以开一个 来标记这一位。 最后,…

内网渗透-隧道代理转发

文章目录 前言环境搭建工具清单工具使用Frp命令执行实验 Lcx命令执行实验 reGeorg命令执行实验Proxifier ew(EarthWorm)正向代理命令执行实验 反向代理命令执行实验SocksCap netsh命令执行 pingtunnel命令执行实验 ngrok命令执行&&实验 cs命令执行实验 前言 本文章介绍…

如何安装NOI(全国青少年信息学奥林匹克竞赛) Linux环境:详细安装指南

在全国青少年信息学奥林匹克竞赛(NOI)中,NOI Linux环境是比赛指定的操作系统。该环境基于Ubuntu,专门为编程竞赛设计和优化,包含了C编程和算法竞赛所需的工具和编译器。为了让学生在比赛中熟悉这一环境,了解…