Apache IoTDB 数据管理全攻略:保留、查询与删除操作详解

Apache IoTDB 数据管理全攻略:保留、查询与删除操作详解
在这里插入图片描述

Apache IoTDB 数据管理全攻略:保留、查询与删除操作详解

本文围绕 Apache IoTDB 的数据管理核心功能展开,详细解读数据保留、查询与删除操作。在数据保留方面,阐述 TTL 以设备为单位、按数据时间戳判断过期的规则,介绍合法路径模式及设置、取消、查看 TTL 的方法。数据查询部分,说明基本语法,展示基础查询示例,详解最新点查询、分组聚合、空值填充等高级功能及两种结果对齐模式。数据删除部分,介绍单传感器、多传感器时间序列删除方法,提及实验性的时间分区删除功能。整体结合丰富代码示例与场景说明,助力用户掌握 IoTDB 数据管理技巧,应对时序数据存储与分析挑战。
在这里插入图片描述

在物联网(IoT)场景中,时序数据的高效管理是核心需求之一。Apache IoTDB 作为一款专为时序数据设计的数据库,提供了强大的数据保留、查询和删除功能,能够帮助用户轻松应对海量时序数据的存储与分析挑战。本文将基于官方文档,详细解读 IoTDB 中数据保留时间(TTL)设置、灵活的数据查询以及精准的数据删除操作,结合丰富的代码示例和场景说明,让你全面掌握 IoTDB 数据管理技巧。

一、数据保留时间(TTL):自动管理过期数据

在实际应用中,随着时间推移,时序数据会不断累积,可能导致磁盘空间不足、查询性能下降等问题。IoTDB 支持通过 TTL(Time To Live,数据保留时间) 对设备级数据进行自动过期删除,有效控制磁盘占用,维持系统性能稳定。

1.1 TTL 核心概念与规则

  • 作用粒度:TTL 以设备(device)为单位设置,系统会按设备粒度判断数据是否过期并执行删除。
  • 时间单位:默认单位为毫秒(ms),即使修改配置文件中的时间精度,设置 TTL 时仍需使用毫秒单位。
  • 过期判断依据:基于数据点的 时间戳(数据产生时间),而非数据写入 IoTDB 的时间。
  • 删除机制:数据过期后会立即变为“不可查询”,但物理删除不会立即执行(需通过后续文件合并操作完成),不过系统能保证过期数据最终会被删除。
  • 规则上限:系统最多支持 1000 条 TTL 规则,达到上限时需删除部分规则才能新增。

1.2 TTL 路径规则(Path Pattern)

设置 TTL 时,路径需遵循 前缀路径规则(中间不能包含 *,且必须以 ** 结尾),也支持指定具体数据库或设备路径。以下是合法与非法路径的对比:

路径类型示例说明
合法路径root.**匹配所有设备
合法路径root.db.**匹配 root.db 下所有设备
合法路径root.db.group1.d1匹配具体设备 root.db.group1.d1
非法路径root.*.db路径中间包含 *,不符合前缀规则
非法路径root.**.db.*结尾不是 **,且包含多余 *

特殊规则:若路径未带 *,系统会先检查是否匹配数据库(database)。若匹配,会自动将路径扩展为 path.**(例如设置 root.db 会自动扩展为 root.db.**,对该数据库下所有设备生效);若不匹配数据库,则路径不会扩展。

1.3 TTL 设置(SET TTL)

设置 TTL 本质是为指定路径的设备添加一条 TTL 规则,语法如下:

-- 基本语法:为 pathPattern 匹配的设备设置 TTL(单位:ms)set ttl to pathPattern ttlValue;-- 特殊用法:设置 TTL 为无限大(INF 关键字)set ttl to pathPattern INF;
示例 1:为指定数据库下所有设备设置 TTL

需求:为 root.ln 数据库下所有设备设置 TTL 为 3600000ms(1 小时),即数据超过 1 小时后自动过期。

-- 由于 root.ln 是数据库,会自动扩展为 root.ln.**set ttl to root.ln 3600000;
示例 2:为具体设备设置 TTL

