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

SQLMesh 测试自动化:提升数据工程效率

在现代数据工程中,确保数据模型的准确性和可靠性至关重要。SQLMesh 提供了一套强大的测试工具,用于验证数据模型的输出是否符合预期。本文将深入探讨 SQLMesh 的测试功能,包括如何创建测试、支持的数据格式以及如何运行和调试测试。

SQLMesh 测试概述

SQLMesh 的测试功能旨在通过持续验证每个模型的输出来保护项目免受回归影响。与软件开发的单元测试类似,SQLMesh 使用预定义的输入评估模型的逻辑,并将其输出与每个测试提供的预期结果进行比较。这种测试方法不仅可以在每次新计划创建时自动执行,还可以作为 CI/CD 流程的一部分按需执行。
在这里插入图片描述

创建测试

在 SQLMesh 中,测试套件是一个包含在项目 tests/ 文件夹中的 YAML 文件,文件名以 test 开头并以 .yaml.yml 结尾。测试套件可以包含一个或多个唯一命名的单元测试,每个单元测试都有一系列属性来定义其行为。一个单元测试至少需要指定被测试的模型、上游模型的输入值以及目标模型的查询和/或公共表表达式的预期输出。

SQLMesh 支持多种方式来定义单元测试中的输入和输出数据:

  1. YAML 字典:列映射到它们的值。
  2. CSV:逗号分隔的值。
  3. SQL 查询:针对测试连接执行 SQL 查询以生成数据。

入门实例

在本例中,我们将使用sqlmesh_example.Full_model模型,作为sqlmesh init命令的一部分提供,定义如下:

MODEL (name sqlmesh_example.full_model,kind FULL,cron '@daily',grain item_id,audits (assert_positive_order_ids),
);SELECTitem_id,COUNT(DISTINCT id) AS num_orders,
FROMsqlmesh_example.incremental_model
GROUP BY item_id

此模型从上游的 sqlmesh_example.incremental_model 中聚合每个 item_id 的订单数量。测试此模型的一种方法如下所示:

test_example_full_model:model: sqlmesh_example.full_modelinputs:sqlmesh_example.incremental_model:rows:- id: 1item_id: 1- id: 2item_id: 1- id: 3item_id: 2outputs:query:rows:- item_id: 1num_orders: 2- item_id: 2num_orders: 1

此测试验证 sqlmesh_example.full_model 是否能正确统计每个 item_id 的订单数量。它向 sqlmesh_example.incremental_model 提供三行输入,并期望目标模型的查询输出两行结果。

运行和调试测试

SQLMesh 的测试可以通过 CLI 或 Jupyter 笔记本按需执行。CLI 命令 sqlmesh test 可以用来执行所有测试,而 %run_test 笔记本魔法命令则允许在笔记本环境中执行测试。如果遇到测试失败,可以使用 --preserve-fixtures 选项保留输入夹具,以便进行调试。

$ sqlmesh test
.
----------------------------------------------------------------------
Ran 1 test in 0.005sOK

要运行特定的模型测试,请传入测试套件文件名后跟 :: 和测试名称:

$ sqlmesh test tests/test_full_model.yaml::test_example_full_model

您还可以使用通配符路径扩展语法运行匹配模式或子字符串的测试:

$ sqlmesh test tests/test_*

测试用例实战

CTE测试

模型查询中的各个公用表表达式(CTE)也可以进行测试。为了演示这一点,让我们对 sqlmesh_example.full_model 的查询稍作修改,添加一个名为 filtered_orders_cte 的 CTE:

WITH filtered_orders_cte AS (SELECTid,item_idFROMsqlmesh_example.incremental_modelWHEREitem_id = 1
)
SELECTitem_id,COUNT(DISTINCT id) AS num_orders,
FROMfiltered_orders_cte
GROUP BY item_id

下面的测试将在聚合发生之前验证该CTE的输出:

test_example_full_model:model: sqlmesh_example.full_modelinputs:sqlmesh_example.incremental_model:rows:- id: 1item_id: 1- id: 2item_id: 1- id: 3item_id: 2outputs:ctes:filtered_orders_cte:rows:- id: 1item_id: 1- id: 2item_id: 1query:rows:- item_id: 1num_orders: 2

csv文件

这就是我们如何定义与第一个示例相同的测试,但输入数据格式为CSV:

