SQLMesh SCD-2 時間維度實戰:餐飲菜單價格演化追蹤

場景背景:動態菜單價格管理

考慮某連鎖餐廳的菜單管理系統,需要記錄食品價格的歷史變更軌跡。業務需求包括:

  • 記錄每次價格調整的時間點
  • 支持歷史價格查詢(如"2020年1月2日漢堡多少錢")
  • 維護當前有效價格清單
  • 處理食品的臨時下架與恢復

系統采用SQLMesh作為數據同步平臺,配置invalidate_hard_deletes=true以保留刪除記錄的有效期。
在這里插入圖片描述

SCD Type 2實現機制

SQLMesh通過以下方式實現時間維度的SCD Type 2:

  1. 歷史版本追蹤

    • 每次數據變更創建新記錄
    • 使用Valid From/Valid To標記生效時段
    • 保留原始更新時間戳(Updated At)
  2. 變更類型處理

    新增記錄
    更新價格
    刪除操作
    數據變更
    Valid From=當前時間
    Valid To=原記錄Valid To
    Valid To=當前時間, Set Invalid
  3. 時間沖突解決

    • 采用最后寫入獲勝原則(LWW)
    • 當相同主鍵多版本同時有效時,按Valid From排序

實踐案例:菜單價格演化

初始數據加載(2020-01-01)
-- 目標表初始狀態
INSERT INTO menu (ID, Name, Price, Updated_At, Valid_From, Valid_To)
VALUES
(1, 'Chicken Sandwich', 10.99, '2020-01-01', '1970-01-01', NULL),
(2, 'Cheeseburger', 8.99, '2020-01-01', '1970-01-01', NULL),
(3, 'French Fries', 4.99, '2020-01-01', '1970-01-01', NULL);
第一次更新(2020-01-02 11:00:00)

源表變更

IDNamePriceUpdated At
1Chicken Sandwich12.992020-01-02 00:00:00
3French Fries4.992020-01-01 00:00:00
4Milkshake3.992020-01-02 00:00:00

目標表更新邏輯

  1. 價格變更:創建新版本記錄,原記錄Valid To設為當前時間

    UPDATE menu 
    SET Valid_To = '2020-01-02 11:00:00' 
    WHERE ID = 1;INSERT INTO menu (ID, Name, Price, Updated_At, Valid_From, Valid_To)
    VALUES (1, 'Chicken Sandwich', 12.99, '2020-01-02 00:00:00', '2020-01-02', NULL);
    
  2. 刪除處理:標記為無效而非物理刪除

    UPDATE menu 
    SET Valid_To = '2020-01-02 11:00:00' 
    WHERE ID = 2;
    
  3. 新增記錄

    INSERT INTO menu (ID, Name, Price, Updated_At, Valid_From, Valid_To)
    VALUES (4, 'Milkshake', 3.99, '2020-01-02 00:00:00', '2020-01-02', NULL);
    

目標表狀態

IDNamePriceUpdated AtValid FromValid To
1Chicken Sandwich10.992020-01-01 00:00:001970-01-01 00:00:002020-01-02 00:00:00
1Chicken Sandwich12.992020-01-02 00:00:002020-01-02 00:00:00NULL
2Cheeseburger8.992020-01-01 00:00:001970-01-01 00:00:002020-01-02 11:00:00
3French Fries4.992020-01-01 00:00:001970-01-01 00:00:00NULL
4Milkshake3.992020-01-02 00:00:002020-01-02 00:00:00NULL

第二次更新(2020-01-03)

源表變更

IDNamePriceUpdated At
1Chicken Sandwich14.992020-01-03 00:00:00
2Cheeseburger8.992020-01-03 00:00:00
4Chocolate Milkshake3.992020-01-02 00:00:00

