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.pswp.cn/news/903402.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903402.shtml
英文地址,請注明出處:http://en.pswp.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 框架提供的一項功能,用于根據…