test_example_full_model:model: sqlmesh_example.full_modelinputs:sqlmesh_example.incremental_model:format: csvrows: |id,item_id1,12,13,2outputs:query:rows:- item_id: 1num_orders: 2- item_id: 2num_orders: 1

sql查询

这就是我们如何能够将上述第一个示例中的相同测试定义为这样一种形式,只不过输入数据是通过 SQL 查询生成的:

test_example_full_model:model: sqlmesh_example.full_modelinputs:sqlmesh_example.incremental_model:query: |SELECT 1 AS id, 1 AS item_idUNION ALLSELECT 2 AS id, 1 AS item_idUNION ALLSELECT 3 AS id, 2 AS item_idoutputs:query:rows:- item_id: 1num_orders: 2- item_id: 2num_orders: 1

数据文件

SQLMesh支持从外部文件加载数据。要实现这一点,你可以使用pathattribute,它指定要加载的数据的路径名:

test_example_full_model:model: sqlmesh_example.full_modelinputs:sqlmesh_example.incremental_model:format: csvpath: filepath/test_data.csv

如果省略format,则该文件将作为YAML文档加载。

省略列

对于宽表(即具有众多列的表),定义完整的输入和预期输出可能会变得繁琐。因此,如果某些列可以安全地忽略,那么它们可以从任何行中省略,并且对于该行,其值将被视为 NULL。
此外,可以通过将 partial 设置为 true 来仅测试感兴趣的输出列的一部分:

  outputs:query:partial: truerows:- <column_name>: <column_value>...

当缺失的列不能被视为 NULL 值,但我们仍希望忽略这些列时,此设置非常有用。若要将此设置应用于所有预期输出,请在“输出”键下进行设置:

  outputs:partial: true...

冻结时间

某些模型可能会使用计算给定时间点 datetime 值的 SQL 表达式,例如 CURRENT_TIMESTAMP。由于这些表达式是非确定性的,仅仅指定预期的输出值不足以对其进行测试。

通过设置 execution_time 宏变量来模拟测试上下文中的当前时间解决了这个问题,从而使其值具有确定性。
以下示例展示了如何使用 execution_time 来测试使用 CURRENT_TIMESTAMP 计算的列。我们将要测试的模型定义如下:

MODEL (name colors,kind FULL
);SELECT'Yellow' AS color,CURRENT_TIMESTAMP AS created_at

测试文件如下:

test_colors:model: colorsoutputs:query:- color: "Yellow"created_at: "2023-01-01 12:05:03"vars:execution_time: "2023-01-01 12:05:03"

还可以为执行时间设置时区,方法是在时间戳字符串中包含该时区。
如果提供了时区,目前的要求是测试的预期日期时间值必须是无时区的时戳,这意味着它们需要相应地进行偏移。
如果我们希望将时间冻结为 UTC+2,以下是上述测试的编写方式:

test_colors:model: colorsoutputs:query:- color: "Yellow"created_at: "2023-01-01 10:05:03"vars:execution_time: "2023-01-01 12:05:03+02:00"

自动生成测试

手动创建测试可能会显得单调乏味且容易出错,这就是为什么 SQLMesh 还提供了使用 create_test 命令来实现自动化处理这一过程的方法。
此命令能够为给定的模型生成完整的测试,只要其上游模型的表存在于项目的数据仓库中,并且这些表中已有数据即可。

实战示例

在这个示例中,我们将展示如何为 sqlmesh_example.incremental_model 生成测试用例。sqlmesh_example.incremental_model 是作为 sqlmesh init 命令的一部分提供的另一个模型,其定义如下:

MODEL (name sqlmesh_example.incremental_model,kind INCREMENTAL_BY_TIME_RANGE (time_column event_date),start '2020-01-01',cron '@daily',grain (id, event_date)
);SELECTid,item_id,event_date,
FROMsqlmesh_example.seed_model
WHEREevent_date BETWEEN @start_date AND @end_date

首先,我们需要明确上游模型 sqlmesh_example.seed_model 的输入数据。create_test 命令的执行始于对项目的数据仓库发出用户自定义的查询,以获取这些数据。

例如,以下查询将从与模型 sqlmesh_example.seed_model 相对应的表中返回三行数据:1

SELECT * FROM sqlmesh_example.seed_model LIMIT 3

