当前位置: 首页 > news >正文

SQLMesh 系列教程6- 详解 Python 模型

本文将介绍 SQLMesh 的 Python 模型,探讨其定义、优势及在企业业务场景中的应用。SQLMesh 不仅支持 SQL 模型,还允许通过 Python 编写数据模型,提供更高的灵活性和可编程性。我们将通过一个电商平台的实例,展示如何使用 Python 模型生成每日销售报告和计算客户生命周期价值。文章将详细解析 Python 模型的核心组成部分,包括模型定义、数据加载、转换逻辑和数据写入,并探讨其在实际业务中的价值,帮助读者掌握如何利用 Python 模型构建高效的数据管道。

SQLMesh 的 Python 模型

SQLMesh 不仅支持通过 SQL 定义数据模型,还支持通过 Python 编写数据模型。Python 模型提供了更高的灵活性和可编程性,特别适合需要复杂逻辑或动态生成 SQL 的场景。Python 模型的核心是通过编写 Python 函数来定义数据转换逻辑,并利用 SQLMesh 的框架将其集成到数据管道中。

在这里插入图片描述

Python 模型的定义

SQLMesh 的 Python 模型由以下几个部分组成:

  1. 模型定义
    • 使用 @model 装饰器定义 Python 模型。
    • 指定模型的名称、目标表、分区策略等元数据。
  2. 数据加载
    • 通过 SQLMesh 提供的上下文对象(context)加载数据。
    • 可以使用 SQL 查询或直接读取数据源。
  3. 数据转换逻辑
    • 在 Python 函数中实现数据转换逻辑。
    • 可以利用 Pandas、NumPy 等库进行复杂的数据处理。
  4. 数据写入
    • 将处理后的数据写入目标表。
    • 支持增量更新和全量更新。
  5. 依赖管理
    • 可以通过 @depends_on 装饰器声明模型之间的依赖关系。

Python 模型示例

以下是一个完整的 Python 模型示例,结合企业业务场景:假设我们需要从原始订单数据中生成每日销售报告,并计算每个客户的总消费金额。

1. 每日销售报告
  • 目标:每天生成销售数据,供业务团队分析。
  • 实现
    • 使用 @model 装饰器定义模型,指定为增量模型(INCREMENTAL_BY_TIME_RANGE)。
    • 通过 SQL 查询加载当天的订单数据,并计算总销售额、总订单数和平均订单价值。
    • 将结果写入目标表 daily_sales_report
2. 客户生命周期价值
  • 目标:每周计算每个客户的总消费金额,用于客户分群和营销策略。
  • 实现
    • 使用 @model 装饰器定义模型,指定为全量模型(FULL)。
    • 通过 SQL 查询加载所有订单数据,并按客户 ID 聚合计算总消费金额。
    • 将结果写入目标表 customer_lifetime_value
3. 业务场景
  • 原始数据表:raw_orders,包含订单的详细信息。
  • 目标数据表:daily_sales_report,按天汇总销售数据。
  • 目标数据表:customer_lifetime_value,计算每个客户的总消费金额。
4. Python 模型脚本
from sqlmesh import model
from sqlmesh.core.context import Context
import pandas as pd# 定义每日销售报告模型
@model(name="db.daily_sales_report",kind="INCREMENTAL_BY_TIME_RANGE",time_column="order_date",cron="@daily",grain=["order_date"],
)
def generate_daily_sales_report(context: Context):# 加载原始订单数据df = context.sql("""SELECTorder_date,SUM(quantity * price) AS total_sales,COUNT(DISTINCT order_id) AS total_orders,SUM(quantity * price) / COUNT(DISTINCT order_id) AS avg_order_valueFROM raw_ordersWHERE order_date = @start_dsGROUP BY order_date""")# 将结果写入目标表context.write(df, "db.daily_sales_report")# 定义客户生命周期价值模型
@model(name="db.customer_lifetime_value",kind="FULL",  # 全量模型cron="@weekly",
)
def generate_customer_lifetime_value(context: Context):# 加载原始订单数据df = context.sql("""SELECTcustomer_id,SUM(quantity * price) AS lifetime_valueFROM raw_ordersGROUP BY customer_id""")# 将结果写入目标表context.write(df, "db.customer_lifetime_value")