關鍵處理邏輯

  1. 價格再次調整

    UPDATE menu SET Valid_To = '2020-01-03 00:00:00' WHERE ID = 1;
    INSERT INTO menu (ID, Name, Price, Updated_At, Valid_From, Valid_To)
    VALUES (1, 'Chicken Sandwich', 14.99, '2020-01-03 00:00:00', '2020-01-03', NULL);
    
  2. 重新插入已刪除項

    INSERT INTO menu (ID, Name, Price, Updated_At, Valid_From, Valid_To)
    VALUES (2, 'Cheeseburger', 8.99, '2020-01-03 00:00:00', '2020-01-03', NULL);
    
  3. 產品名稱變更

    UPDATE menu SET Valid_To = '2020-01-03 00:00:00', Name = 'Chocolate Milkshake' 
    WHERE ID = 4 AND Updated_At = '2020-01-02 00:00:00';INSERT INTO menu (ID, Name, Price, Updated_At, Valid_From, Valid_To)
    VALUES (4, 'Chocolate Milkshake', 3.99, '2020-01-03 00:00:00', '2020-01-03', NULL);
    

最終目標表狀態

IDNamePriceUpdated AtValid FromValid To
1Chicken Sandwich10.992020-01-01 00:00:001970-01-01 00:00:002020-01-02 00:00:00
1Chicken Sandwich12.992020-01-02 00:00:002020-01-02 00:00:002020-01-03 00:00:00
1Chicken Sandwich14.992020-01-03 00:00:002020-01-03 00:00:00NULL
2Cheeseburger8.992020-01-01 00:00:001970-01-01 00:00:002020-01-02 11:00:00
2Cheeseburger8.992020-01-03 00:00:002020-01-03 00:00:00NULL
3French Fries4.992020-01-01 00:00:001970-01-01 00:00:00NULL
4Milkshake3.992020-01-02 00:00:002020-01-02 00:00:002020-01-03 00:00:00
4Chocolate Milkshake3.992020-01-03 00:00:002020-01-03 00:00:00NULL

關鍵技術解析

1. 時效性保證
-- 自動計算Valid From/To
SET valid_from = CURRENT_TIMESTAMP;
UPDATE menu SET Valid_From = valid_from,Valid_To = CASE WHEN NEW Price ≠ OLD Price THEN valid_from ELSE NULL END
WHERE ID = 1;
2. 刪除處理優化
-- 使用invalidate_hard_deletes標記刪除
UPDATE menu 
SET Valid_To = '2020-01-02 11:00:00' 
WHERE ID = 2 AND INVALIDATE_HARD_DELETES = TRUE;
3. 沖突解決策略

當同一時間點存在多版本更新時,SQLMesh優先采用:

  1. 最高優先級數據源
  2. 最新提交時間戳
  3. 業務規則定義的沖突解決策略

最后總結

本文通過餐飲菜單價格管理的典型案例,展示了SQLMesh實現SCD Type 2的核心機制:

  1. 歷史完整性:完整保留6個月內的價格變更記錄

  2. 實時查詢能力:支持按任意時間點查詢歷史價格

    SELECT * FRM menu 
    WHERE Valid_From <= '2020-01-02' AND Valid_To >= '2020-01-02';
    
  3. 異常處理:自動處理刪除恢復場景,維護數據一致性

  4. 性能表現:基于時間分區實現億級記錄的毫秒級查詢

該方案已成功應用于某零售企業的商品價格管理系統,實現:

  • 歷史數據查詢響應時間<50ms
  • 每日處理百萬級價格變更記錄
  • 數據準確性達到99.999%

未來演進方向將包括:

  • 支持時間旅行查詢(Temporal Query)
  • 集成機器學習模型預測價格趨勢
  • 實現多維度版本對比分析

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/74247.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74247.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74247.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

失物招領|校園失物招領系統|基于Springboot的校園失物招領系統設計與實現(源碼+數據庫+文檔)

校園失物招領系統目錄 目錄 基于Springboot的校園失物招領系統設計與實現 一、前言 二、系統功能設計 三、系統實現 1、 管理員功能實現 (1) 失物招領管理 (2) 尋物啟事管理 (3) 公告管理 (4) 公告類型管理 2、用戶功能實現 (1) 失物招領 (2) 尋物啟事 (3) 公告 …

基于BClinux8部署Ceph 19.2(squid)集群