接下来,请留意 sqlmesh_example.incremental_model 中包含一个引用了 @start_date 和 @end_date 宏变量的过滤条件。为了使生成的测试具有确定性,从而确保它总是能够成功,我们需要定义这些变量,并修改上述查询以相应地约束 event_date。

如果我们将 @start_date 设为 ‘2020-01-01’ 并将 @end_date 设为 ‘2020-01-04’,上述查询需要修改为:

SELECT * FROM sqlmesh_example.seed_model WHERE event_date BETWEEN '2020-01-01' AND '2020-01-04' LIMIT 3

运行此操作会创建以下新测试,其位于 tests/test_incremental_model.yaml 文件中:

test_incremental_model:model: sqlmesh_example.incremental_modelinputs:sqlmesh_example.seed_model:- id: 1item_id: 2event_date: 2020-01-01- id: 2item_id: 1event_date: 2020-01-01- id: 3item_id: 3event_date: 2020-01-03outputs:query:- id: 1item_id: 2event_date: 2020-01-01- id: 2item_id: 1event_date: 2020-01-01- id: 3item_id: 3event_date: 2020-01-03vars:start: '2020-01-01'end: '2020-01-04'

配置测试连接

对于给定的测试,可以更改测试连接。例如,当被测试的模型无法正确编译为默认测试引擎的方言时,这可能会很有用。
以下示例通过修改 test_example_full_model 来演示这一点,使其针对单线程本地 Spark 进程运行,该进程在项目的 config.yaml 文件中的 spark_testing 网关中定义为 test_connection:

gateways:local:connection:type: duckdbdatabase: db.dbspark_testing:test_connection:type: sparkconfig:# Run Spark locally with one worker thread"spark.master": "local"# Move data under /tmp so that it is only temporarily persisted"spark.sql.warehouse.dir": "/tmp/data_dir""spark.driver.extraJavaOptions": "-Dderby.system.home=/tmp/derby_dir"default_gateway: localmodel_defaults:dialect: duckdb

修改测试用例:

test_example_full_model:gateway: spark_testing# ... the other test attributes remain the same

最后总结

SQLMesh 的测试功能为数据工程师提供了一个强大的工具,用于确保数据模型的准确性和可靠性。通过自动化测试过程,SQLMesh 帮助团队在每次模型变更后都能快速验证其正确性。无论是手动创建测试还是使用自动测试生成工具,SQLMesh 都能有效地提升数据工程的质量和效率。对于希望在数据工程中实现更高可靠性的团队来说,SQLMesh 是一个不可或缺的工具。

相关文章:

SQLMesh 测试自动化:提升数据工程效率

在现代数据工程中&#xff0c;确保数据模型的准确性和可靠性至关重要。SQLMesh 提供了一套强大的测试工具&#xff0c;用于验证数据模型的输出是否符合预期。本文将深入探讨 SQLMesh 的测试功能&#xff0c;包括如何创建测试、支持的数据格式以及如何运行和调试测试。 SQLMesh …...

WPF使用SQLite与JSON文本文件结合存储体侧平衡数据的设计与实现

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

关系型数据库PostgreSQL vs MySQL 深度对比:专业术语+白话解析+实战案例

PostgreSQL 与 MySQL 的详细对比 PostgreSQL 和 MySQL 是两种最流行的开源关系型数据库&#xff0c;它们在设计理念、功能特性和适用场景上有显著差异。以下是它们的详细对比&#xff1a; 一、基本架构与设计理念 PostgreSQL&#xff1a;多进程架构&#xff0c;使用共享内存通…...

利用 SSRF 和 Redis 渗透

环境搭建 在本次实验中&#xff0c;我们使用 Docker 环境进行测试。 解压实验包&#xff0c;搭建 docker 环境。 docker环境 web的dockerfile 主要利用代码 &#xff1a; redis服务器 通过 docker-compose up -d 启动相关容器&#xff0c;初次启动失败。 发现 docker 版本问…...

脏读、幻读、可重复读

脏读 定义&#xff1a;一个事务读取了另一个事务尚未提交的数据 。比如事务 A 修改了某条数据但还没提交&#xff0c;此时事务 B 读取了这条被修改但未提交的数据。若事务 A 后续回滚&#xff0c;事务 B 读到的数据就是无效的&#xff0c;相当于读到了 “脏数据”。危害&#…...

