折扣网站怎么做/优化 保证排名

折扣网站怎么做,优化 保证排名,利用模板做网站,做时时彩网站赚钱吗本文将详细介绍 SQLMesh 的 SQL 模型组成要素及其在实际项目中的应用。SQLMesh 是一个强大的数据工程工具,其 SQL 模型由 MODEL DDL、预处理语句、主查询、后处理语句以及可选的 ON VIRTUAL UPDATE 语句组成。我们将通过一个电商平台每日销售报告的实例,…

本文将详细介绍 SQLMesh 的 SQL 模型组成要素及其在实际项目中的应用。SQLMesh 是一个强大的数据工程工具,其 SQL 模型由 MODEL DDL、预处理语句、主查询、后处理语句以及可选的 ON VIRTUAL UPDATE 语句组成。我们将通过一个电商平台每日销售报告的实例,展示如何利用这些要素构建高效的数据管道。文章将逐步解析每个部分的作用,并说明如何通过 SQLMesh 实现增量更新和虚拟更新测试,帮助读者掌握 SQLMesh 的核心功能及其在实际场景中的最佳实践。

SQL模型概述

SQL模型是SQLMesh使用的主要模型类型。这些模型可以使用SQL或生成SQL的Python来定义。
在这里插入图片描述

基于sql的定义,基于SQL的SQL模型定义是最常见的定义,它由以下部分组成:

  • MODEL DDL

    使用 MODEL 关键字定义模型的基本信息,包括模型名称、目标表、分区策略等。这是 SQL 模型的入口点,用于声明模型的元数据。

  • 可选的预处理语句(Pre-statements)

    在模型的主查询之前执行的 SQL 语句。通常用于创建临时表、设置变量或执行其他准备工作。

  • 单个查询(Main Query)

    模型的核心部分,定义数据转换逻辑。必须是一个单独的 SELECT 查询,用于生成目标表的数据。

  • 可选的后处理语句(Post-statements)

    在主查询之后执行的 SQL 语句。通常用于清理临时表、更新元数据或执行其他收尾工作。

  • 可选的 ON VIRTUAL UPDATE 语句

    用于定义在虚拟更新(Virtual Update)时的行为。虚拟更新是 SQLMesh 的一种机制,允许在不实际修改数据的情况下测试模型的更改。

这些模型的设计目的是让你看起来像是在简单地使用SQL,但它们可以针对高级用例进行定制。

要创建基于sql的模型,请在SQLMesh项目中的models/目录(或models/的子目录)中添加一个后缀为.sql的新文件。虽然文件名并不重要,但是习惯上使用模型名(不带模式名)作为文件名。例如,包含sqlmesh_example.seed_model的模型文件,将被命名为seed_model.sql。

举例:

-- This is the MODEL DDL, where you specify model metadata and configuration information.
MODEL (name db.customers,kind FULL,
);/*Optional pre-statements that will run before the model's query.You should NOT do things that cause side effects that could error out whenexecuted concurrently with other statements, such as creating physical tables.
*/
CACHE TABLE countries AS SELECT * FROM raw.countries;/*This is the single query that defines the model's logic.Although it is not required, it is considered best practice to explicitlyspecify the type for each one of the model's columns through casting.
*/
SELECTr.id::INT,r.name::TEXT,c.country::TEXT
FROM raw.restaurants AS r
JOIN countries AS cON r.id = c.restaurant_id;/*Optional post-statements that will run after the model's query.You should NOT do things that cause side effects that could error out whenexecuted concurrently with other statements, such as creating physical tables.
*/
UNCACHE TABLE countries;
  • 模型DDL

MODEL DDL用于指定关于模型的元数据,例如模型的名称、类型、所有者、cron等。这应该是基于sql的模型文件中的首个语句。有关允许的属性的完整列表,请参阅MODEL属性。

  • 可pre/post-statements

可选的pre/post语句允许你分别在模型运行之前和之后执行SQL命令。

例如,pre/post语句可能会修改设置或创建表索引。但是,如果并发运行,请注意不要运行任何可能与另一个模型的执行冲突的语句,例如创建物理表。

pre/post 语句只是位于模型查询之前/之后的标准SQL命令。它们必须以分号结束,如果存在后置语句,则模型查询必须以分号结束。上面的例子包含了前置语句和后置语句。

