上一篇咱们聊了 MySQL 到 KaiwuDB 关系引擎的迁移,从模型差异、类型映射到 KDTS 图形化迁移、DataX 脚本迁移和 CSV 离线兜底,走了一遍关系型数据的搬家流程。但数据库迁移这事儿,关系型数据只是其中一块。做 IoT 采集、能耗监测、设备状态监控或者应用指标平台的伙伴们也会经常接触到另一套比较熟悉的系统 InfluxDB。今天,就为大家详细介绍下如何将Influxdb 丝滑迁移至 KaiwuDB 。

一、InfluxDB 与 KaiwuDB 时序引擎的模型差异
动手迁移之前,咱们得先弄明白两边"说话的方式"有什么不同。InfluxDB 的核心由 database、retention policy、measurement、tag、field、timestamp 组成。tag 负责记录常用查询维度并建立索引,field 记录真实采集值但通常不建索引,timestamp 是所有 point 的时间轴。
KaiwuDB 时序引擎则使用时序数据库和时序表来管理数据。时序表包含时间戳列、字段列和标签列,并且要求配置主标签(Primary Tags)。主标签用于区分不同实体,KaiwuDB 会自动为主标签列创建索引,提升按实体维度过滤和聚合的效率。

💡 总结:InfluxDB 的 tag/field 界限比较灵活,KaiwuDB 则要求你显式区分"主标签、普通标签、字段列",这个差异直接决定了后续查询性能和迁移成败。
二、标签、字段与主标签怎么选
这是整个迁移过程中最容易返工的环节。InfluxDB 里 tag 是字符串型元数据,适合放设备编号、区域、机组、传感器类型等经常用于 WHERE 过滤和 GROUP BY 的维度;field 是实际指标值,例如温度、电压、电流、功率、状态码。迁移到 KaiwuDB 时,tag 不要简单全部塞进普通字段,而要根据查询习惯决定哪些进入主标签:
- 主标签(Primary Tags):优先选择稳定、高频过滤、能唯一或近似唯一标识实体的字段,例如
device_id、meter_id、asset_id、host。 - 普通标签(TAGS):可继续作为 TAGS 保存,例如
region、workshop、line、model、vendor。 - 字段列(Fields):适合作为普通采集列保存,例如
temperature、pressure、voltage、current、status。
⚠️ 提示:不要把高基数字段全部设为主标签!主标签有数量和类型约束,建表前可前往官方文档确认 >>https://www.kaiwudb.com/docs/#/db-administration/db-object-mgmt/ts-db/label-mgmt-ts.html
三、迁移前须知
InfluxDB 到 KaiwuDB 时序引擎的关键,是把 measurement 的 tag set 和 field set 转换为稳定的时序表结构。不同 measurement 的 field key 可以不同,同一 field key 在不同时段也可能出现类型漂移,因此迁移前必须先做一轮元数据盘点:
- 执行
SHOW MEASUREMENTS、SHOW TAG KEYS、SHOW FIELD KEYS,导出元数据清单。 - 按时间窗口统计每个 measurement 的点数、最早时间、最晚时间和冷热数据分布。
- 检查 field 类型漂移,例如
temperature一部分为 float,一部分为 string。 - 整理 Grafana / 告警 / 接口中的 InfluxQL 或 Flux 查询,反推主标签和索引需求。
二种迁移方案,按需选择

四、数据类型映射:InfluxDB 到 KaiwuDB 时序引擎
InfluxDB 的类型系统相对简洁,但迁移时要特别关注整数后缀、字符串转义、布尔值、时间精度和空值。KaiwuDB 官方参考中,InfluxDB 到 KaiwuDB 时序引擎的主要映射如下。