需求:为设备 root.ln.wf01.wt01 设置 TTL 为 86400000ms(24 小时)。

set ttl to root.ln.wf01.wt01 86400000;
示例 3:设置 TTL 为无限大

需求:保留 root.sgcc 下所有设备的所有数据(永不过期)。

set ttl to root.sgcc.** INF;

1.4 TTL 取消(UNSET TTL)

若需停止自动删除某路径下的设备数据,可通过 unset ttl 取消 TTL 规则,语法如下:

-- 基本语法:取消 pathPattern 匹配路径的 TTL unset ttl from pathPattern;-- 旧语法(兼容):unset ttl to pathPattern
示例 1:取消单个数据库的 TTL
-- 取消 root.ln 下所有设备的 TTL,数据将永久保留 unset ttl from root.ln;
示例 2:取消所有设备的 TTL
-- 取消系统中所有设备的 TTL unset ttl from root.**;

1.5 TTL 查看(SHOW TTL)

通过 show ttl 语句可查看已设置的 TTL 规则,支持查看所有规则或指定路径的规则。

示例 1:查看所有 TTL 规则
showall ttl;

执行结果如下(展示所有路径及其对应的 TTL 值):

+--------------+--------+ | path| TTL| | root.**|55555555| | root.sg2.a.**|44440000| +--------------+--------+ 
示例 2:查看指定路径的 TTL 规则
-- 查看 root.db 下所有设备的 TTLshow ttl on root.db.**;

执行结果如下:

+--------------+--------+ | path| TTL| | root.db.**|55555555| | root.db.a.**|44440000| +--------------+--------+ 
示例 3:查看设备的 TTL

通过 show devices 可同时查看设备是否对齐(IsAligned)及 TTL 信息:

show devices;

执行结果如下(INF 表示 TTL 无限大):

+---------------+---------+---------+ | Device|IsAligned| TTL| +---------------+---------+---------+ |root.sg.device1| false| 36000000| |root.sg.device2| true| INF| +---------------+---------+---------+ 

二、数据查询:灵活高效的时序数据检索

IoTDB 提供了与 SQL 兼容的查询语法,支持历史数据与实时数据的统一查询,同时提供丰富的子句(如 WHEREGROUP BYFILL 等)满足复杂分析需求。

2.1 基本查询语法

IoTDB 查询语句的核心结构如下,各子句功能将在后续详细解读:

SELECT[LAST] selectExpr [, selectExpr]...[INTO intoItem [, intoItem]...]-- 可选:将查询结果写入其他序列FROM prefixPath [, prefixPath]...-- 指定查询的时间序列前缀[WHERE whereCondition]-- 过滤条件(时间/值过滤)[GROUPBY...]-- 分段/分组聚合[HAVING havingCondition]-- 聚合结果过滤[ORDERBY sortKey {ASC|DESC}]-- 结果排序[FILL ({PREVIOUS | LINEAR | constant})]-- 空值填充[SLIMIT seriesLimit][SOFFSET seriesOffset]-- 按列分页[LIMIT rowLimit][OFFSET rowOffset]-- 按行分页[ALIGN BY {TIME| DEVICE}]-- 结果对齐模式

2.2 基础查询示例

示例 1:查询单个时间序列的指定时间范围数据

需求:查询设备 root.ln.wf01.wt01 的温度传感器(temperature)在 2017-11-01T00:08:00 之前的所有数据。

select temperature from root.ln.wf01.wt01 wheretime<2017-11-01T00:08:00.000;

执行结果(包含时间列和温度值列):

+-----------------------------+-----------------------------+ | Time|root.ln.wf01.wt01.temperature| +-----------------------------+-----------------------------+ |2017-11-01T00:00:00.000+08:00| 25.96| |2017-11-01T00:01:00.000+08:00| 24.36| |2017-11-01T00:02:00.000+08:00| 20.09| |2017-11-01T00:03:00.000+08:00| 20.18| |2017-11-01T00:04:00.000+08:00| 21.13| |2017-11-01T00:05:00.000+08:00| 22.72| |2017-11-01T00:06:00.000+08:00| 20.71| |2017-11-01T00:07:00.000+08:00| 21.45| +-----------------------------+-----------------------------+ Total line number = 8 It costs 0.026s 
示例 2:查询多个时间序列的多时间区间数据