Pre/post语句被求值两次:当创建模型的表时,以及当计算其查询逻辑时。多次执行语句可能会产生意想不到的副作用,因此可以根据SQLMesh的运行时阶段有条件地执行语句。

上面示例中的pre/post语句将运行两次,因为它们不受运行时阶段的限制。

我们可以使用@IF宏操作符和@runtime_stage宏变量对后置语句进行条件调整,使其仅在模型查询被评估后运行,如下所示:

MODEL (name db.customers,kind FULL,
);[...same as example above...]@IF(@runtime_stage = 'evaluating',UNCACHE TABLE countries
);

注意,@IF()宏中的SQL命令UNCACHE TABLE countries不以分号结束。相反,分号出现在@IF()宏的右括号之后。

  • 可选的on-virtual-update语句

可选的on-virtual-update语句允许你在虚拟更新完成后执行SQL命令。

例如,可以使用这些权限来授予虚拟层视图的权限。这些SQL语句必须包含在ON_VIRTUAL_UPDATE_BEGIN;…;ON_VIRTUAL_UPDATE_END;

MODEL (name db.customers,kind FULL
);SELECTr.id::INT
FROM raw.restaurants AS r;ON_VIRTUAL_UPDATE_BEGIN; 
GRANT SELECT ON VIEW @this_model TO ROLE role_name;
JINJA_STATEMENT_BEGIN;     
GRANT SELECT ON VIEW {{ this_model }} TO ROLE admin;
JINJA_END;  
ON_VIRTUAL_UPDATE_END;

也可以在其中使用Jinja表达式,如上面的示例所示。这些表达式必须正确地嵌套在JINJA_STATEMENT_BEGIN;和JINJA_END;块。

这些语句的表解析发生在虚拟层。这意味着表名,包括@this_model宏,被解析为它们的限定视图名。例如,当在名为dev的环境中运行计划时,db.customers@this_model将解析为db__dev.customers而不是物理表名。

  • 模型查询

模型必须包含一个独立的查询,它可以是单个SELECT表达式,也可以是多个SELECT表达式与UNION、INTERSECT或EXCEPT操作符的组合。该查询的结果将用于填充模型的表或视图。

完整实例

实际应用场景

在一个电商平台的数据分析项目中,该 SQL 模型可以用于:

  1. 每日销售报告:每天自动生成销售数据,供业务团队分析。
  2. 增量更新:只处理当天的订单数据,避免全量计算,提高效率。
  3. 虚拟更新测试:在部署前测试模型的更改,确保不会破坏现有数据管道。

以下是一个完整的 SQLMesh SQL 模型示例,结合上述实际应用场景:假设我们需要从原始订单数据中生成每日销售报告。

  • 原始数据表:raw_orders,包含订单的详细信息。
  • 目标数据表:daily_sales_report,按天汇总销售数据。

SQL 模型脚本

-- MODEL DDL
MODEL (name db.daily_sales_report, -- 模型名称和目标表kind INCREMENTAL_BY_TIME_RANGE ( -- 增量模型,按时间范围更新time_column order_date),cron '@daily', -- 每天执行一次grain [order_date] -- 数据粒度
);-- 可选的预处理语句
-- 例如:创建一个临时表来存储当天的订单数据
CREATE TEMPORARY TABLE temp_daily_orders AS
SELECT *
FROM raw_orders
WHERE order_date = @start_ds;-- 单个查询(主查询)
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_value -- 计算平均订单价值
FROM temp_daily_orders
GROUP BY order_date;-- 可选的后处理语句
-- 例如:删除临时表
DROP TABLE IF EXISTS temp_daily_orders;-- 可选的 ON VIRTUAL UPDATE 语句
ON VIRTUAL UPDATE {-- 在虚拟更新时,返回一个示例结果集SELECT'2023-10-01' AS order_date,1000.00 AS total_sales,10 AS total_orders,100.00 AS avg_order_value;
};