SQLMesh 的 Python 模型为数据工程提供了强大的灵活性和可编程性。通过 Python 模型,企业可以轻松实现复杂的数据转换逻辑,并将其集成到数据管道中。无论是每日销售报告还是客户生命周期价值分析,Python 模型都能帮助企业高效地处理和分析数据,支持数据驱动的决策。

优势与应用场景

  1. 灵活性
    • Python 模型支持复杂的数据处理逻辑,例如使用 Pandas 进行数据清洗、特征工程等。
    • 适合需要动态生成 SQL 或处理非结构化数据的场景。
  2. 可扩展性
    • 可以轻松集成外部 Python 库(如 Scikit-learn、TensorFlow)进行机器学习或高级分析。
  3. 企业应用场景
    • 电商平台:计算每日销售报告、客户生命周期价值、推荐系统特征工程等。
    • 金融行业:计算用户信用评分、交易风险分析等。
    • 物流行业:优化配送路线、预测库存需求等。

最后总结

本文深入探讨了 SQLMesh 的 Python 模型,展示了其定义、实现及在企业业务场景中的应用。通过电商平台的实例,我们演示了如何使用 Python 模型生成每日销售报告和计算客户生命周期价值。SQLMesh 的 Python 模型结合了 SQL 的简洁性和 Python 的强大功能,支持复杂的数据处理逻辑和动态 SQL 生成,非常适合需要灵活性和可扩展性的数据工程场景。无论是电商、金融还是物流行业,Python 模型都能帮助企业高效处理数据,赋能数据驱动的决策与创新。

相关文章:

SQLMesh 系列教程6- 详解 Python 模型

本文将介绍 SQLMesh 的 Python 模型,探讨其定义、优势及在企业业务场景中的应用。SQLMesh 不仅支持 SQL 模型,还允许通过 Python 编写数据模型,提供更高的灵活性和可编程性。我们将通过一个电商平台的实例,展示如何使用 Python 模…...

聊一聊vue如何实现角色权限的控制的

大家好,我是G探险者。 关于角色与权限控制,通常是分为两大类:一种是菜单权限;一种是操作权限。 菜单权限是指,每个角色对应着可以看到哪些菜单,至于每个菜单里面的每个按钮,比如增删改查等等这类…...

Python连接MySQL数据库图文教程,Python连接数据库MySQL入门教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1. 环境准备1.1安装 Python1.2选择开发环境1.3安装 MySQL 数据库1.4 安装 pymysql 库 2. 连接数据库3. 数据库基本操作3.1 创建数据库3.2 创建表3.3 插入数据3.…...

懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)

1.合集懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制):https://www.bilibili.com/video/BV1M6rdYEEog/ 备注: 1.本地离线卡密采用最安全的非对称加解密技术,设备id采用最安全多重混合加密不可逆技术生成&…...

天 锐 蓝盾终端安全管理系统:办公U盘拷贝使用管控限制

天 锐 蓝盾终端安全管理系统以终端安全为基石,深度融合安全、管理与维护三大要素,通过对桌面终端系统的精准把控,助力企业用户构筑起更为安全、稳固且可靠的网络运行环境。它实现了管理的标准化,有效破解终端安全管理难题&#xf…...

LeetCode 2595.奇偶位数:位运算

【LetMeFly】2595.奇偶位数:位运算 力扣题目链接:https://leetcode.cn/problems/number-of-even-and-odd-bits/ 给你一个 正 整数 n 。 用 even 表示在 n 的二进制形式(下标从 0 开始)中值为 1 的偶数下标的个数。 用 odd 表示…...

一周学会Flask3 Python Web开发-response响应格式

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 在HTTP响应中,数据可以通过多种格式传输。大多数情况下,我们会使用HTML格式,这也是Flask中…...

uni-app开发app时 使用uni.chooseLocation遇到的问题

问题一:不显示 问题二:选择地址列表一直在加载中 因为 uni-app 接口文档 中已经说明,使用腾讯的话需要开启云服务,具体可看官网,这就是为什么使用时直接不显示的原因,所以我使用的高德,但又出现…...

Android Hal AIDL 简介 (一)

Android 接口定义语言 (AIDL) 是一款可供用户用来抽象化 IPC 的工具。 以在 .aidl 文件中指定的接口为例,各种构建系统都会使用 aidl 二进制文件构造 C++ 或 Java 绑定,以便跨进程使用该接口(无论其运行时环境或位数如何)。 AIDL 可以在 Android 中的任何进程之间使用:在…...

