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

SQLMesh系列教程-3:SQLMesh模型属性详解

SQLMesh 的 MODEL 提供了丰富的属性,用于定义模型的行为、存储、调度、依赖关系等。通过合理配置这些属性,可以构建高效、可维护的数据管道。在 SQLMesh 中,MODEL 是定义数据模型的核心结构,初学SQLMesh,定义模型看到属性会很迷惑,本文主要解释sqlmesh的模型属性,为后续继续学习打基础。

在这里插入图片描述

模型属性

在 SQLMesh 中,MODEL 是定义数据模型的核心结构,除了 kind 属性外,还有许多其他属性可以配置。MODEL DDL语句具有各种属性,这些属性用于元数据和控制行为。在模型配置参考中了解有关这些属性及其默认值的更多信息。以下是 MODEL 的常见属性及其说明,以及一个完整示例。

  • name

Name指定模型的名称。该名称表示模型输出的产品视图名称,因此它通常采用“schema”.“view_name”的形式。在SQLMesh项目中,模型的名称必须是唯一的。

当模型在非生产环境中使用时,SQLMesh会自动为模型名称添加前缀。例如,考虑一个名为“sushi”、“customers”的模型。在dev中,它的视图命名为“sushi__dev”.“customers”。

name属性是必需的,并且必须是唯一的,除非启用了名称自动推断。
在这里插入图片描述

- project

Project指定模型所属的项目的名称。用于多仓库SQLMesh部署。

  • Kind

Kind指定模型的类型。模型的类型决定了如何计算和存储模型。SQL模型的默认类型是VIEW,这意味着创建一个视图,并且每次访问该视图时都要运行查询。另一方面,Python模型的默认类型是FULL,这意味着每次计算模型时都会创建一个表并执行Python代码。每个类型未来我们会分别详细说明,你也可以参考官网文档。

  • audits(审计)

审计指定在评估模型后应该运行哪些审计。

  • dialect(方言)

Dialect定义模型的SQL方言。默认情况下,它使用配置文件model_defaults方言键中的方言。SQLGlot库支持的所有SQL方言都是允许的。

  • owner

Owner指定模型的主要联系人是谁。对于拥有许多数据合作者的组织来说,这是一个重要的领域。

  • stamp

一个可选的任意字符串序列,用于在不更改定义的功能组件的情况下创建新的模型版本。

  • tags

标签是用于组织模型的一个或多个标签。

  • cron

Cron用于调度模型处理或刷新数据的时间。它接受一个cron表达式或@hour、@daily、@weekly或@monthly中的任意一个。所有时间都假定为UTC时区-不可能在不同的时区中指定它们。

  • interval_unit

间隔单元确定用于计算模型的时间间隔的时间粒度。缺省情况下,间隔单位是自动从cron表达式派生出来的,不需要指定。

支持的取值为:year, month, day, hour, half_hour, quarter_hour, five_minute.

与cron的关系

SQLMesh调度器需要来自模型的两个时间信息片段:模型应该运行的特定时间,以及处理或存储数据的最佳时间粒度。interval_unit指定了粒度。

如果模型的cron参数是一个频率,比如@daily,那么运行时间和interval_unit就很容易确定:模型准备在一天开始时运行,它的interval_unit是day。类似地,@hour的cron准备在每个小时开始时运行,其interval_unit为hour。

但是,如果用cron表达式指定cron, SQLMesh将使用更复杂的方法派生interval_unit。

cron表达式可以生成复杂的时间间隔,因此SQLMesh不会直接解析它。相反, 处理过程如下:

  1. 从cron表达式生成接下来的五个运行时(相对于计算时间)

  2. 计算这五个值之间的间隔的持续时间

  3. 确定模型的interval_unit为小于或等于的最大间隔单位值

例如,考虑一个对应于“每43分钟运行一次”的cron表达式。它的interval_unit是half_hour,因为这是小于43分钟的最大interval_unit值。如果cron表达式是“每67分钟运行一次”,那么在相同的逻辑下,它的interval_unit是小时。

然而,interval_unit不需要从cron中推断出来——您可以显式地指定它来定制回填的方式。

指定interval_unit

模型通常以有规律的节奏运行,每次运行之间经过的时间相同,每次运行中处理数据的时间长度相同。