第1讲、#PyTorch教学环境搭建与Tensor基础操作详解

引言 PyTorch是当前深度学习领域最流行的框架之一&#xff0c;因其动态计算图和直观的API而备受开发者青睐。本文将从零开始介绍PyTorch的环境搭建与基础操作&#xff0c;适合各种平台的用户和深度学习初学者。 1. 安装和环境搭建 macOS (Apple Silicon) 对于Mac M1/M2/M3用…...

【创新实训个人博客】数据库搭建

1.原因 为了降低模型使用以前训练的数据或者幻觉知识&#xff0c;我们在对话时需要提供相关内容的数据&#xff0c;同时由于需要最新的广告实时数据&#xff0c;实时爬取和版权问题。数据由团队在网上爬取&#xff0c;为了广告内容的有效性&#xff0c;如果长期使用&#xff0…...

《代码整洁之道》第6章 对象和数据结构 - 笔记

数据抽象 (Data Abstraction) 这个小节主要讲的是**面向对象编程&#xff08;OOP&#xff09;**的一种核心思想&#xff1a;对象应该隐藏它的内部数据&#xff0c;只暴露可以操作这些数据的“行为”&#xff08;也就是方法/函数&#xff09;。 大白话&#xff1a; 你创建一个…...

Python判断字符串中是否包含特殊字符

在 Python 中&#xff0c;判断一个字符串是否包含特殊字符可以通过多种方法实现。常见的特殊字符包括空格、感叹号、单引号、括号、星号、加号、逗号、斜杠、冒号、分号、等号、问号、 符号、方括号、花括号和 & 符号等。 为了判断字符串中是否包含这些特殊字符&#xff0…...

disruptor-spring-boot-start版本优化升级

文章目录 1.前言2.升级内容3.依赖4.总结 1.前言 由于之前写了一篇《disruptor-spring-boot-start生产实践导致pod节点CPU爆表100%的问题解决说明》的文章&#xff0c;里面说本地启动没有啥问题&#xff0c;后面我启动之前写的那个测试的controller发现&#xff0c;本地电脑的CP…...

复杂背景下无人机影像小目标检测:MPE-YOLO抗遮挡与抗背景干扰设计

目录 一、引言 二、挑战和贡献 密集小目标和遮挡 实时性要求与精度权衡 复杂背景 三、MPE-YOLO模型细节 多级特征集成器&#xff08;MFI&#xff09; 感知增强卷积&#xff08;PEC&#xff09; 增强范围C2f模块&#xff08;ES-C2f&#xff09; 四、Coovally AI模型训…...

项目实战 -- 状态管理

redux基础 还记得好久好久之前就想要实现的一个功能吗&#xff1f; 收起侧边栏折叠菜单&#xff0c;没错&#xff0c;现在才实现 因为不是父子通信&#xff0c;所以处理起来相对麻烦一点 可以使用状态树或者中间人模式 这就需要会redux了 Redux工作流&#xff1a; 异步就…...

基于单片机的智能药盒系统

标题:基于单片机的智能药盒系统 内容:1.摘要 本文聚焦于基于单片机的智能药盒系统。背景方面&#xff0c;随着人口老龄化加剧&#xff0c;老年人按时准确服药问题愈发凸显&#xff0c;同时现代快节奏生活也使人们容易遗忘服药时间。目的是设计并实现一个能帮助人们按时、按量服…...

【PyCharm- Python- ArcGIS】:安装一个和 ArcGIS 不冲突的独立 Python让PyCharm 使用 (解决全过程记录)

之前电脑上安装了anaconda3&#xff0c;python3和arcgis10.2.其中anaconda3带有python3&#xff0c;arcgis10.2自带python2.7。arcgis不能正常使用&#xff0c;之前为了使用arcgis&#xff0c;因此卸载了anaconda3和python3&#xff0c;PyCharm不能正常使用了 之前安装的卸载后…...

【C语言干货】回调函数

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、回调函数 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、回调函数 在 C 语言中&#xff0c;当你有一个函数并希望将其作…...

Redis使用总结

NoSQL 1.1为什么要用NoSQL 面对现在用户数据的急剧上升&#xff0c;我们需要对这些用户数据进行挖掘&#xff0c;传统的关系型数据库已经不适合这些 应用了.Nosql 的发展可以很了的处理这些大的数据. 1.2什么是NoSQL Not Only Sql->NoSQL(不仅仅是SQL) 非关系型数据库.随…...