详细说明

  1. MODEL DDL
    • name:定义模型的名称和目标表(db.daily_sales_report)。
    • kind:指定模型的类型。这里使用 INCREMENTAL_BY_TIME_RANGE,表示这是按时间范围更新的增量模型。
    • time_column:指定时间列(order_date),用于增量更新。
    • cron:定义模型的调度频率(每天执行一次)。
    • grain:定义数据的粒度(按 order_date 聚合)。
  2. 预处理语句
    • 创建了一个临时表 temp_daily_orders,用于存储当天的订单数据。
    • @start_ds 是 SQLMesh 提供的宏,表示当前处理的时间范围起点。
  3. 主查询
    • 从临时表 temp_daily_orders 中查询数据,按 order_date 聚合计算总销售额、总订单数和平均订单价值。
  4. 后处理语句
    • 清理临时表 temp_daily_orders,避免占用资源。
  5. ON VIRTUAL UPDATE
    • 在虚拟更新时,返回一个示例结果集,用于测试模型的输出结构。

通过这种方式,SQLMesh 的 SQL 模型能够清晰地定义数据转换逻辑,同时支持增量更新和虚拟更新,非常适合复杂的数据工程场景。
在这里插入图片描述

最后总结

本文深入探讨了 SQLMesh 的 SQL 模型组成要素,包括 MODEL DDL、预处理语句、主查询、后处理语句以及 ON VIRTUAL UPDATE 语句。通过一个电商平台每日销售报告的实例,我们展示了如何利用 SQLMesh 构建高效、可维护的数据管道。SQLMesh 的增量更新机制和虚拟更新测试功能,极大地提升了数据工程的灵活性和可靠性。无论是处理大规模数据还是优化数据工作流,SQLMesh 都提供了强大的工具和方法,帮助团队实现数据驱动决策。希望本文能为读者在实际项目中应用 SQLMesh 提供有价值的参考。

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

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

相关文章

DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方DeepSeek接入)

前言 在当今数字化时代,AI编程助手已成为提升开发效率的利器。DeepSeek作为一款强大的AI模型,凭借其出色的性能和开源免费的优势,成为许多开发者的首选。今天,就让我们一起探索如何将DeepSeek接入PyCharm,实现高效、智…

从驾驶员到智能驾驶:汽车智能化进程中的控制与仿真技术

在汽车技术持续演进的历程中,人类驾驶员始终是一个极具研究价值的智能控制系统“原型”。驾驶员通过视觉感知、行为决策与操作执行的闭环控制,将复杂的驾驶任务转化为车辆的实际动作,同时动态适应道路环境的变化。这一过程不仅体现了高度的自…

华为FusionCompute虚拟化平台

一、华为FusionCompute虚拟化套件介绍 华为FusionCompute虚拟化套件是业界领先的虚拟化解决方案,能够帮助客户带来如下的价值,从而大幅提升数据中心基础设施的效率。 帮助客户提升数据中心基础设施的资源利用率;帮助客户成倍缩短业务上线周期…

【存储中间件API】MySQL、Redis、MongoDB、ES常见api操作及性能比较

常见中间件api操作及性能比较 ☝️ MySQL crud操作✌️ maven依赖✌️ 配置✌️ 定义实体类✌️ 常用api ☝️ Redis crud操作✌️ maven依赖✌️ 配置✌️ 常用api ☝️ MongoDB crud操作✌️ maven依赖✌️ 配置文件✌️ 定义实体类✌️ MongoDB常用api ☝️ ES crud操作 ⭐️…

51单片机入门_10_数码管动态显示(数字的使用;简单动态显示;指定值的数码管动态显示)

接上篇的数码管静态显示,以下是接上篇介绍到的动态显示的原理。 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选&#xff…

win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统,报错:Operating System not found 二、原因分析 国产系统,需要注意的点: 需要看你的系统类…

情书网源码 情书大全帝国cms7.5模板

源码介绍 帝国cms7.5仿《情书网》模板源码,同步生成带手机站带采集。适合改改做文学类的网站。 效果预览 源码获取 情书网源码 情书大全帝国cms7.5模板

STM32 ADC介绍(硬件原理篇)

