SQLMesh系列教程:SQLMesh虚拟数据环境

各种工具都已将软件工程实践引入到数据工程中,但仍有差距存在,尤其是在测试和工作流等领域。SQLMesh 的目标是在这些领域开辟新的天地,解决像 dbt 这样的竞争产品尚未提供强大解决方案的难题。在这篇文章中,我将对 SQLMesh 进行简要介绍,分享有关其功能和潜在影响的见解。

安装SQLMesh

上文我们已经创建了示例SQLMesh项目,你可以使用它来学习本文中的示例。

python3 -m venv .venv
source .venv/bin/activate# SQLMesh uses extras to install specific modules that are used in the project. 
# This allows you to quickly extend SQLMesh with the desired capabilities 
# and at the same time ensure a lean footprint.
pip install "sqlmesh[postgres,web]"

项目结构介绍

如果你以前使用过dbt,那么您会对SQLMesh项目框架感到熟悉。开发人员已经确保SQLMesh与dbt向后兼容,允许现有dbt项目的无缝迁移。

  • config.yml - 在您的项目的根目录下,您会发现一个简洁明了的基于 YAML 格式的 SQLMesh 配置文件。此文件内容简短,主要侧重于设置网关(多个网关时)以及定义模型的默认 SQL 语言。
  • Audits - 验证数据是一项至关重要的功能,它应当让数据的生产者和消费者都确信数据符合预期。dbt 也提供了类似的功能,称为“数据测试”。
  • macros - 现在被视为标准的一项功能是能够通过编程式的函数(例如 if 语句、for 循环和筛选表达式)增强静态 SQL 语句。这种功能通常通过宏系统来实现,比如在 dbt 中使用 Jinja,这是一个流行的基于 Python 的模板引擎。SQLMesh 也支持 Jinja,但更进一步提供了自己的宏系统。与简单的字符串替换不同,它解释 SQL 语义,使其成为更强大和灵活的工具。在我看来,这种新增的能力不仅因其优雅的语法而值得称赞,还因其强大的功能而如此,值得肯定。
  • Models- SQLMesh 在定义数据模型方面与众不同的地方在于其如何管理元数据。它并非像其他工具那样使用单独的 YAML 文件,而是直接在 SQL 代码中定义元数据。在我的测试中,我发现这种方法特别直观且对开发者友好,使得建模过程更加顺畅和高效。
    • 原始数据集(Seeds) - 尽管这种情况可能不常见,但我们都知道它迟早会发生的:整合基于 CSV 或 JSON 的数据集。为了解决这个问题,SQLMesh 与 dbt 一样,包含了对原始数据集的支持。在 SQLMesh 中,数据集文件存储在指定的文件夹中,然后在 Models 文件夹中定义相应的模型。
  • 测试(tests) - 我完全赞同 SQLMesh 在为数据建模实现单元测试方面的做法。它并非采用传统的审计方式,而是侧重于一种直接的输入与输出对比检查,这种检查能够快速且轻松地执行,且无需依赖大量资源。这种方法不仅加快了反馈流程,还为数据工程师提供了实用的工具,使他们能够在数据的背景下采用诸如测试先行开发之类的概念。自 1.8 版本起,dbt 还提供了“单元测试”。

SQLMesh核心机制

这是SQLMesh的另一个真正优势所在。开发人员已经解决了数据集开发中的一个关键挑战:管理数据模型的多个版本。SQLMesh引入了虚拟数据环境的概念,它在两个层面上运行:物理和虚拟。

SQL Mesh Engine├── 物理层:数据库仓库 + 快照存储├── 虚拟层:环境隔离视图 + 版本映射├── 元数据引擎:指纹计算 + 依赖解析└── 测试引擎:快照验证 + 自动回滚

在这里插入图片描述

在物理层面,当一个新项目启动并首次执行计划时,会为每个模型创建一个快照(版本 1)。在所有测试和审计成功完成后,虚拟层面就会发挥作用。会为相应的环境创建一个视图,指向最新的快照。这种方法确保了有效的版本管理以及无缝的更新。

# sqlmesh plan [environment name]
# if you provide no name it will by default use "prod" as environment.
sqlmesh plan

当显式指定环境时,例如“dev”,流程将为dev创建虚拟层,并将视图指向模型的最新快照版本。

sqlmesh plan dev