现场问题排查-postgresql某表索引损坏导致指定数据无法更新影响卷宗材料上传

问题现象 今天突然被拉进一个群&#xff0c;说某地区友商推送编目结果报错&#xff0c;在我们自己的卷宗系统上传材料也一直转圈&#xff0c;也删除不了案件卷宗&#xff0c;重置模板也没用&#xff0c;只有个别案件有问题。虽然这事儿不属于我负责&#xff0c;但还是抽时间给…...

数字化转型的未来趋势:从工具到生态,聚焦生态合作、绿色转型与全球化布局

摘要 本文将深入探讨了数字化转型的演进路径&#xff0c;特别是从依赖单一数字化工具向构建和参与复杂商业生态系统的战略转变。分析表明&#xff0c;这一转变不仅是技术升级&#xff0c;更是商业模式、运营逻辑和价值创造方式的根本性变革。云计算、人工智能和大数据分析等 f…...

记录学习记录学习《手动学习深度学习》这本书的笔记(九)

马不停蹄地来到了第十二章&#xff1a;计算性能…… 感觉应该是讲并行计算方面的&#xff0c;比如GPU、CPU、CUDA那些。 第十二章&#xff1a;计算性能 12.1 编译器和解释器 这里先提出了命令式编程和符号式编程的概念。 命令式编程VS符号式编程 目前为止&#xff0c;本书…...

麒麟系统通过 Service 启动 JAR 包的完整指南

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…...

【记录maven依赖规则-dependencyManagement,dependencies】

记录maven依赖规则-dependencyManagement&#xff0c;dependencies 依赖方式 直接依赖 间接依赖 依赖关系 直接依赖&#xff1a; 父级管理定义的版本&#xff0c;并且在中进行引用了的版本。 优先使用dependencyManagement定义的版本。 间接依赖&#xff1a; 如果间接依赖…...

macos下mysql 5.7/8.0版本切换

1、首先安装好mysql 5.7/8.0&#xff0c;可以用brew进行安装 5.7 的原始配置文件路径&#xff1a; /usr/local/Cellar/mysql5.7/5.7.44_1/homebrew.mxcl.mysql5.7.plist 配置内容如下&#xff1a; 对应的.cnf配置文件内容如下&#xff1a; 8.0 的原始配置文件路径&#xff1…...

FPGA时钟设计

实现功能&#xff1a;基于Verilog的动态显示时钟设计&#xff0c;支持整点&#xff08;时:00:00&#xff09;闪烁功能。代码包含时钟计数、动态扫描、整点检测和闪烁控制模块&#xff1a; module dynamic_clock(input clk, // 主时钟&#xff08;假设50MHz&#xff0…...

【NVM】管理不同版本的node.js

目录 一、下载nvm 二、安装nvm 三、验证安装 四、配置下载镜像 五、使用NVM 前言&#xff1a;不同的node.js版本会让你在使用过程很费劲&#xff0c;nvm是一个node版本管理工具&#xff0c;通过它可以安装多种node版本并且可以快速、简单的切换node版本。 一、下载nvm htt…...

【今日三题】笨小猴(模拟) / 主持人调度(排序) / 分割等和子集(01背包)

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;每日两三题 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 笨小猴(模拟)主持人调度(排序)分割等和子集(01背包) 笨小猴(模拟) 笨小猴 #include <iostream> #include <string…...

android10 卸载应用出现回退栈异常问题

打开设置&#xff0c;打开APP1&#xff0c;使用adb uninstall 卸载APP1/或者杀掉APP1进程&#xff0c;没有回到设置而是回到了桌面 抓取eventlog&#xff0c;查看ams/wms打印&#xff0c;发现“am_focused_stack: appDied leftTaskHistoryEmpty”源码中搜索“leftTaskHistoryE…...

位置差在坐标系间的相互转换

1 NED转经纬高 &#xff08;n 系下的北向、东向和垂向位置差异&#xff08;单位 m&#xff09;转化为纬度、经度和高程分量的差异&#xff09; 2 基站坐标转换 纬度、经度、高程 到 ECEF %纬度、经度、高程 到 ECEF clc; clear; glvs; addpath(genpath(E:\GNSSINS\ACES)…...