需求:查询设备 root.ln.wf01.wt01 的供电状态(status)和温度(temperature)在两个时间区间的数据:2017-11-01T00:05:00 ~ 2017-11-01T00:12:002017-11-01T16:35:00 ~ 2017-11-01T16:37:00

selectstatus, temperature from root.ln.wf01.wt01 where(time>2017-11-01T00:05:00.000andtime<2017-11-01T00:12:00.000)or(time>=2017-11-01T16:35:00.000andtime<=2017-11-01T16:37:00.000);

2.3 高级查询功能

2.3.1 最新点查询(LAST 查询)

在物联网监控场景中,常需获取设备的最新状态(如实时温度、设备在线状态)。IoTDB 提供 LAST 关键字实现高效的最新点查询,且经过缓存优化,响应时间可达毫秒级。

语法

selectlast<Path>[,<Path>]...from<PrefixPath>[,<PrefixPath>]...[wheretime>= lastTime]-- 可选:过滤最新点的时间范围[orderby timeseries {asc|desc}];-- 可选:按序列名排序

示例:查询设备 root.ln.wf01.wt01 所有序列的最新数据,并按序列名降序排列。

selectlast*from root.ln.wf01.wt01 orderby timeseries desc;

执行结果(包含时间、序列名、值、数据类型):

+-----------------------------+-----------------------------+---------+--------+ | Time| timeseries| value|dataType| +-----------------------------+-----------------------------+---------+--------+ |2017-11-07T23:59:00.000+08:00|root.ln.wf01.wt01.temperature|21.067368| DOUBLE| |2017-11-07T23:59:00.000+08:00| root.ln.wf01.wt01.status| false| BOOLEAN| +-----------------------------+-----------------------------+---------+--------+ Total line number = 2 It costs 0.002s 
2.3.2 分组聚合(GROUP BY)

IoTDB 支持按时间维度(分段聚合)或业务属性(分组聚合)对数据进行聚合计算,满足时序数据的统计分析需求(如按天计算平均温度、按设备分组统计数据点数)。

(1)时间区间分段聚合

按固定时间间隔对数据进行分段,计算每个时间段的聚合值(如每小时、每天)。

示例:按 1 天(1d)为间隔,统计 root.ln.wf01.wt01 设备 2017-11-01 ~ 2017-11-07 期间每天的状态数据点数(count(status))和最高温度(max_value(temperature))。

selectcount(status), max_value(temperature)from root.ln.wf01.wt01 groupby([2017-11-01T00:00:00,2017-11-07T23:00:00),1d);

执行结果(每个时间区间对应一行聚合数据):

+-----------------------------+-------------------------------+----------------------------------------+ | Time|count(root.ln.wf01.wt01.status)|max_value(root.ln.wf01.wt01.temperature)| +-----------------------------+-------------------------------+----------------------------------------+ |2017-11-01T00:00:00.000+08:00| 1440| 26.0| |2017-11-01T00:00:00.000+08:00| 1440| 26.0| -- 省略中间结果... |2017-11-07T00:00:00.000+08:00| 1380| 26.0| +-----------------------------+-------------------------------+----------------------------------------+ Total line number = 7 It costs 0.024s 
(2)按路径层级分组聚合

按时间序列路径的层级(如数据库、设备)进行分组,统计不同层级的聚合结果。IoTDB 约定 root 为第 0 层,后续层级依次递增。

示例:按第 1 层(数据库层级)分组,统计不同数据库下 status 序列的数据点数。

selectcount(status)from root.**groupbylevel=1;

执行结果(展示每个数据库的统计值):

