news 2026/9/13 13:35:20

TDengine 与 Ontop 集成指南:基于 SPARQL 的时序数据虚拟知识图谱查询

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TDengine 与 Ontop 集成指南:基于 SPARQL 的时序数据虚拟知识图谱查询

TDengine 与 Ontop 集成指南:基于 SPARQL 的时序数据虚拟知识图谱查询

【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine

导读

本文介绍如何将 TDengine 时序数据库接入 Ontop 虚拟知识图谱(VKG)系统,把智能电表等 IoT 场景的时序数据通过 W3C 标准的 SPARQL 接口进行语义化查询与分析。读者将掌握 Ontop 的 JDBC 数据源配置、.obda表映射规则、TDengine 与 RDF 数据类型的自动转换机制,以及一套完整的“数据生成 → 映射配置 → SPARQL 查询 → 结果解析”实战流程。

什么是 Ontop,为什么需要它

Ontop 是一个开源的虚拟知识图谱系统,由意大利博尔扎诺自由大学(Free University of Bozen-Bolzano)的 KRDB 研究组开发。它的核心价值在于:无需将关系型数据库中的数据迁移到独立的图数据库,即可动态地将关系型数据库内容“虚拟”映射为知识图谱(Knowledge Graph)。

  • 数据查询通过SPARQL(W3C 标准化的 RDF 查询语言)接口完成;
  • 查询结果自动转换为RDF(资源描述框架)格式输出;
  • 支持 MySQL、PostgreSQL、Oracle、SQL Server、SQLite 以及TDengine等多种数据库作为底层数据源。

从源码结构看,Ontop 将数据库表视为“事实来源”,通过 OBDA(Ontology-Based Data Access,基于本体的数据访问)映射文件描述表字段到 RDF 三元组的对应关系,从而在上层提供一套统一、符合 W3C 标准的语义数据访问层。对于时序数据而言,这意味着 IoT 原始数据仍保存在 TDengine 中(享受其列式存储与压缩优势),同时可以叠加知识图谱的逻辑推理能力进行语义级分析。

集成前置条件

Ontop 通过 TDengine Java Connector 连接 TDengine 数据源,集成前需要准备以下环境:

前置项要求说明
TDengine 集群版本3.3.6.0及以上Enterprise 与 Community 版本均支持
taosAdapter正常运行提供 WebSocket/REST 接口供连接器访问,详见 taosAdapter 参考手册
JDBC 驱动版本3.6.0及以上taos-jdbcdrivercom.taosdata.jdbc:taos-jdbcdriver
Ontopversion5分支TDengine 支持已合入该分支但尚未正式发布,需按 Ontop 项目 README 自行下载源码构建

关于 taosAdapter,其默认在6041端口同时提供 HTTP/RESTful 与 WebSocket 服务(对应配置项port),TDengine 各语言连接器正是通过该 WebSocket 接口与集群通信,因此它是本方案中 Ontop 与 TDengine 之间的关键桥梁。

配置数据源

在 Ontop 中配置 TDengine 数据源分为三个步骤:安装 JDBC 驱动、配置 JDBC 连接、配置表映射。

1. 安装 JDBC 驱动

下载 taos-jdbcdriver 的 DIST 驱动包(.jar文件),将其放入 Ontop 主程序的jdbc/目录下,使 Ontop 运行时能加载该驱动。

2. 配置 JDBC 连接

在 Ontop 的.properties文件中配置 JDBC 连接信息:

jdbc.url = jdbc:TAOS-WS://[host]:[port]/[database] jdbc.user = [username] jdbc.password = [password] jdbc.driver = com.taosdata.jdbc.ws.WebSocketDriver

其中关键点在于 URL 的书写格式。根据 TDengine Java Connector 文档,taos-jdbcdriver 的 JDBC URL 规范为:

jdbc:[TAOS|TAOS-WS]://[host1:port1,host2:port2,...,hostN:portN]/[database_name]?[user={user}&password={password}&charset={charset}&cfgdir={config_dir}&locale={locale}&timezone={timezone}&varcharAsString=true]

结合本集成方案,应遵循以下约定:

  • 驱动类固定为com.taosdata.jdbc.ws.WebSocketDriver,即使用 WebSocket 连接方式;

  • URL 以jdbc:TAOS-WS://开头,端口使用 taosAdapter 的 6041(而非原生连接的 6030);

  • WebSocket 连接不依赖客户端驱动(无需安装libtaos.so等本地库),部署更简单;

  • WebSocket 方式支持配置多个端点地址(逗号分隔),连接时随机选取以实现负载均衡;IPv6 地址需使用方括号(如[::1][2001:db8::1]);

  • 可在 URL 中附加连接参数,例如:

    jdbc:TAOS-WS://taosdemo.com:6041,taosdemo2.com:6041/power?user=root&password=taosdata&varcharAsString=true

