TDengine 零代码接入 Microsoft SQL Server:通过 taosExplorer 实现历史数据迁移与实时同步
【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine
本文介绍如何在 TDengine 的图形化管理工具 taosExplorer 中,通过零代码方式创建从 Microsoft SQL Server 到 TDengine 集群的数据接入任务,覆盖连接配置、认证与连接选项、SQL 查询模板、数据映射、高级选项与异常处理等完整配置环节。读完本文,你将能够在浏览器中完成 SQL Server(2016+)历史数据迁移与实时数据同步任务的创建、验证与运行监控,并理解子表拆分、时间占位符等核心机制背后的设计意图。
功能概述
Microsoft SQL Server 是最流行的关系型数据库之一,大量物联网与工业互联网系统长期使用它存储设备上报的数据。然而随着接入设备量持续增长、用户对数据实时反馈的要求不断提高,传统关系型数据库在时序数据场景下的存储与查询能力逐渐成为瓶颈。为此,从 TDengine TSDB 企业版 v3.3.2.0 开始,TDengine 提供了从 Microsoft SQL Server 高效读取数据并写入 TDengine 的能力,用于实现:
- 历史数据迁移:将存量业务数据按时间范围批量迁入 TDengine;
- 实时数据同步:持续订阅源库新增数据,保持 TDengine 与源系统数据一致。
企业版特性:本文所述功能仅存在于 TDengine TSDB-Enterprise 中,TDengine TSDB-OSS 不包含该功能。
零代码接入的整体架构与更多数据源(MySQL、Oracle、PostgreSQL、Kafka、MQTT、OPC UA 等)说明,可参阅 Data Connectors 总览。在 TDengine 侧,每个数据接入任务都对应一个运行中的工作负载,其运行指标由 taoskeeper 以超级表形式持久化,其中 SQL Server 任务对应名为taosx_task_mssql的日志超级表(见 vnodeQuery.c 中 taoskeeper 日志超级表清单tkLogStb),可用于任务运行状态的监控与排障。
前置条件
在开始创建任务前,需要确认以下前提:
- TDengine TSDB 企业版 v3.3.2.0 及以上,并已部署 taosExplorer(运行在 TDengine 所在主机或 IP 的6060 端口);
- 源端 Microsoft SQL Server 为 2016 及以上版本,或支持 TLS1.2+;
- 源库账号具备对应组织/库的读取权限;
- 目标 TDengine 集群中已有用于接收数据的数据库(可在配置过程中现场创建)。
新增数据源
在浏览器中打开 taosExplorer(http://<TDengine主机或IP>:6060),按以下步骤进入任务创建页面:
- 在左侧主菜单点击Data In(数据写入),然后点击Add Task(新增任务);
- 在Name(名称)字段输入任务的唯一名称,例如
test_mssql_01; - 从Type(类型)下拉框选择Microsoft SQL Server,页面字段会随类型变化;
- Agent(代理)为非必填项:如需通过代理执行任务,可从下拉框选择已有代理,也可点击Create New Agent现场创建;
- 从Target DB(目标数据库)下拉框选择数据落库的目标数据库,也可点击Create Database现场创建。
完成基本信息后,进入源库连接相关配置。
配置连接信息
在Connection Configuration(连接配置)区域填写源 Microsoft SQL Server 数据库的连接信息,主要包括:
| 配置项 | 说明 |
|---|---|
| host | 源 SQL Server 主机地址,例如127.0.0.1 |
| port | 源 SQL Server 监听端口,默认1433 |
| Database | 源数据库名称,例如db1 |
配置认证信息
在Authentication(认证)区域填写源库账号:
- User:输入源 Microsoft SQL Server 数据库的用户名,该用户必须拥有对应组织的读取权限;
- Password:输入上述用户在该源库中的登录密码。
配置连接选项
Connection Options(连接选项)区域提供以下可选配置:
| 配置项 | 说明 |
|---|---|
| Instance Name | Microsoft SQL Server 实例名称(在 SQL Browser 中定义的实例名,仅 Windows 平台可用)。若指定,端口将被替换为 SQL Browser 返回的值 |
| Application Name | 应用程序名称,用于标识发起连接的应用程序,便于源库侧审计与定位 |
| Encryption | 是否使用加密连接,默认值为Off,可选项:Off、On、NotSupported、Required |
| Trust Certificate | 是否信任服务器证书。若开启则不对服务器证书做验证、按原样接受;开启后下方Trust Certificate CA字段将被隐藏 |
| Trust Certificate CA | 是否信任服务器证书的 CA。若上传 CA 文件,则除系统信任库外,还会依据所给 CA 证书对服务器证书进行校验 |
完成上述配置后,点击Check Connectivity(检查连通性)按钮,验证所填信息能否正常从源 SQL Server 数据库读取数据。若检查失败,请根据页面返回的具体错误信息修正配置。
配置 SQL 查询
SQL 查询配置是决定迁移范围、切片方式与数据有序性的核心环节。
子表字段(Subtable Field)
Subtable Field用于拆分子表,是一条select distinct的 SQL 语句,查询指定字段组合的非重复项,通常与transform(数据映射)中的 tag 一一对应。该配置主要为了解决数据迁移乱序问题,必须与SQL Template配合使用,否则无法达到预期效果。使用示例如下:
子表字段填写
select distinct col_name1, col_name2 from table,表示使用源表中的col_name1与col_name2两个字段拆分目标超级表的子表;在SQL 模板中添加子表字段占位符,例如:
select * from table where ts >= ${start} and ts < ${end} and ${col_name1} and ${col_name2}运行时
${col_name1}、${col_name2}会展开为等值条件(如col_name1='deviceA'、col_name2=1),而非裸列名,从而将全表扫描收敛为按设备维度的分片查询;在transform中配置
col_name1与col_name2到两个 tag 的映射。
SQL 模板(SQL Template)
SQL Template是查询数据的 SQL 语句模板,必须包含时间范围条件,且开始时间与结束时间成对出现。模板中的时间范围由源数据库中代表时间的列和下列占位符共同组成:
| 占位符 | 格式 | 示例 |
|---|---|---|
${start}、${end} | RFC3339 格式时间戳(含时区) | 2024-03-14T08:00:00+0800 |
${start_no_tz}、${end_no_tz} | 不带时区的 RFC3339 字符串 | 2024-03-14T08:00:00 |
${start_date}、${end_date} | 仅日期 | 2024-03-14 |
需要注意源库列类型的限制:
- 仅
datetime2与datetimeoffset支持使用${start}/${end}查询; datetime与smalldatetime只能使用${start_no_tz}/${end_no_tz}查询;timestamp不能用作查询条件。
此外,为彻底解决迁移数据乱序问题,建议在查询语句中添加排序条件,例如order by ts asc。
时间范围与切片
- Start Time(起始时间):迁移数据的起始时间,必填;
- End Time(结束时间):迁移数据的结束时间,可留空。若设置,任务执行到结束时间后自动停止;若留空,则持续同步实时数据,任务不会自动停止;
- Query Interval(查询间隔):分段查询数据的时间间隔,默认 1 天。为避免单次查询数据量过大,每个数据同步子任务会按查询间隔将数据切分为多个时间段分别查询;
- Delay Duration(延迟时长):与查询间隔配合使用。在实时同步场景中,为避免延迟写入的数据丢失,每次同步任务会在「时间间隔 + 延迟时长」的时间点触发查询。例如查询间隔 3600 秒、延迟时长 60 秒时,查询任务会在 09:01 触发查询源库 08:00–09:00 时间段的数据。
配置数据映射
在Data Mapping(数据映射)区域配置字段提取、过滤与目标表映射。
- 点击Retrieve from Server(从服务器检索)按钮,从 Microsoft SQL Server 获取示例数据;
- 在Extract or Split from Column(从列中提取或拆分)中填写需要从源字段提取或拆分的字段。例如:将
vValue字段拆分为vValue_0与vValue_1两个字段,选择 split 提取器,separator填写分隔符,,number填写 2; - 在Filter(过滤)中填写过滤条件,例如
Value > 0,则只有 Value 大于 0 的数据才会被写入 TDengine;过滤表达式结果必须为布尔类型,支持比较运算符(> >= <= < == !=)、逻辑运算符(&& || !)以及字符串函数(is_empty、contains、starts_with、ends_with、len)等; - 在Mapping(映射)中选择要映射到的 TDengine 超级表,以及映射到该超级表的列;映射规则支持直接映射(mapping)、常量(value)、时间戳生成器(generator)、字符串拼接(join)、格式化(format)、求和(sum)、表达式计算(expr)等,子表名可通过
format表达式动态生成; - 点击Preview(预览)查看映射结果,确认字段对应关系与数据类型无误后再提交。
关于解析、提取/拆分、过滤、映射规则的完整说明,可参阅 Data Connectors 中的数据提取、过滤与转换章节。
配置高级选项
Advanced Options(高级选项)区域默认折叠,点击右侧>展开:
- Maximum Read Concurrency(最大读并发):限制数据源连接数或读取线程数,默认
0表示由连接器自动配置。当源端响应较慢且需要更多并发时,可适当调大该参数,同时注意调节资源占用; - Batch Size(批量大小):单次发送的最大消息或行数,SQL Server 数据源默认值为10000。当默认参数不满足需求或需要调整资源占用时修改。
配置异常处理策略
Exception Handling Strategy(异常处理策略)区域默认折叠,点击>展开。通用处理策略包括:
- Archive(归档):将无效数据写入归档文件,默认位于
${data_dir}/tasks/<id>/<datetime>,不写入目标数据库; - Discard(丢弃):忽略无效数据;
- Error(报错):报告错误;
- Cache(缓存):当目标连接失败或资源不足时,将数据写入缓存文件,待目标恢复后重新写入。
可为以下异常场景分别指定策略(不同场景可选项不同):
| 异常场景 | 可选策略 |
|---|---|
| 目标连接超时 | 归档、丢弃、报错、缓存 |
| 目标数据库不存在 | 归档、丢弃、报错 |
| 表不存在 | 归档、丢弃、报错、自动建表并重试 |
主时间戳超出范围(now - keep1至now + 100y) | 归档、丢弃、报错 |
| 主时间戳为空 | 归档、丢弃、报错、使用当前时间 |
| 复合主键为空 | 归档、丢弃、报错 |
| 表名超过 192 字符 | 归档、丢弃、报错、截断、截断并归档 |
表名含非法字符(如.) | 归档、丢弃、报错、用配置字符串替换非法字符 |
| 表名模板变量为空 | 丢弃、变量留空、用配置字符串替换 |
| 列不存在 | 归档、丢弃、报错、自动补列并重试 |
| 列名超过 64 字符 | 归档、丢弃、报错 |
| 列值超过定义长度 | 归档、丢弃、报错、截断、截断并归档,也可通过自动扩展列修改表结构后重试 |
| 其他数据错误 | 归档、丢弃、报错 |
附加设置包括:
- Connection Timeout(连接超时):目标连接超时时间,单位为秒,取值范围
1–600; - Temporary Storage Location(临时存储位置):相对
${data_dir}/tasks/<id>/的路径; - Archive Retention Days(归档保留天数):非负整数,
0表示不限制; - Archive Available Space(归档可用空间):取值
0–65535,0表示不限制; - Archive Location(归档位置):相对
${data_dir}/tasks/<id>/的路径; - Archive Write Failure Strategy(归档写失败策略):删除旧文件、丢弃数据,或报错并停止任务。
提交任务与运行验证
点击Submit(提交)按钮,完成 Microsoft SQL Server 到 TDengine 数据同步任务的创建,随后返回Data Source List(数据源列表)页面即可查看任务执行情况:
- 任务提交成功后状态切换为Running;若失败,可通过任务的活动日志定位错误原因;
- 在任务列表页可对任务进行启动、停止、查看、删除、复制等操作,并查看各任务写入记录数、流量等运行指标。
自 v3.3.5.0 起,任务列表还会为每个运行中的任务展示健康状态(Ready、Idle、Active、Pending、Busy、Bounce、SourceError、SinkError、Fatal 等),并可通过高级选项中的Health Check Duration、Busy State Threshold、Max Write Queue Length、Write Error Threshold等参数调整健康监测口径,详细说明见 Data Connectors 任务管理章节。
断点续传机制
SQL Server 接入任务具备检查点恢复能力:任务会持久化最后一次查询的时间戳,任务中断或重启后从该时间点继续同步,配合延迟时长设置可最大限度保证数据不丢失、不重复。任务进度同样以taosx_task_progress超级表持久化(见 vnodeQuery.c),便于跨重启场景下的状态核查。
小结
通过 taosExplorer 的零代码接入能力,从 Microsoft SQL Server 到 TDengine 的数据迁移与实时同步不再需要编写任何 ETL 代码:你只需完成连接信息、认证与连接选项配置,定义好带时间占位符的 SQL 模板与子表拆分字段,再通过数据映射将源字段映射到目标超级表,即可在数分钟内建立一条可持续运行的数据管道。理解${start}系列占位符与 SQL Server 时间类型的匹配规则、查询间隔与延迟时长的配合方式,以及异常处理策略的选择,是保证任务稳定、有序、不丢数运行的关键。相关资源文件说明可进一步参考 异常处理策略定义 与 高级选项定义。
【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考