+-------------------------+---------------------------+ |count(root.ln.*.*.status)|count(root.sgcc.*.*.status)| +-------------------------+---------------------------+ | 20160| 10080| +-------------------------+---------------------------+ Total line number = 1 It costs 0.003s 
2.3.3 空值填充(FILL)

时序数据常因设备离线、传感器故障等原因出现空值,影响数据分析。IoTDB 提供 FILL 子句支持三种空值填充方式:

  • PREVIOUS:使用前一个非空值填充。
  • LINEAR:使用前一个非空值与后一个非空值的线性插值填充(仅支持数值类型)。
  • constant:使用指定常量填充(需与数据类型兼容)。

示例:查询 root.sgcc.wf03.wt01 设备的温度和状态数据,用前一个非空值填充空值。

select temperature,statusfrom root.sgcc.wf03.wt01 wheretime>=2017-11-01T16:37:00.000andtime<=2017-11-01T16:40:00.000 fill(previous);

执行结果(空值被前一个非空值填充):

+-----------------------------+-------------------------------+--------------------------+ | Time|root.sgcc.wf03.wt01.temperature|root.sgcc.wf03.wt01.status| +-----------------------------+-------------------------------+--------------------------+ |2017-11-01T16:37:00.000+08:00| 21.93| true| |2017-11-01T16:38:00.000+08:00| 21.93| false| |2017-11-01T16:39:00.000+08:00| 22.23| false| |2017-11-01T16:40:00.000+08:00| 23.43| false| +-----------------------------+-------------------------------+--------------------------+ Total line number = 4 

2.4 查询结果对齐模式(ALIGN BY)

IoTDB 支持两种结果对齐模式,适用于不同的分析场景:

  • 按时间对齐(默认):结果包含 1 列时间列 + N 列值列,每一行的时间戳相同。
  • 按设备对齐(ALIGN BY DEVICE):结果包含 1 列时间列 + 1 列设备列 + N 列值列,便于按设备查看数据。

示例:按设备对齐查询 root.ln 下所有设备的最新数据。

selectlast*from root.ln.** align by device;

执行结果(设备名单独列为一列):

+-----------------------------+-----------------+-----------+------+--------+ | Time| Device|temperature|status|hardware| +-----------------------------+-----------------+-----------+------+--------+ |2017-11-07T23:59:00.000+08:00|root.ln.wf01.wt01| 21.0674| false| null| |2017-11-07T23:59:00.000+08:00|root.ln.wf02.wt02| null| false| v2| +-----------------------------+-----------------+-----------+------+--------+ Total line number = 2 It costs 0.012s 

三、数据删除:精准清除无用数据

在某些场景下(如数据录入错误、过期数据需立即删除),需要手动删除 IoTDB 中的数据。IoTDB 提供 DELETE 语句支持按时间序列和时间范围精准删除数据,同时支持批量删除和时间分区删除(实验性功能)。

3.1 单传感器时间序列删除

删除指定单个时间序列中符合时间条件的数据,语法如下:

deletefrom<timeseriesPath>wheretime[condition] timeValue;-- 时间条件:<, <=, >, >=, = 或 AND 连接的范围
示例 1:删除指定时间之前的所有数据

需求:删除设备 root.ln.wf02.wt02 的供电状态(status)在 2017-11-01T16:26:00 之前的所有错误数据。

deletefrom root.ln.wf02.wt02.statuswheretime<=2017-11-01T16:26:00;
示例 2:删除指定时间范围内的数据

需求:删除 root.ln.wf02.wt02.status2017-01-01 ~ 2017-11-01T16:26:00 期间的数据。

deletefrom root.ln.wf02.wt02.statuswheretime>=2017-01-01T00:00:00andtime<=2017-11-01T16:26:00;
示例 3:删除所有数据

若未指定 WHERE 子句,将删除该时间序列的所有数据:

deletefrom root.ln.wf02.wt02.status;

3.2 多传感器时间序列删除

通过 路径模式(Path Pattern) 可一次性删除多个传感器的数据,语法如下:

deletefrom<pathPattern>wheretime[condition] timeValue;
示例:删除设备下所有传感器的指定时间范围数据