在线重定义——分区表改造

在数据库管理过程中&#xff0c;随着数据量的不断增长&#xff0c;普通表的查询、维护成本不断上升。为了提升查询性能和管理效率&#xff0c;通常需要将大表进行分区处理。 本文介绍如何使用 Oracle 在线重定义&#xff08;DBMS_REDEFINITION&#xff09; 的方式对现有大表进行…...

day51—二分法—x 的平方根(LeetCode-69)

题目描述 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 …...

网络安全漏洞现状与风险管理分析

在当今数字化时代&#xff0c;网络安全已成为企业和组织不可忽视的核心问题。网络环境的日益复杂和攻击手段的不断升级&#xff0c;使得漏洞管理成为网络安全战略中的关键环节。下面将详细分析当前网络安全领域的漏洞现状及有效的风险管理策略。 当前网络安全面临的挑战 高危漏…...

二、Web服务常用的I/O操作

一、单个或者批量上传文件 前端&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>文件…...

Pinia——Vue的Store状态管理库

一、Store 是什么&#xff1f; Store (如 Pinia) 是一个保存状态和业务逻辑的实体&#xff0c;它并不与你的组件树绑定。换句话说&#xff0c;它承载着全局状态。它有点像一个永远存在的组件&#xff0c;每个组件都可以读取和写入它。它有三个概念&#xff0c;state、getter 和…...

生成式人工智能认证(GAI认证)适合那些人考?

在人工智能浪潮席卷全球的今天,你是否曾思考过:当机器开始创作诗歌、设计建筑、撰写代码,甚至模拟人类思维时,我们该如何与这个“新物种”共处?更关键的是,当生成式人工智能(Generative AI)从实验室走向千行百业,谁将成为驾驭这场技术革命的“领航者”?答案或许藏在一…...

使用cmd来创建数据库和数据库表-简洁步骤

创建数据库和表&#xff1a; 1. 按WinR打开“运行”&#xff0c;输入cmd&#xff0c;回车 2. 登录数据库&#xff1a;mysql -u root -p 然后输入密码 3. 创建数据库create database myblog; myblog为数据库名(自定义你的数据库名) &#xff01;注意分号不要漏了&#xff01; …...

微博安卓版话题热度推荐算法与内容真实性分析

微博是目前最受欢迎的社交平台之一&#xff0c;它的推荐算法在推动话题热度和内容传播方面发挥着重要作用。然而&#xff0c;这一算法也引发了对于内容真实性的担忧。本文将通过分析微博安卓版的推荐机制&#xff0c;探讨其对话题热度的影响以及内容真实性问题。 微博的推荐算法…...

助力产业升级 | BMC安全启动方案上新了!

近日&#xff0c;OurBMC 社区联合其理事成员单位中移&#xff08;苏州&#xff09;软件技术有限公司&#xff0c;在产业化落地SIG发布计算机系统安全可信创新解决方案——《 BMC 安全启动方案》。该方案为开发者提供了清晰、可实现的技术实施路径&#xff0c;可有效助力开发者提…...

Python中使用Redis的参数

Python中使用Redis通常是通过redis-py这个库来实现的。redis-py是一个Python客户端&#xff0c;它提供了对Redis数据库的完整操作接口。在使用redis-py时&#xff0c;你需要通过连接参数来配置与Redis服务器的连接。下面是一些常用的连接参数及其解释&#xff1a; host 描述&…...

tensorflow使用详解

一、TensorFlow基础环境搭建 安装与验证 # 安装CPU版本 pip install tensorflow# 安装GPU版本&#xff08;需CUDA 11.x和cuDNN 8.x&#xff09; pip install tensorflow-gpu# 验证安装 python -c "import tensorflow as tf; print(tf.__version__)"核心概念 Tensor…...

FreeMarker语法深度解析与Node.js集成实践指南

一、FreeMarker核心语法体系 1.1 基础模板结构 <#-- 注释语法 --> ${expression} <#-- 输出表达式 --> <#directive paramvalue> <#-- 指令语法 -->1.2 数据类型处理 标量类型深度处理&#xff1a; <#assign num 123.45?floor> <#--…...

如何实现一个可视化的文字编辑器(C语言版)?