例如,一个模型可能每天在午夜运行(每天运行1次),以处理前一天的数据(每次运行1天的数据)。两次运行之间的时间长度和每次运行中处理的数据的时间长度都是1天(如果您错过了一次运行,则都是2天)。

但是,运行节奏长度和处理过的数据长度不必相同。

考虑一个每天早上7:30运行并处理数据直到今天早上7点的模型。模型的cron是表示“每天早上7:30运行”的cron表达式,SQLMesh从中推断出每天的interval_unit。

当这个模型运行时会发生什么?首先,SQLMesh将识别最近完成的时间间隔。interval_unit被推断为day,所以最后一个完整的间隔是昨天。在运行中,SQLMesh将不包含今天上午12:00到7:00之间的任何数据。

要包含今天的数据,请手动指定一个以小时为单位的间隔。当模型在7:30am运行时,SQLMesh将把最近完成的小时间隔标识为6:00-7:00am,并在回填中包含该间隔内的数据。

MODEL (name sqlmesh_example.up_until_7,kind INCREMENTAL_BY_TIME_RANGE (time_column date_column,),start '2024-11-01',cron '30 7 * * *', -- cron expression for "every day at 7:30am"interval_unit 'hour', -- backfill up until the most recently completed hour (rather than day));

下面我们再配置一个模型:

  • 每小时运行一次
  • 每次运行时处理最近两天的数据
  • 处理迄今为止在每次运行中积累的数据

配置此模型需要通过设置模型配置allow_partials True让SQLMesh处理部分完成的间隔。部分间隔的数据只是临时的——SQLMesh将在整个间隔完成后重新处理它。

MODEL (name sqlmesh_example.demo,kind INCREMENTAL_BY_TIME_RANGE (time_column date_column,lookback 2, -- 2 days of late-arriving data to backfill),start '2024-11-01',cron '@hourly', -- run model hourly, not tied to the interval_unitallow_partials true, -- allow partial intervals so today's data is processed in each runinterval_unit 'day', -- finest granularity of data to be time bucketed
);

lookback 以天为单位计算,因为模型的interval_unit指定为天。

  • start

Start用于确定处理模型所需的最早时间。它可以是绝对日期/时间(2022-01-01),也可以是相对日期/时间(1年前)。

  • end

End用于确定处理模型所需的最晚时间。它可以是绝对日期/时间(2022-01-01),也可以是相对日期/时间(1年前)。

  • description

描述属性是可选的。自动注册为底层SQL引擎的表描述/注释(如果引擎支持)。

  • column_descriptions

可选的键/值对字典。自动注册为底层SQL引擎的列描述/注释(如果引擎支持)。如果不存在,内联注释将自动注册。示例如下:

    column_descriptions (id = 'primary key',letter = 'alphabet letter',value = 'random value',updated_date = 'updated date',new_col = 'a new column')
  • grain

模型的粒度是在模型查询返回的结果中唯一标识一行的列或列的组合。如果设置了粒度,像table_diff这样的SQLMesh工具会更容易运行,因为它们会自动使用模型粒度来指定参数,否则需要手动指定。

  • grains

如果一个模型有多个唯一键或键的组合,那么它可以定义多个粒度。

  • references

引用是标识到另一个模型的连接关系的非唯一列或列的组合。

例如,一个模型可以定义一个引用account_id,这将表明它现在可以自动连接到任何具有account_id粒度的模型。它不能安全地连接到具有account_id引用的表,因为引用不是唯一的,这样做将构成多对多连接。

有时列的名称不同,在这种情况下,可以将列名称别名设为公共实体名称。例如,guest_id AS account_id将允许列为guest_id的模型连接到粒度为account_id的模型。

  • depends_on

Depends显式地指定模型所依赖的模型,以及从模型代码中自动推断出来的模型。

  • table_format

对于支持iceberg和hive等表格式的引擎来说,表格式是一个可选属性,其中物理文件格式是可配置的。目的是使用table_format定义表类型,然后使用storage_format定义表内文件的磁盘格式。

请注意,此属性仅适用于允许独立于storage_format配置table_format的引擎。

  • storage_format

存储格式是Spark或Hive等支持parquet和orc等存储格式的引擎的属性。请注意,有些引擎不会区分table_format和storage_format,在这种情况下,使用storage_format而忽略table_format。

  • partitioned_by

分区起两个作用。对于大多数模型类型,它是支持表分区(如Spark或BigQuery)的引擎的可选属性。