需求:删除设备 root.ln.wf02.wt02 下所有传感器(如 statushardware)在 2017-11-01T16:26:00 之前的数据。

deletefrom root.ln.wf02.wt02.*wheretime<=2017-11-01T16:26:00;

注意:若删除的路径不存在(如传感器未创建),IoTDB 仍会显示“执行成功”(SQL 声明式语法特性,仅语法错误、权限不足会报错)。

3.3 时间分区删除(实验性功能)

对于支持时间分区的 IoTDB 版本,可通过删除指定时间分区来批量删除数据(需谨慎使用,仅建议开发者测试)。

语法

DELETEPARTITION<databasePath><partitionId1>,<partitionId2>,...;

说明

  • partitionId 可通过数据文件夹查看,或通过公式 partitionId = floor(timestamp / partitionInterval) 计算(partitionInterval 在配置文件中配置)。

示例:删除 root.ln 数据库下分区 ID 为 0、1、2 的数据。

DELETEPARTITION root.ln 0,1,2;

四、总结

本文详细介绍了 IoTDB 中数据保留(TTL)、查询和删除三大核心功能,涵盖基础语法、高级特性及丰富示例。通过 TTL 可自动管理过期数据,避免磁盘空间浪费;灵活的查询功能支持最新点查询、分组聚合、空值填充等场景,满足复杂时序数据分析需求;精准的数据删除功能则能帮助用户清除无用数据,保证数据准确性。

IoTDB 作为时序数据库的佼佼者,其数据管理能力在物联网、工业监控、智能运维等场景中具有显著优势。掌握本文所述的操作技巧,将助力你更高效地使用 IoTDB 处理海量时序数据。

如需进一步学习 IoTDB,可参考官方文档:Apache IoTDB 官方文档

🌐 附:IoTDB的各大版本

📄 Apache IoTDB 是一款工业物联网时序数据库管理系统,采用端边云协同的轻量化架构,支持一体化的物联网时序数据收集、存储、管理与分析 ,具有多协议兼容、超高压缩比、高通量读写、工业级稳定、极简运维等特点。

版本IoTDB 二进制包IoTDB 源代码发布说明
2.0.5- All-in-one
- AINode
- SHA512
- ASC
- 源代码
- SHA512
- ASC
release notes
1.3.5- All-in-one
- AINode
- SHA512
- ASC
- 源代码
- SHA512
- ASC
release notes
0.13.4- All-in-one
- Grafana 连接器
- Grafana 插件
- SHA512
- ASC
- 源代码
- SHA512
- ASC
release notes

✨ 去获取:https://archive.apache.org/dist/iotdb/

联系博主

    xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在ZEEKLOG、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。

    亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

     愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

    至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


     💞 关注博主 🌀 带你实现畅游前后端!

     🏰 大屏可视化 🌀 带你体验酷炫大屏!

     💯 神秘个人简介 🌀 带你体验不一样得介绍!

     🥇 从零到一学习Python 🌀 带你玩转Python技术流!

     🏆 前沿应用深度测评 🌀 前沿AI产品热门应用在线等你来发掘!

     💦 :本文撰写于ZEEKLOG平台,作者:xcLeigh所有权归作者所有)https://xcleigh.blog.ZEEKLOG.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


在这里插入图片描述

     📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌

Read more

假网站排全网第二,真官网翻五页都找不到!NanoClaw创始人破防:SEO之战,我快要输了

假网站排全网第二,真官网翻五页都找不到!NanoClaw创始人破防:SEO之战,我快要输了

整理 | 苏宓 出品 | ZEEKLOG(ID:ZEEKLOGnews) 自从 OpenClaw 爆火之后,各种“Claw”项目接连出现,其中以安全优化版 NanoClaw 最为知名。它的核心代码仅有 4000 行,却获得了 AI 大牛 Andrej Karpathy 的点赞。 可谁也没想到,这款口碑极佳的开源项目,近来竟被一个仿冒网站抢了风头。 投诉无门之下,NanoClaw 创始人 Gavriel Cohen 在 X 社交平台上无奈发文怒斥:谷歌搜索错误地将假网站排在真官网前面,不仅破坏了项目声誉,还埋下了严重的安全隐患,而他费尽心力,却只能哀叹一句——“我正在为自己的开源项目打 SEO 战,但我快要输了。” 那么,NanoClaw 究竟发生了什么?又是怎么走红的?事情还要从 OpenClaw