目录 背景 AD转换器 采样与保持 量化 编码 AD转换器转换原理 DA转换原理 AD转换原理 1.逐次逼近型AD转换器 2.并联比较型AD转换器 编码器 同步D触发器和边沿D触发器 基本RS触发器 同步RS触发器 同步D触发器 边沿型D触发器(维持-阻塞D触发器&#xff…

公网远程家里局域网电脑过程详细记录,包含设置路由器。

由于从校内迁居小区,校内需要远程控制访问小区内个人电脑,于是早些时间刚好自己是电信宽带,可以申请公网ipv4不需要花钱,所以就打电话直接申请即可,申请成功后访问光猫设备管理界面192.168.1.1,输入用户名密码登录超管(密码是网上查下就有了)设置了光猫为桥接模式,然后…

【Spring】Spring配置文件

目录 ​什么是配置文件? 配置文件的作用 SpringBoot配置文件 配置文件格式 配置文件的优先级 properties配置文件说明 properties基本语法 读取配置文件 properties缺点 yml配置文件说明 yml基本语法 使用yml连接数据库 yml配置不同数据类型及null 注意…

Visual Studio Code使用ai大模型编成

1、在Visual Studio Code搜索安装roo code 2、去https://openrouter.ai/settings/keys官网申请个免费的配置使用

解锁机器学习核心算法 | 支持向量机:机器学习中的分类利刃

一、引言 在机器学习的庞大算法体系中,有十种算法被广泛认为是最具代表性和实用性的,它们犹如机器学习领域的 “十大神器”,各自发挥着独特的作用。这十大算法包括线性回归、逻辑回归、决策树、随机森林、K - 近邻算法、K - 平均算法、支持向…

深入解析Qt事件循环

在Qt开发中,QApplication::exec()这行代码是每个开发者都熟悉的“魔法咒语”。为什么GUI程序必须调用它才能响应操作?为何耗时操作会导致界面冻结?本文将以事件循环为核心,揭示Qt高效运转的底层逻辑,探讨其设计哲学与最…

未来游戏:当人工智能重构虚拟世界的底层逻辑

未来游戏:当人工智能重构虚拟世界的底层逻辑 在《赛博朋克2077》夜之城的霓虹灯下,玩家或许已经注意到酒吧里NPC开始出现微表情变化;在《艾尔登法环》的开放世界中,敌人的战术包抄逐渐显露出类人智慧。这些细节预示着游戏产业正站…

deepseek-v3在阿里云和腾讯云的使用中的差异

随着deepseek在各大云商上线,试用了下阿里云和腾讯云的deepseek服务,在回答经典数学问题9.9和9.11谁大时,发现还是有差异的。将相关的问题记录如下。 1、问题表现 笔者使用的openai的官方sdk go-openai。 因本文中测验主要使用阿里云和腾讯…

宝塔面板开始ssl后,使用域名访问不了后台管理

宝塔面板后台开启ssl访问后,用的证书是其他第三方颁发的证书 再使用 域名/xxx 的形式:https://域名:xxx/xxx 访问后台,结果出现如下,不管使用 http 还是 https 的路径访问都进不后台管理 这个时候可以使用 https://ip/xxx 的方式来…

开发板部署|RK3588部署DeepSeek-1.5B

前言 在 RK3588 上部署大模型可以显著提升计算效率、节能、加速推理过程,并实现本地化推理,适合各种边缘计算应用,如智能设备、自动驾驶、工业机器人、健康监测等领域。此外,RK3588 配备了强大的 NPU(神经网络处理单元…

UDP与TCP

用UDP一定比用TCP快吗? 假设我们需要在a电脑的进程发一段数据到b电脑的进程我们可以选择使用TCP或UDP协议进行通信。 对于TCP这样的可靠性协议每次消息发出后都能明确知道对方有没有收到,就像打电话一样,只要“喂喂"两下对方就能回你个…

软件测试:定义和实质

软件缺陷的定义: 未实现说明书要求的功能出现了说明书指明不应出现的错误实现了说明书未提到的功能未实现说明书没有明确提出但应该实现的目标软件难以理解,不易使用,运行缓慢 或者从测试员客户会认为不好的。 软件缺陷的原因: …

路由基础 | 路由引入实验 | 不同路由引入方式存在的问题

注:本文为 “路由基础 | 路由表 | 路由引入” 相关文章合辑。 未整理去重。 路由基本概念 1—— 路由表信息、路由进表以及转发流程、最长掩码匹配原则 静下心来敲木鱼已于 2023-11-26 14:06:22 修改 什么是路由 路由就是指导报文转发的路径信息,可以…