
TDengine 零代码接入 Microsoft SQL Server基于 taosExplorer 的数据迁移与实时同步实战【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengineTDengine 自企业版 v3.3.2.0 起可通过 taosExplorer 图形界面零代码创建数据写入任务从 Microsoft SQL Server2016 或支持 TLS1.2将历史数据与实时数据接入 TDengine 集群。本文以 16-mssql.md 为骨架完整讲解从新增数据源、配置连接与认证、设计分段查询 SQL到数据映射、高级选项与异常处理策略的全流程帮助你在不编写一行 ETL 代码的前提下完成 SQL Server → TDengine 的稳定数据同步。功能概述Microsoft SQL Server 是最流行的关系型数据库之一大量物联网、工业互联网系统曾使用它存储设备上报数据。然而随着接入设备量持续增长、实时性要求不断提高传统关系型数据库在海量时序数据写入与查询场景下面临瓶颈。TDengine 针对这一痛点从企业版 v3.3.2.0 开始支持高效地从 Microsoft SQL Server 读取数据并写入 TDengine用于两类典型场景历史数据迁移将 SQL Server 中长期积累的历史数据一次性/分批迁移至 TDengine实时数据同步持续增量读取 SQL Server 中最新产生的数据实现准实时同步。整个接入过程基于 taosExplorer 与 taosX 完成。taosExplorer 提供浏览器端配置界面taosX 负责任务执行当 taosX 无法直接连接数据源时可在数据源所在网络安装 taosX-Agent 作为代理安装步骤见 安装 taosX-Agent。零代码数据接入的整体架构与支持的数据源清单见 零代码数据写入。创建任务新增数据源登录 taosExplorer 后进入左侧导航栏的数据写入页面点击新增数据源按钮进入新增数据源页面进入新增数据源页面配置基本信息在名称字段中输入任务名称例如test_mssql_01。在类型下拉框中选择Microsoft SQL Server选择完成后页面中的字段会随之变化。代理是非必填项。当 taosX 无法直连源数据库时可在下拉框中选择已创建的代理或点击右侧创建新的代理按钮跳转至代理页面安装并注册 taosX-Agent 后使用。目标数据库是必填项用于指定数据写入 TDengine 的目标库。如果尚未创建可点击右侧创建数据库按钮直接创建。配置连接信息在连接配置区域填写源 Microsoft SQL Server 数据库的连接信息主要包括服务地址、服务端口与数据库名。默认端口为 SQL Server 的 1433 端口填写示例如下填写源 Microsoft SQL Server 数据库的连接信息配置认证信息用户输入源 Microsoft SQL Server 数据库的用户该用户必须在该组织中拥有读取权限否则同步任务将无法获取数据密码输入上方用户对应的登录密码。配置连接选项连接选项区域提供 SQL Server 特有的连接参数各字段说明如下字段说明实例名称设置 Microsoft SQL Server 实例名称在 SQL 浏览器中定义的实例名称。仅在 Windows 平台上可用如果指定端口将被替换为从 SQL 浏览器中返回的值应用名称设置应用程序名称用于标识当前连接的应用程序便于在 SQL Server 侧审计与定位连接来源加密设置是否使用加密连接。默认值是Off可选项有Off、On、NotSupported、Required信任证书设置是否信任服务器证书。如果开启则不会验证服务器证书并按原样接受它开启后将会隐藏下方的信任证书 CA字段信任证书 CA设置是否信任服务器的证书 CA。如果上传 CA 文件除了系统信任库之外还将根据给定的 CA 证书验证服务器证书配置完成后点击检查连通性按钮可验证上方填写的信息是否可以正常获取源 Microsoft SQL Server 数据库的数据。若检查失败请根据页面返回的具体错误提示修正配置。配置 SQL 查询SQL 查询区域是决定迁移效率与数据正确性的核心包含以下配置项。子表字段子表字段用于拆分子表它是一条select distinct的 SQL 语句查询指定字段组合的非重复项通常与 transform 中的 tag 相对应。此项配置主要为了解决数据迁移乱序问题需要结合SQL 模板共同使用否则不能达到预期效果。使用示例如下子表字段填写语句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_name1deviceA、col_name21而不是裸列名在transform中配置col_name1与col_name2两个 tag 映射。通过为每个子表加上等值过滤条件每次查询只处理特定设备组合的数据配合时间范围条件即可保证单个子表内的数据按时间有序写入从根源上规避乱序问题。SQL 模板与时间占位符SQL 模板是用于查询的 SQL 语句模板其中必须包含时间范围条件且开始时间和结束时间必须成对出现。时间范围由源数据库中的某个代表时间的列与占位符共同组成。SQL 使用不同的占位符表示不同的时间格式要求占位符含义示例${start}、${end}RFC3339 格式时间戳2024-03-14T08:00:000800${start_no_tz}、${end_no_tz}不带时区的 RFC3339 字符串2024-03-14T08:00:00${start_date}、${end_date}仅日期2024-03-14一个典型的 SQL 模板示例如下select * from table where ts ${start} and ts ${end} order by ts asc重要限制SQL Server 特有只有datetime2与datetimeoffset类型支持使用${start}/${end}查询datetime与smalldatetime只能使用${start_no_tz}/${end_no_tz}查询而timestamp类型不能用作查询条件。此外为了解决迁移数据乱序问题应在查询语句中添加排序条件例如order by ts asc。时间范围与同步节奏起始时间迁移数据的起始时间必填字段结束时间迁移数据的结束时间可留空。如果设置则迁移任务执行到结束时间后自动停止如果留空则持续同步实时数据任务不会自动停止查询间隔分段查询数据的时间间隔默认 1 天。为了避免单次查询数据量过大一次数据同步子任务会按照查询间隔将时间范围切分为多个时间段分别查询延迟时长与查询间隔配合使用。在实时同步数据场景中为了避免延迟写入的数据丢失每次同步任务会在「时间间隔 延迟时长」的时间点触发查询。例如时间间隔为 3600s延迟时长为 60 秒那么查询任务会在 09:01 触发查询源数据库中 08:00 - 09:00 时间段的数据。配置数据采集配置数据映射在数据映射区域完成源字段到目标超级表字段的映射。点击从服务器检索按钮从 Microsoft SQL Server 服务器获取示例数据作为后续映射与预览的输入在从列中提取或拆分中填写从消息体中提取或拆分的字段。例如将 vValue 字段拆分成vValue_0和vValue_1两个字段选择split提取器separator 填写分隔符,number 填写 2在过滤中填写过滤条件。例如填写Value 0则只有 Value 大于 0 的数据才会被写入 TDengine在映射中选择要映射到的 TDengine 超级表以及映射到超级表的列点击预览查看映射结果确认无误后再提交。关于解析、提取/拆分、过滤与映射规则的完整说明JSON Path、Regex、UDT 脚本、过滤表达式、mapping/value/generator/join/format/sum/expr 等映射规则可参考 零代码数据写入 中的「数据提取、过滤和转换」章节。配置高级选项高级选项区域默认折叠点击右侧可展开完整字段说明见 _02-advanced_options.mdx。常见项如下最大读取并发数限制数据源连接数或读取线程数。默认0表示由采集器自动配置数据源响应较慢时可适当增大批次大小单次发送的最大消息数或行数默认值因数据源而异常见为1000或10000部分数据源还提供写入并发数量同时写入 TDengine 的并发任务数健康监测相关选项健康监测时段、Busy 状态阈值、写入队列长度、写入错误阈值等的含义见 健康状态。异常处理策略异常处理策略区域用于配置数据异常时的处理方式默认折叠点击右侧可展开完整字段说明见 _03-exception-handling-strategy.mdx。通用处理策略说明归档将异常数据写入归档文件默认路径为${data_dir}/tasks/_id/.datetime不写入目标库丢弃将异常数据忽略不写入目标库报错任务报错。各异常项及可选策略如下异常项可选处理策略目标库连接超时归档、丢弃、报错、缓存目标库状态异常时写入缓存文件恢复后重新入库目标库不存在归档、丢弃、报错表不存在归档、丢弃、报错、自动建表建表成功后重试主键时间戳溢出归档、丢弃、报错校验范围 now-keep1 ~ now100y主键时间戳空归档、丢弃、报错、使用当前时间填充复合主键空归档、丢弃、报错表名长度溢出归档、丢弃、报错、截断前 192 字符、截断且归档表名非法字符归档、丢弃、报错、非法字符替换为指定字符串表名模板变量空值丢弃、留空、变量替换为指定字符串列名不存在归档、丢弃、报错、自动增加缺失列修改表结构后重试列名长度溢出归档、丢弃、报错列长度溢出归档、丢弃、报错、截断、截断且归档数据异常其他归档、丢弃、报错此外还有若干全局配置项列自动扩容开关打开时列数据超长自动修改表结构并重试、连接超时目标库连接超时时间单位秒取值范围 1~600、临时存储文件位置实际生效位置为${data_dir}/tasks/:id/{location}、归档数据保留天数非负整数0 表示无限制、归档数据可用空间0~655350 表示无限制、归档数据文件位置、归档数据失败处理策略删除旧文件、丢弃、报错并停止任务。创建完成确认所有配置无误后点击提交按钮完成 Microsoft SQL Server 到 TDengine 的数据同步任务创建回到数据源列表页面即可查看任务执行情况。任务运维健康状态与断点恢复任务创建后可以在任务列表页面对任务进行启动、停止、查看、删除、复制等操作并查看写入记录条数、流量等运行指标。从 v3.3.5.0 起任务管理列表新增健康状态列用于指示任务运行过程中的健康状态主要状态包括Ready数据源和目标端健康检查通过可正常读写Active任务正常运行且处于活跃状态Idle监测时段内无数据处理Pending数据源正常但写入端等待中写入消息数为 0 时切换Busy写入队列已满可能存在性能瓶颈需要调整参数Bounce写入过程存在错误且超出阈值可能意味着存在大量非正常数据或正在发生数据丢失SourceError / SinkError数据源或写入端错误工作负载会尝试重连Fatal严重或无法恢复的错误。特别地针对 SQL Server 这类「按时间范围查询」的数据源taosX 支持断点恢复持久化记录上次查询的时间戳任务重新启动后从记录的时间戳开始继续查询详见 任务断点恢复。这意味着即使任务中途因网络或数据库抖动中断恢复后也不会重复拉取大量历史数据或遗漏数据保证了迁移与实时同步的连续性。小结通过 taosExplorer 创建 Microsoft SQL Server 数据写入任务本质上是一个「分段查询 增量同步」的过程以 SQL 模板中的时间占位符驱动分段拉取以子表字段的等值条件保证按子表有序写入以查询间隔与延迟时长控制同步节奏避免数据丢失再配合数据映射、过滤与完善的异常处理策略即可在不编写代码的情况下完成历史迁移与实时同步。配置过程中需特别注意 SQL Server 时间类型的查询限制datetime/smalldatetime仅支持无时区占位符、timestamp不能作为查询条件并在 SQL 模板中加入order by排序这是保证数据正确性的关键。【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考