By Ne0inhk
曝Windows 12将于今年发布?以AI为核心、NPU成「硬件门槛」,网友吐槽:“不想要的全塞进来了”

曝Windows 12将于今年发布?以AI为核心、NPU成「硬件门槛」,网友吐槽:“不想要的全塞进来了”

整理 | 郑丽媛 出品 | ZEEKLOG(ID:ZEEKLOGnews) 当年,微软一句“Windows 10 将是最后一个版本”的表态,让不少用户以为 Windows 进入了“只更新、不换代”的时代。但几年过去,现实却完全不同。 在 Windows 11 发布之后,如今关于 Windows 12 的传闻再次密集出现。从内部代号、代码片段,到硬件厂商的暗示与 OEM 预热标签,种种线索拼在一起,勾勒出一个明显的趋势——这不会只是一次常规升级,而更像是一次围绕 AI 的平台级重构。 更关键的是,这次争议,可能远比当年 TPM 2.0 更大。 精准卡位 Windows 10 退场的时间?

By Ne0inhk
“裸奔龙虾”数量已达27万只,业内人士警告;AI浪潮下,中传“砍掉”翻译等16个专业;薪资谈判破裂,三星电子8.9万人要罢工 | 极客头条

“裸奔龙虾”数量已达27万只,业内人士警告;AI浪潮下,中传“砍掉”翻译等16个专业;薪资谈判破裂,三星电子8.9万人要罢工 | 极客头条

「极客头条」—— 技术人员的新闻圈! ZEEKLOG 的读者朋友们好,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。(投稿或寻求报道:[email protected]) 整理 | 郑丽媛 出品 | ZEEKLOG(ID:ZEEKLOGnews) 一分钟速览新闻点! * “裸奔龙虾”已高达27万只!业内人士警告:一旦黑客入侵,敏感信息一秒搬空 * 阿里云 CTO 周靖人代管千问模型一号位,刘大一恒管理更多团队 * 中国传媒大学砍掉翻译、摄影等 16 个本科专业,直言教育要面向人机分工时代 * 雷军放话:小米将很快推出 L3、L4 的驾驶 * 消息称原理想汽车智驾一号位郎咸朋具身智能赛道创业 * vivo 前产品经理宋紫薇创业,瞄准 AI 时尚Agent,获亿元融资 * MiniMax 发布龙虾新技能,股价暴涨超 23% * 薪资谈判破裂,三星电子

By Ne0inhk
Python热度下滑、AI能取代搜索引擎?TIOBE最新榜单揭晓!

Python热度下滑、AI能取代搜索引擎?TIOBE最新榜单揭晓!

整理 | 屠敏 出品 | ZEEKLOG(ID:ZEEKLOGnews) 日前,TIOBE 发布了最新的 3 月编程语言榜单。整体来看,本月排名变化不算大,但榜单中仍然出现了一些值得关注的小波动。  AI 工具能帮大家秒懂最新编程语言趋势? 由于 2 月天数较少,3 月的榜单整体变化有限。借着这次发布,TIOBE CEO Paul Jansen 也回应了一个最近被频繁讨论的问题:为什么 TIOBE 指数仍然依赖搜索引擎统计结果?在大语言模型流行的今天,直接询问 AI 哪些编程语言最流行,是不是更简单? 对此,Jansen 的回答是否定的。 他解释称,TIOBE 指数本质上统计的是互联网上关于某种编程语言的网页数量。而大语言模型的训练数据同样来自这些网页内容,因此从信息来源来看,两者并没有本质区别。换句话说,LLM 的判断,本质上也是建立在这些网页数据之上的。 Python 活跃度仍在下降

By Ne0inhk