对于INCREMENTAL_BY_PARTITION模型类型,它定义了用于增量加载数据的分区键。

它可以指定多列分区键或修改用于分区的日期列。例如,在BigQuery中,你可以使用partitioned_by TIMESTAMP_TRUNC(event_ts, day)提取时间戳列event_ts的日期组件,从而按天进行分区。

  • clustered_by

Clustered by是Bigquery等支持集群的引擎的可选属性。

  • columns

默认情况下,SQLMesh从其SQL查询推断模型的列名和类型。通过在模型的columns属性中手动指定所有列名和数据类型来禁用该行为。

**警告:**如果columns属性包含查询未返回的列、省略查询返回的列或指定查询返回的数据类型以外的数据类型,SQLMesh可能会出现意外行为。

例如,下面示例包含columns键的seed模型定义。它指定文件中所有列的数据类型:holiday_name列的数据类型是VARCHAR, holiday_date列的数据类型是DATE。

MODEL (name test_db.national_holidays,kind SEED (path 'national_holidays.csv'),columns (holiday_name VARCHAR,holiday_date DATE)
);

注意:返回dataframe的Python模型需要指定列名和数据类型。

  • physical_properties

以前命名为table_properties

physical_properties是应用于物理层中的模型表/视图的任意属性的键值映射。注意分区细节和creatable_type,它覆盖了所创建的模型/视图的类型。在本例中,它创建了一个TRANSIENT TABLE。虽然creatable_type是通用的,但其他属性是特定于适配器的,因此请查看引擎文档。例如:

MODEL (...,physical_properties (partition_expiration_days = 7,require_partition_filter = true,creatable_type = TRANSIENT)
);
  • virtual_properties

virtual_properties是应用于虚拟层中的模型视图的任意属性的键值映射。注意分区细节和creatable_type,它覆盖了所创建的模型/视图的类型。在本例中,它创建了一个SECURE VIEW。虽然creatable_type是通用的,但其他属性是特定于适配器的,因此请查看引擎文档。例如:

MODEL (...,virtual_properties (creatable_type = SECURE,labels = [('test-label', 'label-value')])
);
  • session_properties

会话属性是应用于引擎会话的特定于目标引擎的任意属性的键值映射。

  • allow_partials

指示此模型可以对部分(不完整)数据间隔执行。

默认情况下,每个模型只处理完整的间隔,以防止部分数据引起的常见错误。区间的大小由模型的interval_unit决定。

将allow_partials设置为true将覆盖此行为,这表明模型可能会处理丢失某些数据点的输入数据段。

注意:将此属性设置为true将忽略cron属性。

  • enabled

是否启用模型。默认情况下,此属性为true。将其设置为false将导致SQLMesh在加载项目时忽略此模型。

  • physical_version

将此模型的物理表的版本固定到给定的值。

注意:这只能为仅向前的模型设置。

  • gateway

指定要用于执行此模型的网关。如果不指定,则使用默认网关。

  • optimize_query

模型的查询是否需要优化。默认情况下,所有SQL模型都是优化的。将其设置为false将导致SQLMesh禁用查询规范化和简化。只有当优化后的查询导致错误(如超出文本限制)时,才应该关闭该功能。

  • validate_query

是否在编译时验证模型的查询。默认情况下,该属性为false。将其设置为true会导致SQLMesh引发错误而不是发出警告。这将在SQL语句中显示无效的列,以及包含SELECT *的模型,这些模型不能自动展开以列出所有列。这样可以确保在花费时间和金钱在数据仓库中运行SQL之前在本地验证SQL。

完整示例

以下是一个完整的 SQLMesh 模型定义示例,展示了多个属性的使用:

MODEL (name sales.fact_sales,                -- 模型名称kind INCREMENTAL,                     -- 模型类型为增量模型storage_format 'PARQUET',             -- 存储格式为 Parquetpartitioned_by 'order_date',          -- 按 order_date 分区clustered_by ['customer_id'],         -- 按 customer_id 聚类tags ['sales', 'fact'],               -- 添加标签description 'Fact table for sales data',  -- 模型描述columns {                             -- 显式定义列order_id INT,customer_id INT,product_id INT,order_date DATE,quantity INT,amount DECIMAL(10, 2)},dependencies ['raw_sales'],           -- 依赖 raw_sales 表unique_key ['order_id'],              -- 唯一键为 order_idgrained_by 'order_date',              -- 数据粒度为 order_dateallow_incremental TRUE,               -- 允许增量运行cron '0 0 * * *',                     -- 每天凌晨运行owner 'data_team',                    -- 负责人为 data_teampre {                                 -- 前置钩子DELETE FROM sales.fact_sales WHERE order_date = @execution_date;},post {                                -- 后置钩子ANALYZE TABLE sales.fact_sales;}
);-- 模型查询逻辑
SELECTorder_id,customer_id,product_id,order_date,quantity,amount
FROMraw_sales
WHEREorder_date > @prev_execution_date;    -- 只处理新增数据