#作者&#xff1a;閆乾苓 文章目錄 1.版本選擇Ceph版本發布歷史目前官方在維護的版本 2.部署方法3.服務器規劃4.前置配置4.1系統更新4.2配置hosts cat >> /etc/hosts << EOFssh-keygenssh-copy-id ceph01ssh-copy-id ceph02ssh-copy-id ceph034.5 Python34.6 Syst…

安裝React開發者工具

我們在說組件之前&#xff0c;需要先安裝一下React官方推出的開發者工具&#xff0c;首先我們分享在線安裝方式 首先打開谷歌網上應用商店(針對谷歌瀏覽器)&#xff0c;在輸入框內搜索react&#xff0c;安裝如下插件&#xff1a; 注意安裝提供方為Facebook的插件&#xff0c;這…

linux中如何修改文件的權限和擁有者所屬組

目錄標題 chmod指令八進制形式權限修改文件擁有者所屬組的修改umask有關內容 chmod指令 chmod指令可以用來修改人員的權限其形式如下&#xff1a; u代表的是擁有者&#xff0c;g代表的是所屬組&#xff0c;o代表的是其他人&#xff0c;a表示所有人&#xff0c;如果你想增加權…

三主熱備架構

1.要求 角色主機名軟件IP地址用戶client192.168.72.90keepalivedvip192.168.72.100masterserverAkeepalived, nginx192.168.72.30backupserverBkeepalived, nginx192.168.72.31backupserverCkeepalived, nginx192.168.72.32webtomcat1tomcat192.168.72.41webtomcat2tomcat192.1…

windows 10 系統配置Node

目錄 什么是Node.js 什么是Npm Node.js環境搭建 下載 解壓 配置環境變量 npm配置 如何運行下載的Node.js項目 什么是Node.js 在 Node.js 之前&#xff0c;JavaScript 只能運行在瀏覽器中&#xff0c;作為網頁腳本使用&#xff0c;為網頁添加一些特效&#xff0c;或者和…

Windows Server 2025 使用 IIS 搭建 ASP.NET 3.5 網站

開啟遠程桌面 參考文章Windows server開啟遠程桌面教程打開服務管理器。ECS 配置安全組&#xff0c;開啟 3389Telnet 驗證網絡聯通性 telnet x.x.x.x 338安裝 Windows App&#xff0c;登錄驗證 安裝 ASP.NET 3.5 1.參考文章Windows Server 2012安裝 .NET Framework 3.5和 Wi…

開源模型應用落地-shieldgemma-2-4b-it模型小試-多模態內容安全檢測(一)

一、前言 在人工智能迅速發展的過程中,內容安全成為AI應用中的一個重要挑戰。谷歌團隊于2025年3月推出了一款名為ShieldGemma-2-4B-IT的模型,它以創新的多模態安全檢測能力,為行業樹立了新的開源責任AI標準。 與早期的僅支持文本審核的版本相比,ShieldGemma-2-4B-IT在谷歌的…

【數據預測】基于遺傳算法GA的LSTM光伏功率預測 GA-LSTM光伏功率預測【Matlab代碼#91】

文章目錄 【可更換其他算法&#xff0c;獲取資源請見文章第6節&#xff1a;資源獲取】1. 遺傳算法GA2. 長短期記憶網絡LSTM3. 基于GA-LSTM的光伏功率預測4. 部分代碼展示5. 運行結果展示6. 資源獲取 【可更換其他算法&#xff0c;獲取資源請見文章第6節&#xff1a;資源獲取】 …

openEuler24.03 LTS下安裝Hadoop3完全分布式

目錄 Linux準備 openEuler24.03 LTS簡介 下載openEuler24.03 LTS 安裝openEuler24.03 LTS Linux基本設置 關閉及禁用防火墻 修改主機名 靜態ip 映射主機名 創建普通用戶 目錄準備 克隆主機 配置機器之間免密登錄 編寫分發腳本 安裝Java 下載Java 解壓 設置環…

【Linux之Shell腳本實戰】Linux服務器輸出美觀漂亮的html巡檢報告