当对模型进行修改时,SQLMesh 会采用一套复杂的指纹识别系统,该系统不仅会分析模型本身,还会分析整个依赖树。这确保了所有受影响的模型都得到了验证。如果该变更首先在“开发”环境中应用,那么在成功测试和审核后会创建一个新的快照版本,并且“开发”环境中的视图指针会被更新到新的版本。
如果出现操作错误,只需执行一个命令即可轻松回滚到之前的快照版本,无需重新处理数据。这真是太巧妙了!

sqlmesh rollback

如果你想知道那些不再使用的旧快照会怎样处理,那么 SQLMesh 提供了一个解决方案:一个名为“Janitor”的垃圾回收器。此进程会在每次计划执行时自动运行,或者在需要时通过 CLI 命令手动触发运行。

sqlmesh janitor

最后总结

为了提升数据工程的质量,采用成熟的软件工程实践和原则至关重要。SQLMesh 在这方面取得了显著进展,引入了诸如虚拟数据环境等创新概念。我还赞赏其通过单元测试方法来提高测试效率的专注点。在实际操作中,我发现以 YAML 格式定义模拟对象并快速有效地验证 SQL 模型的逻辑特别方便,而且无需依赖大量资源。

然而,就像任何进入成熟市场的新竞争者一样,SQLMesh 必须在行业领导者 dbt 的竞争中证明自己的实力。尽管我认为 SQLMesh 具有强大的潜力能够确立稳固的地位,但 dbt 的大量使用者是否会转向 SQLMesh 还有待观察。话虽如此,我建议你仔细研究一下 SQLMesh 的理念,并评估其可能为组织带来的价值。

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

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

相关文章

基于Babylon.js的Shader入门之五:让Shader支持法线贴图

如果一个比较平坦的物体表面要添加更多的凹凸细节,但是我们又不想通过建模实现,这时候法线贴图就派上用场了。法线贴图是通过与灯光的交互来让一个平坦表面造成凹凸效果假象的,在基于Babylon.js的Shader入门之四:让Shader支持基础…

活码在实际操作中的具体场景有哪些?怎么应用?

当传统二维码因“内容固定、无法追踪、流量拥堵”等问题逐渐失效时,活码正在成为企业破解运营痛点的关键工具。 无论是需要实时更新内容的线下物料,还是面临用户分流压力的线上客服,动态二维码都能通过“一码多用、灵活配置”的特性&#xf…

极空间NAS部署gitea教程

极空间NAS部署gitea步骤教程 背景1. 准备镜像1.1 极空间官方1.2 Win系统docker再上传1.3 镜像转录 2. MySql配置2.1 容器配置2.2 命令行配置 3. gitea配置3.1 容器配置3.2 打开网页3.3 网页配置安装 参考资料 背景 极空间Nas和别的Nas不同的地方就在于,他不是那种标…

Wireshark:在 显示过滤器中“加入条件”过滤后,出现其他类型的数据包,为什么?

一、 在Wireshark中使用“tcp协议”过滤后,仍出现TLSv1.2协议的数据包,原因如下: 1. ‌协议层次关系‌ ‌TCP是传输层协议‌,而‌TLS属于应用层协议‌,后者直接运行于TCP之上‌28。因此,所有TLS流量&…

【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力

【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力 0. 论文简介0.1 基本信息0.2 摘要 1. 引言2. 材料与方法2.1 大语言模型的使用2.2 可读性标准2.3 统计分析 3. 结果3.1 Bezirci-Yılmaz可读性评分3.2 Ateşman可读性评分3.3 全面性评分3.4 准确性评分 4. 讨论4.1 可读…

设计模式(行为型)-策略模式

目录 定义 类图 角色 角色详解 Strategy(抽象策略类)​ Context(环境类 / 上下文类)​ ConcreteStrategy(具体策略类)​ 优缺点 优点​ 缺点​ 使用场景 类行为差异场景​ 动态算法选…

服装零售行业数字化时代的业务与IT转型规划P111(111页PPT)(文末有下载方式)

服装零售行业数字化时代的业务与IT转型规划P111 详细资料请看本解读文章的最后内容。 随着数字化技术的迅猛发展,服装零售行业正经历着前所未有的变革。本文将对《服装零售行业数字化时代的业务与IT转型规划P111》进行详细解读,探讨未来几年内该行业的…