五、表结构迁移:创建 KaiwuDB 时序库和时序表
下面以 cpu measurement 为例演示。源端记录主机 CPU 使用率,tag 包括 host、region、service,field 包括 usage_user、usage_system、usage_idle。目标端将 host 作为主标签,region 和 service 保留为普通标签。
1. 源端 measurement 说明
**InfluxQL**
-- InfluxDB 元数据查看示例
SHOW TAG KEYS FROM cpu;
SHOW FIELD KEYS FROM cpu;
-- 典型 point 逻辑结构
measurement: cpu
tags: host=host-01, region=cn-north, service=payment
fields: usage_user=12.4, usage_system=3.8, usage_idle=83.8
time: 2026-06-29T10:00:00Z
2. 创建并切换时序库
CREATE TS DATABASE IF NOT EXISTS metrics
RETENTIONS 365d
PARTITION INTERVAL 1d
USE metrics;
3. 创建时序表并配置主标签
CREATE TABLE cpu (
k_timestamp TIMESTAMPTZ NOT NULL,
usage_user FLOAT8 NULL,
usage_system FLOAT8 NULL,
usage_idle FLOAT8 NULL,
status VARCHAR NULL
) TAGS (
host VARCHAR NOT NULL,
region VARCHAR NULL,
service VARCHAR NULL
) PRIMARY TAGS (host);
六、DataX 直连数据迁移
如果需要脚本化、自动化执行,可采用 DataX 直连迁移。KaiwuDB DataX 文档说明 KaiwuDBWriter 可写入 KaiwuDB 时序表和关系表,支持 InfluxDB10Reader 作为源端 Reader。
1. 配置 KaiwuDBWriter
-
迁移服务器提前部署 Java、Python3、DataX 基础环境。
-
将 kaiwudbwriter 插件复制到 datax/plugin/writer/ 目录。
-
按 InfluxDB 版本准备 influxdb10reader 插件。
-
在 KaiwuDB 中提前创建目标时序库和时序表,并确认主标签、标签列、字段列已经规划完成。
2. 配置 DataX 作业文件
{
"job": {
"content": [
{
"reader": {
"name": "influxdb10reader",
"parameter": {
"endpoint": "http://127.0.0.1:8086",
"username": "influx_user",
"password": "influx_password",
"database": "telegraf",
"measurement": "cpu",
"beginDateTime": "2026-06-01 00:00:00",
"endDateTime": "2026-06-02 00:00:00",
"interval": 3600,
"column": [
"time",
"usage_user",
"usage_system",
"usage_idle",
"host",
"region",
"service"
]
}
},
"writer": {
"name": "kaiwudbwriter",
"parameter": {
"username": "kaiwudb_user",
"password": "kaiwudb_password",
"jdbcUrl": "jdbc:kaiwudb://127.0.0.1:26257/metrics",
"table": "cpu",
"column": [
"k_timestamp",
"usage_user",
"usage_system",
"usage_idle",
"host",
"region",
"service"
],
"writeMode": "INSERT",
"batchSize": 1000
}
}
}
],
"setting": {
"speed": {
"channel": 2
}
}
}
}
时间精度:InfluxDB 常见时间精度包括秒、毫秒、微秒和纳秒。写入 KaiwuDB 前必须确认 Reader 输出到 k_timestamp 的精度和时区,否则同一批数据可能出现时间偏移或重复点。
3. 启动迁移任务
cd /home/kaiwudb/datax
python3 ./bin/datax.py ./job/influx_cpu_to_kaiwudb.json
2026-06-29 15:30:22.410 [job-0] INFO StandAloneJobContainerCommunicator - Total 3680000 records, 210MB | Speed 3.2MB/s, 58000 records/s | Error 0 records, 0 bytes | Percentage 100.00%
任务启动时刻 : 2026-06-29 15:29:10
任务结束时刻 : 2026-06-29 15:30:22
任务总计耗时 : 72s
读出记录总数 : 3680000 读写失败总数 : 0
4. 查看迁移结果
SELECT COUNT(*) FROM cpu;
root@26257/metrics> select count(*) from cpu;
---------
3680000
(1 row)
Time:101.21345ms
七、离线兜底方案
当 InfluxDB 与 KaiwuDB 网络无法互通,或迁移窗口要求完全离线时,可以先从 InfluxDB 导出 CSV,再在 KaiwuDB 侧导入。离线迁移一定要保留 tag、field、timestamp 的清晰边界,不要导出成难以解析的一列文本。
1. InfluxDB 导出 CSV
influx -database 'telegraf' -execute "
SELECT usage_user, usage_system, usage_idle
FROM cpu
WHERE time >= '2026-06-01T00:00:00Z'
AND time < '2026-06-02T00:00:00Z'
" -format csv > /tmp/cpu_20260601.csv
2. CSV 清洗规则
-
保留时间列,并统一为 KaiwuDB 可解析的 TIMESTAMP/TIMESTAMPTZ 格式。
-
将 tag 列展开为独立列,例如 host、region、service。
-
将 field 列按目标表字段顺序展开,不要保留 field key/value 混合结构。
-
处理空值、NaN、Infinity、字符串引号、换行和分隔符冲突。
-
按时间窗口拆分文件,避免单个 CSV 过大导致导入失败后难以重试。
八、迁移后校验与回滚

-
保留源端只读能力,迁移完成后至少保留一个完整业务周期。
-
大表按时间窗口迁移,每个窗口迁移完成后立即校验,失败只重跑该窗口。
-
割接前冻结 InfluxDB 写入或开启双写,避免全量迁移完成后持续产生数据缺口。
-
回滚条件包括点数明显不一致、主标签映射错误、核心仪表盘查询结果异常、写入延迟不可接受。
九、总结回顾
InfluxDB 迁移到 KaiwuDB 时序引擎的核心,就是把 measurement、tag、field、timestamp 重新映射为 KaiwuDB 的时序库、时序表、标签、主标签和字段。主标签规划决定后续查询效率,也决定迁移返工成本。
-
按 measurement 梳理结构,先做元数据盘点,再建 KaiwuDB 时序表。
-
主标签优先选择稳定、高频过滤、能代表实体的 tag。
-
时间范围和切分时间间隔是 InfluxDB 迁移必配项,大表必须分批迁移。
-
字段类型、时间精度、空值和字符串转义是最常见的失败来源。
-
迁移后必须按时间窗口、tag 组合、聚合值和抽样点做双端校验。
数据库迁移的关键,是让数据顺利搬过去,也让业务稳定跑起来。如果你在迁移过程中遇到问题,欢迎在评论区留言讨论;也欢迎申请试用 KaiwuDB 数据库:https://www.kaiwudb.com/download?tab=1

评论(0)