SQLMesh增量模型实战指南:时间范围分区

引言

在数据工程领域,处理大规模数据集和高频率数据更新是一项挑战。SQLMesh作为一款强大的数据编排工具,提供了增量模型功能,帮助数据工程师高效地管理和更新数据。本文将详细介绍如何使用SQLMesh创建和管理基于时间范围的增量模型,涵盖从开发到生产的完整工作流程。
在这里插入图片描述

需求背景

假设你是一名数据工程师,负责处理一家直接面向客户销售软件的公司的数据。你每天需要处理数百万笔销售交易数据,并且需要将这些数据与产品使用数据进行关联,以更好地理解销售趋势和产品使用情况。

你面临以下挑战:

  • 如何处理延迟到达的数据?
  • 如何处理UTC和PST时间戳的转换?
  • 应该在什么时间运行这些任务?
  • 如何测试这些数据?
  • 如何高效地运行增量更新?
  • 如何处理边缘情况下的历史数据错误?
  • 如何编写单元测试?
  • 如何确保生产环境的数据完整性?

本文将通过一个完整的示例,展示如何使用SQLMesh解决这些问题。

开发工作流程

在SQLMesh中,典型的开发工作流程如下:

  1. sqlmesh plan dev: 创建一个新的开发环境
  2. sqlmesh fetchdf: 在开发环境中预览数据
  3. sqlmesh create_external_models: 自动生成原始源表的列级血缘文档
  4. sqlmesh plan: 将模型从开发环境推广到生产环境
  5. sqlmesh plan dev --forward-only: 在开发环境中进行代码更改,并仅处理新数据
  6. sqlmesh fetchdf: 在开发环境中预览更改后的数据
  7. sqlmesh create_test: 自动生成单元测试
  8. sqlmesh test: 运行单元测试
  9. sqlmesh plan: 将更改推广到生产环境

环境设置

我们将从一个现有的SQLMesh项目开始,该项目已经包含一些生产模型。假设我们已经有以下原始数据表:

原始产品使用数据

product_idcustomer_idlast_usage_dateusage_countfeature_utilization_scoreuser_segment
PROD-101CUST-0012024-10-25 23:45:00+001200.85enterprise
PROD-103CUST-0012024-10-27 12:30:00+00950.75enterprise

原始销售数据

transaction_idproduct_idcustomer_idtransaction_amounttransaction_timestamppayment_methodcurrency
TX-001PROD-101CUST-00199.992024-10-25 08:30:00+00credit_cardUSD
TX-002PROD-102CUST-002149.992024-10-25 09:45:00+00paypalUSD

模型配置

我们将创建一个增量模型demo.incrementals_demo,该模型按天分区,并处理销售数据和产品使用数据的关联。