总结

SQLMesh 的 MODEL 提供了丰富的属性,用于定义模型的行为、存储、调度、依赖关系等。通过合理配置这些属性,可以构建高效、可维护的数据管道。以上示例展示了如何结合多个属性来定义一个完整的增量模型。

相关文章:

SQLMesh系列教程-3:SQLMesh模型属性详解

SQLMesh 的 MODEL 提供了丰富的属性,用于定义模型的行为、存储、调度、依赖关系等。通过合理配置这些属性,可以构建高效、可维护的数据管道。在 SQLMesh 中,MODEL 是定义数据模型的核心结构,初学SQLMesh,定义模型看到属…...

【Maven】多module项目优雅的实现pom依赖管理

【Maven】多module项目优雅的实现pom依赖管理 【一】方案设计原则【二】项目结构示例【三】实现思路【1】可能的问题点:【2】解决方案的思路:【3】需要注意的地方:【4】可能的错误: 【四】实现案例【1】父POM设计(pare…...

【数字】异步FIFO面试的几个小问题与跨时钟域时序约束

入门数字设计的时候,跨时钟域的数据处理是绕不开的课题,特别是多比特数据跨时钟域时,都会采用异步FIFO的方法。 异步FIFO中涉及较多的考点这里记录几个以供大家参考。 1. 异步FIFO的空满判断分别在哪个域? 根据异步FIFO的结构&…...

云原生时代的开发利器

云原生时代的开发工具集之中,至少应有这样一种利器:基于微服务架构的低代码开发平台,同时与业界标准的云原生技术支撑设施能够完全协同和融合。低代码开发平台的构建不仅仅是采用微服务开发框架,更加重要的是符合当前主流的中台和…...

利用IDEA将Java.class文件反编译为Java文件:原理、实践与深度解析

文章目录 引言:当.class文件遇到源代码缺失第一章:反编译技术基础认知1.1 Java编译执行原理1.2 反编译的本质1.3 法律与道德边界 第二章:IDEA内置反编译工具详解2.1 环境准备2.2 三步完成基础反编译2.3 高级反编译技巧2.3.1 调试模式反编译2.…...

C++ Primer 参数传递

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...

2.7 静态方法/构造函数Mock

静态方法/构造函数Mock 在单元测试中,静态方法和构造函数的Mock是相对复杂的需求,因为Mockito的核心设计基于对象实例的模拟。然而,通过扩展工具或特定技巧,可以实现对这些场景的处理。本章详解两种主流方案:PowerMoc…...

注册Gmail如何跳过手机验证环节?

很多小伙伴在注册Gmail的时候都会遇到一个难题:手机号码验证,有可能包括了“手机号无法验证” “国内手机号验证失败” “收不到验证码”等等问题,但 根据真实案例,还有部分人则是“幸运地”没有手机号验证环节,那么今…...

【算法专场】哈希表

目录 前言 哈希表 1. 两数之和 - 力扣(LeetCode) 算法分析 算法代码 面试题 01.02. 判定是否互为字符重排 ​编辑算法分析 算法代码 217. 存在重复元素 算法分析 算法代码 219. 存在重复元素 II 算法分析 算法代码 解法二 算法代码 算法…...

5、pod 详解 (kubernetes)

pod 详解 (kubernetes) Pod 的基础概念pause 容器Pod 的分类与创建自主式 Pod控制器管理的 Pod静态 Pod Pod容器的分类基础容器(infrastructure container)初始化容器(initcontainers)应用容器(…...

二叉树详解:Java实现与应用

在计算机科学中,数据结构是构建高效算法的基石,而二叉树作为一种基础且重要的树形结构,在诸多领域都有着广泛应用,如数据库索引、文件系统、编译器设计等。本文将从基础概念入手,带你逐步深入理解二叉树,并…...

GPT和BERT

笔记来源: Transformer、GPT、BERT,预训练语言模型的前世今生(目录) - B站-水论文的程序猿 - 博客园 ShusenWang的个人空间-ShusenWang个人主页-哔哩哔哩视频(RNN模型与NLP应用) 一、GPT 1.1 GPT 模型的…...

【工业安全】-CVE-2024-30891- Tenda AC18路由器 命令注入漏洞

1.漏洞描述 2.漏洞复现 2.1 qemu-user 模拟: 2.2 qemu-system模拟: 3.漏洞分析 4.poc代码: 1.漏洞描述 漏洞编号:CVE-2024-30891 漏洞名称:Tenda AC18 命令注入 威胁等级:高危 漏洞详情:Ten…...

如何从0开始将vscode源码编译、运行、打包桌面APP

** 网上关于此的内容很少,今天第二次的完整运行了,按照下文的顺序走不会出什么问题。最重要的就是环境的安装,否则极其容易报错,请参考我的依赖版本以及文末附上的vscode官方指南 ** 第一步:克隆 VSCode 源码 首先…...

登录弹窗效果

1,要求 点击登录按钮,弹出登录窗口 提示1:登录窗口 display:none 隐藏状态; 提示2:登录按钮点击后,触发事件,修改 display:block 显示状态 提示3:登录窗口中点击关闭按钮&#xff0…...

wps或office的word接入豆包API(VBA版本)

直接上代码,由于时间匆忙,以后写个详细的教程 #If VBA7 ThenPrivate Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As…...

深入浅出 Python Logging:从基础到进阶日志管理

在 Python 开发过程中,日志(Logging)是不可或缺的调试和监控工具。合理的日志管理不仅能帮助开发者快速定位问题,还能提供丰富的数据支持,让应用更具可观测性。本文将带你全面了解 Python logging 模块,涵盖…...

系统巡检脚本分享:守护服务器的“健康卫士”

在日常的运维工作中,系统巡检是一项至关重要的任务。它可以帮助我们及时发现服务器的潜在问题,确保系统的稳定运行。今天,我想和大家分享一个实用的系统巡检脚本,它能够帮助我们快速、全面地检查服务器的健康状况。 一、为什么需…...

【Elasticsearch】运行时字段(Runtime Fields)索引时定义运行时字段

在 Elasticsearch 中,运行时字段(Runtime Fields)是一种在查询时动态计算的字段,而不是在索引时预先存储的字段。运行时字段为数据处理提供了极大的灵活性,尤其是在处理结构不固定的日志数据或需要动态生成字段值的场景…...

C++从入门到实战(四)C++引用与inline,nullptr

C从入门到实战(四)C引用与inline,nullptr 前言一、C 引用(一)什么是引用(二)引用的特点(三)引用作为函数参数(四)引用作为函数返回值(…...

DeepSeek 助力 Vue 开发:打造丝滑的卡片(Card)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...

Azure Synapse Dedicated SQL Pool统计指定表中各字段的空值、空字符串或零值比例

-- 创建临时表存储结果 CREATE TABLE #Results (DatabaseName NVARCHAR(128),TableName NVARCHAR(128),ColumnName NVARCHAR(128),DataType NVARCHAR(128),NullOrEmptyCount INT,TotalRows INT,Percentage DECIMAL(10,2) );DECLARE db_name SYSNAME DB_NAME(); -- 获取当前数…...

【深度学习】计算机视觉(CV)-目标检测-SSD(Single Shot MultiBox Detector)—— 单次检测多框检测器

🔹 SSD(Single Shot MultiBox Detector)—— 单次检测多框检测器 1️⃣ 什么是 SSD? SSD (Single Shot MultiBox Detector) 是一种用于 目标检测(Object Detection) 的 深度学习模型,由 Wei L…...

力扣100. 相同的树(利用分解思想解决)

Problem: 100. 相同的树 文章目录 题目描述思路Code 题目描述 思路 题目要求判断两个二叉树是否完全相同,而此要求可以利用问题分解的思想解决,即判断当前节点的左右子树是否完全相同,而在二叉树问题分解的一般题目中均会带有返回值&#xff…...

在SpringBoot服务器端采购上,如何选择操作系统、Cpu、内存和带宽、流量套餐

在Spring Boot服务器端采购时,选择操作系统、CPU、内存、带宽和流量套餐需根据应用需求、预算和性能要求综合考虑。以下是具体建议: 1. 操作系统 Linux发行版(如Ubuntu、CentOS):适合大多数Spring Boot应用&#xff…...

我的新书《青少年Python趣学编程(微课视频版)》出版了!

🎉 激动人心的时刻来临啦! 🎉 小伙伴们久等了,我的第一本新书 《青少年Python趣学编程(微课视频版)》 正式出版啦! 📚✨ 在这个AI时代,市面上的Python书籍常常过于枯燥&…...

elementUI rules 判断 el-cascader控件修改值未生效

今天修改一个前端项目,增加一个多选字段,使用的是el-cascader控件,因页面是通过引用子页面组件形式使用,出现一个点选后再勾选原有值,输入框内不展示或取消后的也未正常隐藏,如果勾选的值是全新的则其他已选…...

深度学习与人工智能:解锁未来的无限可能

在当今这个科技飞速发展的时代,深度学习和人工智能已不再只是科幻小说中的概念,它们正以惊人的速度渗透到我们生活的方方面面,从智能手机上的语音助手到医疗领域的疾病诊断,从自动驾驶汽车到金融市场的风险预测,其影响…...

pwa应用进阶2-动态加载manifest.json文件

接pwa应用进阶-区分AB面-添加安装按钮而且区分不同的系统和浏览器的各种情况继续优化,主要是让manifest.json文件动态加载。 pwa应用进阶2-动态加载manifest.json文件 主要用途如下: 动态切换PWA的清单文件,例如根据不同的语言或者主题加载不…...

UI用例调试_元素能定位到且不在frame内_无法点击/录入文本

关于单据新增,编辑子集信息遇到的2个阻塞点,做记录已供后续参考 1、新增按钮元素能定位,就是无法点击 实现效果: 单据新增时,前面单据数据编辑完之后,开始新增证件信息,需要先点击新增按钮。…...

Python的web框架Flask适合哪些具体的应用开发?

Flask 适用的具体应用及实现案例代码 Flask 是一个轻量级的 Web 应用框架,以其简洁性和灵活性而广受欢迎。以下是 Flask 适合的具体应用场景及相关的实现案例代码: 1. 小型网站或博客 由于 Flask 的简洁性和易于使用的特性,它非常适合用来搭建个人博客或者小型的企业网站…...

oracle使用动态sql将多层级组织展平

ERP或者其他企业管理软件中都会有一张组织机构表,可以写固定sql的方式将其展平获取组织表中的字段信息,如负责人、上级组织负责人、分管领导、成立时间等。但是这种方式有个缺陷,就是如果只写到处理4个层级,那么后期层级增多就无法…...

vue学习笔记10

ChatGPT & Copilot AI 的认知 两个工具 1、ChatGPT 3.5 2、Github Copilot ChatGPT 的基本使用 - Prompt 优化 AI 互动的过程中,容易出现的问题: 1、 AI未能理解问题的核心要点 2、 AI的回答过于宽泛 或 过于具体 3、 AI提供了错误的信息或…...

网络安全常识

随着互联网和移动互联网的持续火热,人们的生活也越来越离不开网络,网络安全,在这个信息化时代显得尤为重要,那么网络攻击和安全,这一攻守之间,主要涵盖哪些要点呢,下面我们就来对此进行抽丝剥茧…...

如何在 Visual Studio Code 中使用 DeepSeek R1 和 Cline?

让我们面对现实吧:像 GitHub Copilot 这样的 AI 编码助手非常棒,但它们的订阅费用可能会在你的钱包里烧一个洞。进入 DeepSeek R1 — 一个免费的开源语言模型,在推理和编码任务方面可与 GPT-4 和 Claude 3.5 相媲美。将它与 Cline 配对&#…...

从Sora到有言:3D视频生成技术的突破与应用

近年来,AIGC领域飞速发展,这个词也越来越高频地出现在了大家的生活中。AIGC 能完成的任务也越来越多,大模型的能力飞速增长 —— 从Deepseek生成文字,到StableDiffusion生成图像,再到Sora可以生成视频。 而现在&#x…...

算法18(力扣136)只出现一次的数字

1、问题 给你一个 非空 整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 2、示例 (1&…...

基于HTML5 Canvas 和 JavaScript 实现的烟花动画效果

以下是一个使用 HTML5 Canvas 和 JavaScript 实现的烟花动画效果代码盒子: <!DOCTYPE html> <html> <head><title>烟花效果...

网络变压器的主要电性参数与测试方法(1)

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;网络变压器的主要电性参数与测试方法&#xff08;1&#xff09;.. 今天我们就一起先来看看网络变压器的2个主要电性参数与它的测试方法&#xff1a; 1. 开路电感&#xff08;OCL or Lx----Open Circuit Ind…...

Python + WhisperX:解锁语音识别的高效新姿势

大家好&#xff0c;我是烤鸭&#xff1a; 最近在尝试做视频的质量分析&#xff0c;打算利用asr针对声音判断是否有人声&#xff0c;以及识别出来的文本进行进一步操作。asr看了几个开源的&#xff0c;最终选择了openai的whisper&#xff0c;后来发现性能不行&#xff0c;又换了…...

Qt的isVisible ()函数介绍和判断窗口是否在当前界面显示

1、现象&#xff1a;当Qt的窗口最小化时&#xff0c;isVisible值一定是true&#xff0c;这是正常的。 解释&#xff1a;在Qt中&#xff0c;当你点击窗口的最小化按钮时&#xff0c;Qt内部不会自动调用 hide() 方或 setVisible(false) 来隐藏窗口。相反&#xff0c;它会改变窗口…...

Github 2025-02-12 C开源项目日报 Top7

根据Github Trendings的统计,今日(2025-02-12统计)共有7个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目7Python项目2OpenSSL - 强大的开源加密工具包 创建周期:4012 天开发语言:C协议类型:Apache License 2.0Star数量:23449 个Fork数量:10…...

PostgreSQL 数据类型

PostgreSQL 数据类型 PostgreSQL 是一款功能强大的开源关系型数据库管理系统,它以其出色的性能、灵活的数据类型和强大的扩展性而闻名。在 PostgreSQL 中,数据类型是构建数据库表和执行各种操作的基础。本文将详细介绍 PostgreSQL 中常用的数据类型,并探讨它们的使用场景。…...

synchronized关键字

文章目录 synchronized 关键字介绍synchronized 的内存语义 synchronized 关键字介绍 synchronized 块是 Java 提供的一种原子性 内 置锁&#xff0c; Java 中的每个对象都可以把它当作一个 同步锁来使用 &#xff0c; 这些 Java 内置的使用者看不到的锁被称为内部锁 &#xf…...

MATLAB计算反映热需求和能源消耗的度数日指标(HDD+CDD)(全代码)

目录 度数日(Degree Days, DD)概述计算公式MATLAB计算代码调用函数1:计算单站点的 CDD参考度数日(Degree Days, DD)概述 度数日(Degree Days, DD)是用于衡量建筑、城市和地区的热需求和能源消耗模式的指标。它分为两部分: 加热度日(Heating Degree Days, HDD):当室…...

在Linux中Redis不支持lua脚本的处理方法

redis安装在IP为x.x.x.x的服务器上 redis安装 第一步&#xff0c;安装前&#xff0c;检测系统是否安装了redis。若安装了redis&#xff0c;则需要删除redis&#xff1b;若没有安装redis&#xff0c;则需要安装2.6版本以上的redis。 # 确保Redis版本支持Lua脚本。从Redis 2.6…...

第39周:猫狗识别 2(Tensorflow实战第九周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 5.1 上次程序的主要Bug 5.2 修改版…...

SpringBoot自定义starter

首先创建Maven项目 引入依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>3.4.2</version></dependency> </dependencies…...

JVM学习

JVM 1、JVM是一个跨语言的平台&#xff0c;与语言无关 2、java虚拟机规范&#xff1a;一流企业做标准&#xff0c;二流企业做品牌&#xff0c;三流企业做产品 JVM种类 Hotspot&#xff1a;Oracle 公司&#xff0c;有商业版和免费版 open jdk 内部包含免费版本hotspot虚拟机 Jr…...

RAG入门: RetroMAE、BGE、M3、MemoRAG

RAG实际上第一步都是先做Retrieval&#xff0c;关于Retrieval的思路有很多&#xff0c;持续更新&#xff1a; RetroMAE &#xff08;论文RetroMAE: Pre-Training Retrieval-oriented Language Models Via Masked Auto-Encoder&#xff09; RetraoMAE包括两个模块&#xff0c;…...