值得特别注意的是conmode(BI 模式)参数:taos-jdbcdriver 为 BI 工具集成场景提供了conmode=1的选项,开启后元数据信息不统计子表,主要服务于 BI 工具的元数据探查。Ontop 作为典型的 BI/语义分析集成方,若在元数据获取阶段遇到子表数量干扰,可在 URL 中追加conmode=1尝试。其余常用 WebSocket 参数还包括连接超时httpConnectTimeout(默认 60000ms)、消息超时messageWaitTimeout(默认 60000ms)、自动重连enableAutoReconnect(默认 false)等,详见 Java 连接器文档的 Properties 章节。

提示:自 taos-jdbcdriver 3.4.0 起官方推荐使用 WebSocket 连接替代 REST 连接(jdbc:TAOS-RS://),WebSocket 具有更低延迟、自动重连与更丰富的功能支持,本方案直接采用推荐方式。

3. 配置表映射(.obda 文件)

.obda文件中定义 TDengine 表到 Ontop 的映射关系。以下以智能电表场景为例:

[PrefixDeclaration] : http://example.org/tde ns: http://example.org/ns# [MappingDeclaration] @collection [[ mappingId meters-mapping target ns:{ts} a ns:Meters ; ns:ts {ts} ; ns:voltage {voltage}; ns:phase {phase}; ns:groupid {groupid}; ns:location {location}^^xsd:string . source SELECT ts, voltage, phase, groupid, location from test.meters ]]
格式说明
关键字段说明
mappingId映射 ID,唯一标识一条映射关系
sourceTDengine SQL 查询语句(支持复杂查询)
target字段映射关系(未指定类型时使用默认转换规则)

target中的{ts}{voltage}等占位符引用source查询返回的列名,将每一行数据实例化为一条 RDF 三元组描述;a是 RDF 中表示 “is a” 关系的语法糖,此处声明每条记录ns:Meters类型的实例。

4. 数据类型自动转换规则

可在target中显式指定映射数据类型(如{location}^^xsd:string)。若未指定,Ontop 依据 JDBC 返回的 Java 类型按下表默认转换:

TDengine JDBC 数据类型Ontop 数据类型
java.sql.Timestampxsd:datetime
java.lang.Booleanxsd:boolean
java.lang.Bytexsd:byte
java.lang.Shortxsd:short
java.lang.Integerxsd:int
java.lang.Longxsd:long
java.math.BigIntegerxsd:nonNegativeInteger
java.lang.Floatxsd:float
java.lang.Doublexsd:double
byte[]xsd:base64Binary
java.lang.Stringxsd:string
java.math.BigDecimalxsd:decimal

可以看到,TDengine 中典型的时间戳、数值、字符串等类型都能被精准映射到 XSD 标准类型,从而保证 SPARQL 查询中的类型过滤与排序语义正确。完整的.obda映射语言格式说明可参考 Ontop 官方的映射语言文档(Mapping Language)。

5. 测试连接

启动 Ontop 端点服务验证配置:

ontop endpoint -p db.properties -m db.obda --port 8080

启动后访问http://localhost:8080,若能看到 SPARQL 查询界面,则说明配置成功。

实战:智能电表负载分析

场景介绍

某居民小区将智能电表数据存储于 TDengine 数据库中。本案例使用 Ontop 将电表时序数据转换为虚拟知识图谱,并通过 SPARQL 接口查询电压超过 240V 的设备,以识别高负载设备。

数据准备

使用 taosBenchmark 生成模拟数据:

# 生成 100 台设备,每台 1000 条记录 taosBenchmark -t 100 -n 1000 -y

从 taosBenchmark 源码(benchSys.c 中的参数解析)可以确认上述参数含义:

参数含义
-t子表(child table)数量,此处即 100 台电表设备
-n每个子表插入的记录行数,此处即每台设备 1000 条
-yanswer_yes = true,跳过交互确认,自动执行

taosBenchmark 在默认(demo)模式下会自动创建名为test的数据库和名为meters的超级表(见 benchCommandOpt.c 中initStable()stbInfo->stbName = "meters"),其默认列为currentvoltagephase三个数值列,并附加若干标签列(含groupidlocation等),与本文.obda映射中from test.meters的查询完全对应。默认生成数据的电压值域由内置函数控制,实际生成的数值以工具运行为准;若需构造更贴近高压告警阈值的样本,可结合 taosBenchmark 的 JSON 配置文件自定义字段取值范围。

配置文件

db.properties(连接配置):

jdbc.url=jdbc:TAOS-WS://localhost:6041/test jdbc.user=root jdbc.password=taosdata jdbc.driver=com.taosdata.jdbc.ws.WebSocketDriver

db.obda(映射配置):复用上文“配置表映射”一节中的示例内容,将test.meters表映射为ns:Meters类型的知识图谱节点。

分析电表负载

  1. 创建 SPARQL 查询语句:查询电压超过 240V 的智能电表设备,按电压降序返回前 2 条结果:

    PREFIX ns: <http://example.org/ns#> SELECT ?ts ?voltage ?phase ?groupid ?location WHERE { ?m a ns:Meters ; ns:ts ?ts; ns:voltage ?voltage; ns:phase ?phase; ns:groupid ?groupid; ns:location ?location. FILTER(?voltage > 240) } ORDER BY DESC(?voltage) LIMIT 2

    该查询通过FILTER(?voltage > 240)完成语义层过滤,ORDER BY DESC(?voltage)实现按电压降序排序,LIMIT 2截取前两行,完整演示了 SPARQL 对 RDF 化时序数据的筛选、排序与投影能力。

  2. 在 SPARQL 查询界面输入上述语句,点击 "Run" 按钮,即可得到结果(见本文开头截图)。

  3. 查询结果以SPARQL JSON 格式返回,包含电表采集时间戳、电压读数、相位、组 ID 与设备位置信息:

    { "head" : { "vars" : [ "ts", "voltage", "phase", "groupid", "location" ] }, "results" : { "bindings" : [ { "ts" : { "datatype" : "http://www.w3.org/2001/XMLSchema#dateTime", "type" : "literal", "value" : "2025-07-02T15:22:55.098" }, "voltage" : { "datatype" : "http://www.w3.org/2001/XMLSchema#integer", "type" : "literal", "value" : "263" }, "phase" : { "datatype" : "http://www.w3.org/2001/XMLSchema#double", "type" : "literal", "value" : "143.2" }, "groupid" : { "datatype" : "http://www.w3.org/2001/XMLSchema#integer", "type" : "literal", "value" : "2" }, "location" : { "type" : "literal", "value" : "California.PaloAlto" } }, { "ts" : { "datatype" : "http://www.w3.org/2001/XMLSchema#dateTime", "type" : "literal", "value" : "2025-07-02T15:23:30.186" }, "voltage" : { "datatype" : "http://www.w3.org/2001/XMLSchema#integer", "type" : "literal", "value" : "259" }, "phase" : { "datatype" : "http://www.w3.org/2001/XMLSchema#double", "type" : "literal", "value" : "132.1" }, "groupid" : { "datatype" : "http://www.w3.org/2001/XMLSchema#integer", "type" : "literal", "value" : "2" }, "location" : { "type" : "literal", "value" : "California.PaloAlto" } } ] } }

    从返回的绑定数据可以验证前文的数据类型转换规则:时间戳tsxsd:dateTime类型返回(TDengine 的 TIMESTAMP 列经由java.sql.Timestamp转换而来),voltagegroupidxsd:integer返回,phasexsd:double返回,location为普通字符串字面量。这保证了语义层查询结果的类型完整性与机器可读性。

总结

通过 TDengine 与 Ontop 的集成,本方案实现了:

  • 时序数据自动转换为 RDF:TDengine 中的电表数据无需迁移,即可经由.obda映射在语义层呈现为知识图谱实体,支持 SPARQL 语义查询;
  • 统一的数据访问接口:符合 W3C 标准的 SPARQL/RDF 体系,屏蔽底层关系型与时序型数据库的差异;
  • 解锁工业 IoT 的知识图谱分析与推理能力:在时序数据库之上叠加本体推理,为复杂 IoT 场景(如设备故障根因分析、能效优化等)提供具备认知能力的智能分析方案。

这种“时序数据库 + 虚拟知识图谱”的组合,为时序数据库领域提供了一种新的智能化范式:既保留 TDengine 在时序数据存储、查询上的高性能优势,又通过知识图谱的逻辑推理能力与大型语言模型的泛化能力相结合,面向复杂 IoT 场景输出智能分析解决方案。读者可在此基础上进一步扩展映射(如关联设备台账表、告警规则表),构建更丰富的语义分析模型。

【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 13:33:44

DecoHack #056: Newsletter 的产品化重构与可装配知识单元实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 13:32:59

工控入门四阶段实战指南:从断电接线到稳定运行

1. 工控入门到底学什么&#xff1f;——这不是选课清单&#xff0c;而是现场工程师的生存地图“工控入门到底学什么&#xff1f;”——这句话我每年在车间、调试现场、客户机房里至少被问37次。不是学生问&#xff0c;是刚转行的电气工程师、被临时拉去盯PLC项目的机械设计师、…

作者头像 李华
网站建设 2026/9/13 13:32:28

Windows上部署GitLab Runner:PowerShell与config.toml生产级实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 13:28:07

Zulip 自动化测试体系完全指南:从 test-all 到单测隔离策略

Zulip 自动化测试体系完全指南&#xff1a;从 test-all 到单测隔离策略 【免费下载链接】zulip Zulip server and web application. Open-source team chat that helps teams stay productive and focused. 项目地址: https://gitcode.com/GitHub_Trending/zu/zulip Zul…

作者头像 李华
网站建设 2026/9/13 13:26:44

gpt-image-2生产级图像生成实战:API调参、提示词工程与资源清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华