MODEL(name="demo.incrementals_demo",kind=INCREMENTAL_BY_TIME_RANGE(time_column="transaction_date",lookback=2,  # 处理过去2天的延迟数据),start="2024-10-25",  # 不回填此日期之前的数据cron="@daily",  # 每天午夜UTC运行grain="transaction_id",  # 主键audits=[UNIQUE_VALUES(columns=("transaction_id",)),NOT_NULL(columns=("transaction_id",)),]
)WITH sales_data AS (SELECTtransaction_id,product_id,customer_id,transaction_amount,transaction_timestamp,payment_method,currencyFROM sqlmesh-public-demo.tcloud_raw_data.salesWHERE transaction_timestamp BETWEEN @start_dt AND @end_dt
),product_usage AS (SELECTproduct_id,customer_id,last_usage_date,usage_count,feature_utilization_score,user_segmentFROM sqlmesh-public-demo.tcloud_raw_data.product_usageWHERE last_usage_date BETWEEN DATE_SUB(@start_dt, INTERVAL 30 DAY) AND @end_dt
)SELECTs.transaction_id,s.product_id,s.customer_id,s.transaction_amount,DATE(s.transaction_timestamp) as transaction_date,DATETIME(s.transaction_timestamp, 'America/Los_Angeles') as transaction_timestamp_pst,s.payment_method,s.currency,p.last_usage_date,p.usage_count,p.feature_utilization_score,p.user_segment,CASEWHEN p.usage_count > 100 AND p.feature_utilization_score > 0.8 THEN 'Power User'WHEN p.usage_count > 50 THEN 'Regular User'WHEN p.usage_count IS NULL THEN 'New User'ELSE 'Light User'END as user_type,DATE_DIFF(s.transaction_timestamp, p.last_usage_date, DAY) as days_since_last_usage
FROM sales_data s
LEFT JOIN product_usage pON s.product_id = p.product_idAND s.customer_id = p.customer_id

创建模型

首次创建模型时,我们需要将其添加到开发环境中:

sqlmesh plan dev

按照提示输入回填的起始和结束日期,SQLMesh将自动创建物理表并执行初始数据加载。

跟踪列级血缘

SQLMesh可以自动生成外部模型文档,记录原始表的列信息和数据类型:

sqlmesh create_external_models

通过SQLMesh UI,可以直观地查看列级血缘关系。

进行更改

假设我们需要调整“Power User”的定义,将阈值从100次使用调整为50次使用。我们可以使用--forward-only标志,仅对新数据应用更改:

sqlmesh plan dev --forward-only

SQLMesh会生成一个预览表,允许我们在开发环境中测试更改,而不会影响历史数据。

添加单元测试

使用sqlmesh create_test命令可以自动生成单元测试配置文件:

sqlmesh create_test demo.incrementals_demo \--query sqlmesh-public-demo.tcloud_raw_data.product_usage "select * from sqlmesh-public-demo.tcloud_raw_data.product_usage where customer_id='CUST-001'" \--query sqlmesh-public-demo.tcloud_raw_data.sales "select * from sqlmesh-public-demo.tcloud_raw_data.sales where customer_id='CUST-001'" \--var start_dt '2024-10-25' \--var end_dt '2024-10-27'

运行单元测试:

sqlmesh test

推广到生产环境

确认开发环境中的更改无误后,可以将其推广到生产环境:

sqlmesh plan

SQLMesh会自动处理模式演进和数据回填,确保生产环境的数据完整性。

总结

通过本文的示例,我们展示了如何使用SQLMesh创建和管理基于时间范围的增量模型。SQLMesh的优势在于:

  • 自动处理数据分区,提高查询效率
  • 支持增量更新,减少资源消耗
  • 提供强大的测试和验证工具,确保数据质量
  • 简化开发到生产的流程,减少人为错误

希望这篇指南能帮助你更好地理解和使用SQLMesh,提升数据工程的效率和准确性。

注意:本文基于SQLMesh官方文档和示例编写,实际操作中请参考最新版本的SQLMesh文档。

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

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

相关文章

TCP vs UDP:核心区别、握手过程与应用场景(附对比图)

🌐 引言 在网络通信中,TCP(传输控制协议)和UDP(用户数据报协议)是两大核心传输层协议。它们各有优劣,适用于不同场景。本文将用图文对比实战示例,帮你彻底理解两者的区别&#xff0…

STM32F103C8T6信息

STM32F103C8T6 完整参数列表 一、核心参数 内核架构‌ ARM Cortex-M3 32位RISC处理器 最大主频:72 MHz(基于APB总线时钟) 运算性能:1.25 DMIPS/MHz(Dhrystone 2.1基准) 总线与存储‌ 总线宽度&#xff…

WPF-遵循MVVM框架创建图表的显示【保姆级】

文章速览 1、技术栈实现步骤1、创建WPF工程项目2、引入框架 Caliburn.Micro、数据可视化库ScottPlot.WPF3、创建文件夹,并创建相应的View & ViewModel4、创建启动类5、将启动类设置为启动项6、编写View7、编写VM8、将VM和View中的图表进行绑定9、备注 示例效果 …

kafka理论学习汇总

基础知识 基本简介 Kafka 是一个分布式流式处理平台,是一种分布式的,基于发布/订阅的消息系统。 Kafka特点: 1. 同时为发布和订阅提供高吞吐量 Kafka 的设计目标是以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 TB 级以…

【亚马逊云】AWS Wavelength 从理论讲解到实验演练

🪪 本文作者:许业宝 ✍️ 作者信息: 🌞 VSTECS 云解决方案架构师 | AWS Ambassador | 🪪 AWS Community Builder | 亚马逊云科技技能云博主 ⭐ 已获六项 AWS 认证 | CKA、CKS认证 | …

ORACLE DATAGUARD遇到GAP增量恢复方式修复RAC环境备机的实践

ORACLE DATAGUARD技术是一个常用的数据保护机制,在DATAGUARD运行过程中,遇到异常导致备机不同步,而主库的归档日志也被清理,此时出现GAP,无法同步;就需要人工处理;对于小型数据库重新全量同步数…

Java24 抗量子加密:后量子时代的安全基石

一、量子计算威胁与 Java 的应对 随着量子计算机的快速发展,传统加密算法面临前所未有的挑战。Shor 算法可在多项式时间内破解 RSA、ECC 等公钥加密体系,而 Grover 算法能将对称加密的暴力破解效率提升至平方根级别。据 NIST 预测,具备实用价…

day005

文章目录 1. Linux系统核心文件1.1 查看系统版本信息1.1.1 /etc/os-release1.1.2 hostnamectl 1.2 查看主机名并修改1.2.1 hostname1.2.2 cat /etc/hostname1.2.3 hostnamectl 1.3 查看Linux内核版本1.3.1 uname -r1.3.2 hostnamectl 1.4 查看网卡信息并修改1.4.1 nmtui 网络管…

常用财务分析指标列表

财务分析指标是企业财务管理和决策的重要工具,不同需求人群在各自的场景中运用这些指标来做出决策。企业管理者需要通过财务分析指标来评估企业经营状况、制定战略和决策;投资者利用这些指标来评估投资价值和风险;债权人通过财务分析指标来评…

删除非今天日期文件夹--批处理脚本

echo off setlocal enabledelayedexpansion REM ----- 配置部分 ----- set “target_dirK:\360downloads\Software” set “log_file%temp%\delete_folders.log” REM ----- 管理员权限检查 ----- NET FILE >NUL 2>&1 || ( echo 需要以管理员权限运行! …

QT创建软件登录界面(14)

文章目录 一、本章说明二、登录界面设计2.1 添加登录窗口2.2 设置登录窗口布局2.3 主函数中创建登录窗口对象2.4 登录窗口头文件与c文件2.5 源文件添加三、注意四、源码项目文件一、本章说明 注:本节为【基于STM的环境监测系统(节点+云服务器存储+QT界面设计)】项目第14篇文…

小天互连即时通讯音视频功能

小天互连即时通讯的音视频功能是核心功能及优势之一,小天互连即时通讯采用先进的音视频编解码技术,即使在网络环境不好的情况下,也能智能优化保证会议稳定进行。因此可以让远程开会也变得和面对面交流一样的便捷,极大地提升了沟通…

【LInux网络】数据链路层 - 深度理解以太网和APR协议

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…

【零基础入门】ASP.NET Core快速搭建第一个Web应用

一、为什么选择ASP.NET Core? 跨平台支持:可在Windows/macOS/Linux系统运行 高性能:比传统ASP.NET框架快10倍以上 开源生态:活跃的开发者社区和丰富的NuGet包 云原生支持:完美适配Docker和Kubernetes部署 二、开发…

AT2401C与RFX2401C问题处理资料

1、AT2401C 可以 PIN 对 PIN 替代 RFX2401C 吗? 答:AT2401C 可以 PIN 对 PIN 替换 RFX2401C;同时 CB2401 也可以 PIN 对 PIN 替换 RFX2401C;我们主要推 AT2401C 这款芯片,如果客户产 品需要过认证或者应用于音频产品建…

Redis-缓存应用 本地缓存与分布式缓存的深度解析

Redis缓存场景与策略:本地缓存与分布式缓存的深度解析 在当今高并发、低延迟的互联网架构中,缓存技术是优化系统性能的核心手段之一。Redis作为分布式缓存的标杆,与本地缓存共同构成了缓存体系的两大支柱。然而,两者的适用场景与…

LinuxAgent开源程序是一款智能运维助手,通过接入 DeepSeek API 实现对 Linux 终端的自然语言控制,帮助用户更高效地进行系统运维工作

一、软件介绍 文末提供程序和源码下载 LinuxAgent 开源程序是基于LLM大模型的Linux智能运维助手。通过接入DeepSeek API实现对Linux终端的自然语言控制,帮助用户更高效地进行系统运维工作。 二、版本特性对比 特性v1.4.1 1.4.1 版v2.0.3 2.0.3 版v2.0.4 2.0.4…

Shadertoy着色器移植到Three.js经验总结

Shadertoy是一个流行的在线平台,用于创建和分享WebGL片段着色器。里面有很多令人惊叹的画面,甚至3D场景。本人也移植了几个ShaderToy上的着色器。本文将详细介绍移植过程中需要注意的关键点。 1. 基本结构差异 想要移植ShaderToy的shader到three.js&am…

StarRocks SRCA 考试心得总结

文章目录 前言0 什么是StarRcoks?1. 关于 SRCA 考试2. 备考资料与学习方式2.1 官方文档与教程2.2 在线培训课程2.3 实战演练 3. 重点考试内容3.1 StarRocks 架构与原理3.2 数据导入与导出3.3 SQL 查询优化3.4 性能调优 4. 备考建议4.1 多做实操4.2 注重考试中的细节…

什么是 Spring Profiles 以及如何在 Spring Boot 中使用:配置与实践指南

在现代应用开发中,应用程序通常需要在不同环境(如开发、测试、生产)中运行,每个环境可能有不同的配置(如数据库、日志级别、消息队列)。Spring Profiles 是 Spring 框架提供的一项功能,用于根据…