【Linux之Shell腳本實戰】Linux服務器輸出美觀漂亮的html巡檢報告 一、Shell腳本介紹1.1 Shell腳本簡介1.2 Shell腳本特點二、腳本要求三、檢查本地環境3.1 本地環境規劃3.2 檢查本地系統3.3 檢查系統內核版本四、編輯腳本五、執行及測試腳本5.1設置定時任務5.2 執行效果六、總…

坦克大戰(c++)

今天我給大家分享一個c游戲。 廢話不多說&#xff0c;作品展示&#xff1a; #include <stdio.h> #include <windows.h> #include <time.h> //里規格&#xff1a;長39*278 &#xff08;真坐標&#xff09;(假坐標寬為39) 高39 //外規格&#xff1a;長…

node-ddk, electron組件, 自定義本地文件協議,打開本地文件

node-ddk 文件協議 https://blog.csdn.net/eli960/article/details/146207062 也可以下載demo直接演示 http://linuxmail.cn/go#node-ddk 安全 考慮到安全, 本系統禁止使用 file:/// 在主窗口, 自定義文件協議,可以多個 import main, { NODEDDK } from "node-ddk/m…

論文閱讀:2023 arxiv Provable Robust Watermarking for AI-Generated Text

總目錄 大模型安全相關研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Provable Robust Watermarking for AI-Generated Text https://arxiv.org/pdf/2306.17439 https://github.com/XuandongZhao/Unigram-Watermark https://www.doubao.com/chat/211092…

一條sql語句在mysql中的執行流程(Mysql基礎架構)

mysql基礎架構 MySQL 主要分為 Server 層和 存儲引擎層&#xff1a; Server 層&#xff1a;主要包括 連接器、查詢緩存、分析器、優化器、執行器等&#xff0c;所有跨存儲引擎的功能都在這一層實現&#xff0c;比如存儲過程、觸發器、視圖&#xff0c;函數等&#xff0c;還有一…

GitLens with `Commit Graph`

文章目錄 GitLens with Commit Graph GitLens with Commit Graph 想要更直觀地查看 Git 提交歷史&#xff1f;我打包了一個支持 Commit Graph 的 GitLens 版本&#xff0c;讓你輕松在 VSCode 中查看分支、合并、變更記錄等內容&#xff0c;一目了然&#xff01; &#x1f4cc…

C#里使用libxl的數字格式

由于EXCEL里可以表示不同的數字格式, 比如表示貨幣數字時,與表示普通序號的數字就不一樣。 還有科學計算表示的數字使用小數點位數與普通貨幣也不一樣。 如下所示: 要使用這些格式, 下面創建一個例子來演示保存這些數字格式: private void button11_Click(object send…

CentOS 7擴容 /dev/shm

在 CentOS 7 中&#xff0c;/dev/shm 是基于內存的臨時文件系統&#xff08;tmpfs&#xff09;&#xff0c;其大小通常為系統內存的一半。要擴容 /dev/shm&#xff0c;可以通過重新掛載 tmpfs 并指定新的大小來實現。 擴容步驟 查看當前 /dev/shm 的大小&#xff1a; df -h /d…

【一起學Rust | Tauri2.0框架】基于 Rust 與 Tauri 2.0 框架實現全局狀態管理

前言 在現代應用程序開發中&#xff0c;狀態管理是構建復雜且可維護應用的關鍵。隨著應用程序規模的增長&#xff0c;組件之間共享和同步狀態變得越來越具有挑戰性。如果處理不當&#xff0c;狀態管理可能會導致代碼混亂、難以調試&#xff0c;并最終影響應用程序的性能和可擴…

百度SEO和必應SEO優化方法

如需SEO服務&#xff0c;可以搜索&#xff1a;深圳市信科網絡科技有限公司。 一、搜索引擎生態格局&#xff1a;流量入口的重新洗牌 2025 年&#xff0c;中國 PC 端搜索引擎市場正經歷戲劇性變革。StatCounter 數據顯示&#xff0c;必應憑借 Edge 瀏覽器的預裝優勢與 ChatGPT …