【大语言模型_6】mindie启动模型错误整理

一、启动报 [hccl_runner.cpp:141] AllGatherHcclRunner:0 HcclCommInitRootInfo fa il, error:2, rank:0, rankSize:2 背景:运行DeepSeek-R1-Distill-Qwen-14B模型,在2张300 P卡可以运行,单独一张启动报以上错误。 问题分析&…

STM32F429单片机FMC接口驱动TFT LCD和SDRAM

1、FMC接口介绍 FMC 接口(即可变存储控制器)是一种用于管理外部存储器的外设接口,支持多种类型的存储器,主要分为三大类:NOR/SRAM/PSRAM设备(TFTLCD相当于SRAM)、NOR FLASH/NAND FLASH/PC卡设备…

ollama不安装到c盘,安装到其他盘

ollama 安装包默认安装到c盘,安装程序并没有提供选择文件夹安装功能,本来c盘就快满了,下几个模型c盘都快爆了,如何将ollma安装到其他盘呢? ollama 默认安装位置 C:\Users\Admin\.ollama 是 Ollama 用来放大模型的文件夹…

java项目之基于ssm的少儿编程在线培训系统(源码+文档)

项目简介 少儿编程在线培训系统实现了以下功能: 用户信息管理: 用户信息新增 用户信息修改 教师信息管理: 教师信息添加 教师信息删除 教师信息修改 课程信息管理: 课程信息添加 课程信息修改 课程信息删除 课程类型管理&…

Cinema4D安装及基本操作

一、简介 Cinema 4D(C4D)是德国 Maxon Computer 开发的 3D 软件,具备强大的建模、动画、材质、渲染功能,以易用高效著称,广泛应用于影视、游戏、设计等领域,是行业内主流 3D 创作工具。 二、安装 1.下载安…

为什么TCP需要三次握手?一次不行吗?

文章目录 1. 三次握手的过程2. 为什么需要三次握手?3. 握手过程中每一步的具体作用4. 简单比喻5. 为什么是三次握手,而不是两次或四次?6. 三次握手中的序列号有什么作用?7. 总结 1. 三次握手的过程 三次握手是建立 TCP 连接的过程…

大数据在人力资源管理中的洞察与决策

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化转型浪潮中,人力资源管理(HRM)正经历着前所未有的变革。…

让vscode远程开发也可以图形显示

目录 0. 摘要1. 保存查看2. jupyter内置inline渲染3. jupyter浏览器4. matplot修改后端5. SSH X11转发[※]6. 参考 0. 摘要 vscode登录远程服务器进行开发遇到图形显示需求时,该怎么处理?一般有几种方式: 保存下来查看jupyter内置的inline图…

Blender制作次表面材质

效果: 主要用沃罗诺伊纹理做出云絮感 然后EV开启次表面设置

服务器数据恢复—服务器raid故障导致上层分区不可用的数据恢复案例

服务器数据恢复环境&故障: 一台服务器中有一组由三块SAS硬盘组建的raid阵列。服务器上部署的数据库存储在D分区,数据库备份存储在E分区。 服务器上一块硬盘指示灯显示红色。D分区不可识别。E分区虽然可以识别,但是E分区拷贝文件报错。 管…

PyTorch PINN实战:用深度学习求解微分方程

神经网络技术已在计算机视觉与自然语言处理等多个领域实现了突破性进展。然而在微分方程求解领域,传统神经网络因其依赖大规模标记数据集的特性而表现出明显局限性。物理信息神经网络(Physics-Informed Neural Networks, PINN)通过将物理定律直接整合到学习过程中&a…

关于“碰一碰发视频”系统的技术开发文档框架

以下是关于“碰一碰发视频”系统的技术开发文档框架,涵盖核心功能、技术选型、开发流程和关键模块设计,帮助您快速搭建一站式解决方案 --- 随着短视频平台的兴起,用户的创作与分享需求日益增长。而如何让视频分享更加便捷、有趣&#xff0c…

【VUE】day05-ref引用

这里写目录标题 1. ref引用1.1 使用ref引用组件 2. this.$nextTick(cb)方法3. 购物车案例3.1 数组中的方法 - some循环3.2 数组中的方法 - every循环3.3 数组中的方法 - reduce 4. 购物车案例 1. ref引用 ref用来辅助开发者在不依赖于jQuery的情况下,获取DOM元素或…