Dbt增量策略模型实践指南

参考: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.mfbz.cn/a/889171.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

五款专业三维数据处理工具:GISBox、Cesiumlab、OSGBLab、灵易智模、倾斜伴侣深度解析

随着三维数据处理技术的广泛应用,尤其是在城市规划、地理信息系统(GIS)、工程监测等领域,处理倾斜摄影、三维建模以及大规模数据管理的需求日益增加。以下是五款我精心挑选的倾斜摄影和三维数据处理工具——GISBox、Cesiumlab、OS…

Kubernetes(K8s)的简介

一、Kubernetes的简介 1 应用部署方式演变 在部署应用程序的方式上,主要经历了三个阶段: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应…

C语言预处理详解(下)(31)

文章目录 前言一、命令行定义二、条件编译三、文件包含头文件被包含的方式嵌套文件包含 总结 前言 再介绍几点吧! 一、命令行定义 许多C 的编译器提供了一种能力,允许在命令行中定义符号。用于启动编译过程 当我们根据同一个源文件要编译出不同的一个程序…

太速科技-607-基于FMC的12收和12发的光纤子卡

基于FMC的12收和12发的光纤子卡 一、板卡概述 本卡是一个FPGA夹层卡(FMC)模块,可提供高达2个CXP模块接口,提供12路收,12路发的光纤通道。每个通道支持10Gbps,通过Aurora协议,可以组成X4&#xff0…

中间件介绍

可以把中间件想象成是在应用和系统之间搭建的一座桥梁,或者说是一个“翻译官”和“中转站”。它处在操作系统、网络和数据库之上,应用软件的下层,负责实现应用软件之间的互联互通,使得应用软件能够更方便、高效地进行数据交换和通…

2024最新CSDN Markdown编辑器语法教程

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

R语言中的plumber介绍

R语言中的plumber介绍 基本用法常用 API 方法1. GET 方法2. POST 方法3. 带路径参数的 GET 方法 使用 R 对数据进行操作处理 JSON 输入和输出运行 API 的其他选项其他功能 plumber 是个强大的 R 包,用于将 R 代码转换为 Web API,通过使用 plumber&#x…

cmake --build使用踩坑记录

根据 深入理解 CMake 的 cmake --build 命令_cmake build-CSDN博客等消息来源的说法&#xff0c; cmake --build <dir> 将在目录<dir>中产生结果文件。但是实测发现&#xff0c;这里有坑&#xff1a;如果目录<dir>中没有CMakeCache.txt等文件的话&#xff…

高性能缓存方案 —— Caffeine

一、简介 Caffeine是一个高性能的Java缓存库&#xff0c;它提供了本地缓存的功能。 Caffeine和Redis都是内存级别的缓存&#xff0c;为什么要使用在这两缓存作为二级缓存&#xff0c;它们两有什么区别呢? 虽然它们都是内存级别的缓存&#xff0c;但是Redis是需要单独部署的&…

RPA技术的定义与原理

RPA&#xff08;Robotic Process Automation&#xff09;即机器人流程自动化&#xff0c;是一种利用软件机器人或机器人工具来自动执行重复性、规则性和可预测性的业务流程的技术。以下是对RPA技术的详细介绍&#xff1a; 一、RPA技术的定义与原理 RPA技术通过模拟人工操作&a…

ORA-01031: insufficient privileges一次特殊的权限不足故障

在一个19C的数据库下,有多个PDB,我们使用公共用户c##xxx连接到不同的pdb的时候,发现其中一个pdb无法truncate表,其它pdb都是正常的,手工在pdb内赋予此公共用户dba和sysdba权限都不行: 最后发现是这个用户的default role默认角色的问题,简单介绍一下default role: 当给用户赋予…

【Redis入门到精通十】Redis哨兵

目录 哨兵&#xff08;Sentinel&#xff09; 1.哨兵的由来 2.哨兵的基本概念 3.基于docker安装配置Redis哨兵 4.哨兵选取主节点的原理 1.主观下线 2.客观下线 3.选举出哨兵的leader 4.leader挑选出合适的slave成为新的master 哨兵&#xff08;Sentinel&#xff09; Red…

掌握RocketMQ4.X消息中间件(一)-RocketMQ基本概念与系统架构

1 MQ介绍 MQ(Message Quene) : 翻译为 消息队列,别名为 消息中间件&#xff0c;通过典型的 生产者和消费者模型,生产者不断向消息队列中生产消息&#xff0c;消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的&#xff0c;而且只关心消息的发送和接收&#xff0c…

C语言 | Leetcode C语言题解之第454题四数相加II

题目&#xff1a; 题解&#xff1a; struct hashTable {int key;int val;UT_hash_handle hh; };int fourSumCount(int* A, int ASize, int* B, int BSize, int* C, int CSize, int* D, int DSize) {struct hashTable* hashtable NULL;for (int i 0; i < ASize; i) {for (…

Windows环境安装CentOS7

【注意】安装CentOS需要先安装Vmware虚拟机 【下载前准备】 一、下载CentOS 7镜像文件阿里云镜像开源&#xff0c;点击跳转 二、安装VMware&#xff08;17&#xff09;&#xff1a; a. 官网&#xff0c;点击跳转 b. 许可证&#xff1a;JU090-6039P-08409-8J0QH-2YR7F 安装V…

美国1米DEM地形瓦片数据免费分享(4)-新泽西州

一、简要介绍 新泽西州(英语:State of New Jersey)位于美国中大西洋地区&#xff0c;其命名源自位于英吉利海峡中的泽西岛&#xff0c;昵称为“花园州”。新泽西州亦为美国东部的一个州&#xff0c;北接纽约州&#xff0c;东面大西洋&#xff0c;南向特拉华州&#xff0c;西临…

图片批量转格式png转jpg,这几种转换方法看一遍就学会

在日常工作和学习中&#xff0c;我们经常需要处理各种图片格式&#xff0c;尤其是PNG和JPG这两种最为常见。PNG格式因其无损压缩和透明度支持而备受欢迎&#xff0c;但在某些场合下&#xff0c;JPG格式因其更高的压缩率和更广泛的兼容性更为适用。今天&#xff0c;就为大家介绍…

A CXL-Powered Database System: Opportunities and Challenges——论文阅读

ICDE 2024 Paper CXL论文阅读笔记整理 背景 Compute Express Link&#xff08;CXL&#xff09;是处理器和设备&#xff08;如内存缓冲区&#xff09;之间的开放式行业标准互连协议&#xff0c;基于CXL的内存架构如图1所示&#xff0c;拥有高带宽、低延迟以及对一致性和内存语…

深入理解 CSS 浮动(Float):详尽指南

“批判他人总是想的太简单 剖析自己总是想的太困难” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;目录1. 什么是 CSS 浮动&#xff1f;2. CSS 浮动的历史背景3. 基本用法float 属性值浮动元素的行为 4. 浮动对文档流的影响5. 清除浮动clear 属性清除浮动的技巧1. 使用…

SpringBoot 多元化配置(正则表达式,配置文件优先级)

1.配置绑定 所谓“配置绑定”就是把配置文件中的值与 JavaBean 中对应的属性进行绑定。通常&#xff0c;我们会把一些配置信息&#xff08;例如&#xff0c;数据库配置&#xff09;放在配置文件中&#xff0c;然后通过 Java 代码去读取该配置文件&#xff0c;并且把配置文件中…