一、软件安装 Visual Studio 2022 Visual Studio 2022 是微软提供的强大集成开发环境&#xff08;IDE&#xff09;&#xff0c;广泛用于C/C、C#、Python等多种编程语言的开发。它提供了许多强大的工具&#xff0c;帮助开发者编写、调试和优化代码。 1.下载 Visual Studio 202…...

学习海康VisionMaster之路径提取

一&#xff1a;进一步学习了 今天学习下VisionMaster中的路径提取&#xff1a;可在绘制的路径上等间隔取点或查找边缘点 二&#xff1a;开始学习 1&#xff1a;什么是路径提取&#xff1f; 相当于事先指定一段路径&#xff0c;然后在对应的路径上查找边缘&#xff0c;这个也是…...

【MCP Node.js SDK 全栈进阶指南】中级篇(6):MCP与Web框架集成

背景 在现代Web开发生态中,框架已成为构建高效、可维护应用的核心基础设施。将MCP TypeScript-SDK与流行的Web框架集成,能够充分发挥两者的优势,构建功能丰富、交互智能的现代应用。本文将深入探讨MCP与主流Web框架的集成方法、最佳实践和架构设计,帮助开发者构建强大而灵…...

vue3+vite 项目中使用 Echarts 5.0 按需引入教程

效果图 第一步&#xff0c;封装 ECharts 工具函数 在 utils 目录下新建一个 echarts.js 文件&#xff0c;位置随意这里只引入了 折线图和拼团&#xff0c;需要其他的图自行引入 import * as echarts from "echarts/core"; import { LineChart, PieChart } from "…...

Unreal Engine 实现软件测试方案的仿真体验

以下将以一款模拟物流仓储管理软件的测试为例&#xff0c;详细阐述如何利用 Unreal Engine 实现软件测试方案的仿真体验。 1. 明确测试目标与需求 功能方面&#xff1a;要验证货物出入库管理、库存盘点、货物定位、叉车调度等功能的准确性和稳定性。性能方面&#xff1a;测试…...

蓝绿部署的详细规划文档

一、蓝绿部署概述 蓝绿部署是一种通过运行两套完全相同的生产环境(蓝色和绿色)实现零停机发布的策略。核心流程为:在绿色环境部署新版本并验证通过后,将流量逐步切换至绿色环境,若出现问题可快速回滚至蓝色环境。该策略适用于对可用性要求极高的系统(如金融、电商),可…...

【SpringMVC】概念引入与连接

目录 1.前言 2.正文 2.1SpringMVC是什么 2.2详解RequestMapping注解 2.3创建Spring项目 2.4建立连接 2.5Postman 3.小结 1.前言 哈喽大家好&#xff0c;今天来给大家带来Spring相关的学习&#xff0c;主要内容有概念的讲解以及如何分别通过Java代码和工具Postman来建立…...

NodeJs模块化与JavaScript的包管理工具

Js&#xff1a;模块化规范的文章链接&#xff1a;https://blog.csdn.net/Y1914960928/article/details/131793004?spm1011.2415.3001.5331 一、模块化&#xff1a; 1、导入文件的注意事项&#xff1a; ① 导入路径建议写 相对路径&#xff0c;且不能省略 ./ 和 ../ ② 文件…...

一、接口测试01

目录 一、接口1. 概念2. 接口的类型 二、接口测试1. 概念 三、HTTP协议1. HTTP协议简介2. URL格式2.1 练习 3. HTTP请求3.1 整体格式3.2 fiddler 抓包验证3.3 请求行3.4 请求头3.5 请求体3.6 练习 4. HTTP响应4.1 整体格式4.2 状态行4.3 响应头4.4 响应体4.5 练习 5. 传统风格接…...

CISA、项目管理、信息系统项目等等电子书资料

概述 在数字化转型浪潮中&#xff0c;教育工作者与技术管理者如何把握前沿趋势&#xff1f;我们精选了覆盖教育研究、IT治理与项目管理的系列电子资源&#xff0c;为职场精英打造知识升级方案。资料已整理好&#xff1a;https://pan.quark.cn/s/9c8a32efc89e 内容介绍 包含教…...

神经网络(自己记录)

一、神经网络基础 5分钟-通俗易懂 - 神经网络 反向传播算法&#xff08;手算&#xff09;_哔哩哔哩_bilibili 二、GAT...