鸿蒙初学者学习手册(HarmonyOSNext_API14)_组件截图(@ohos.arkui.componentSnapshot (组件截图) )

前言: 这个模块可以截取组件的图片,无论组件是否已加载。截图只能拍到组件本身的大小区域。 如果组件或其子组件画得超出了自己的区域,超出的部分不会出现在截图中。截图不会拍到与当前组件平级的(兄弟)组件。 模块简…...

华为昇腾910b服务器部署DeepSeek翻车现场

最近到祸一台HUAWEI Kunpeng 920 5250,先看看配置。之前是部署的讯飞大模型,发现资源利用率太低了。把5台减少到3台,就出了他 硬件配置信息 基本硬件信息 按照惯例先来看看配置。一共3块盘,500G的系统盘, 2块3T固态…...

[展示]Webrtc NoiseSuppressor降噪模块嵌入式平台移植

最近在尝试把WebRtc的NoiseSuppressor模块移植到嵌入式平台,现在已经移植了,尝试了下效果,降噪效果很显著,噪声带被显著抑制了 降噪前: 降噪后:...

golang内存泄漏

golang也用了好几年了,趁着有空 整理归纳下,以后忘了好看下 一般认为 Go 10次内存泄漏,8次goroutine泄漏,1次是真正内存泄漏,还有1次是cgo导致的内存泄漏 1:环境 go1.20 win10 2:goroutine泄漏 单个Goroutine占用内存&…...

安科瑞能源物联网平台助力企业实现绿色低碳转型

安科瑞顾强 随着全球能源结构的转型和“双碳”目标的推进,能源管理正朝着智能化、数字化的方向快速发展。安科瑞电气股份有限公司推出的微电网智慧能源管理平台(EMS 3.0),正是这一趋势下的创新解决方案。该平台集成了物联网&…...

Android Http-server 本地 web 服务

时间:2025年2月16日 地点:深圳.前海湾 需求 我们都知道 webview 可加载 URI,他有自己的协议 scheme: content:// 标识数据由 Content Provider 管理file:// 本地文件 http:// 网络资源 特别的,如果你想直接…...

腾讯的webUI怎样实现deepseek外部调用 ; 腾讯云通过API怎样调用deepseek

腾讯的webUI怎样实现deepseek外部调用 目录 腾讯的webUI怎样实现deepseek外部调用腾讯云通过API怎样调用deepseekhtml方式curl方式python方式腾讯云通过API怎样调用deepseek 重点说明:不需要SK,仅仅使用ip和端口号 html方式 <!DOCTYPE html> <html lang="e…...

DeepSeek VS ChatGPT-速度、准确性和成本

撰写本文时马斯克刚刚发布了聊天机器人Grok2&#xff0c;10万张算卡体现了马斯克的财大气粗。近年来&#xff0c;人工智能模型取得了长足的发展&#xff0c;每个模型都力求在速度、准确性和成本效率方面超越其他模型。在本文中&#xff0c;我将深入研究比较中美在AI的焦点模型上…...

内外网隔离文件传输解决方案|系统与钉钉集成+等保合规,安全提升70%

一、背景与痛点 在内外网隔离的企业网络环境中&#xff0c;员工与外部协作伙伴&#xff08;如钉钉用户&#xff09;的文件传输面临以下挑战&#xff1a; 1. **安全性风险**&#xff1a;内外网直连可能导致病毒传播、数据泄露。 2. **操作繁琐**&#xff1a;传统方式需频繁切…...

Linux基础开发工具的使用(apt、vim、gcc、g++、gdb、make、makefile)

Linux软件包管理器–apt Linux安装软件的方式 在Linux下安装软件的方法有以下三种&#xff1a; 下载到程序的源代码&#xff0c;自己编译出可执行程序获取deb安装包、然后使用dpkg命令安装。&#xff08;不解决依赖关系&#xff09;通过apt进行安装软件。 小知识点&#xf…...

最新版IDEA下载安装教程

一、下载IDEA 点击前往官网下载 或者去网盘下载 点击前往百度网盘下载 点击前往夸克网盘下载 进去后点击IDEA 然后点击Download 选择自己电脑对应的系统 点击下载 等待下载即可 二、安装IDEA 下载好后双击应用程序 点击下一步 选择好安装目录后点击下一步 勾选这两项后点击…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...