从 InfluxDB 迁移到 KaiwuDB
本节介绍了如何将 InfluxDB 数据迁移到 KaiwuDB,涵盖配置示例和数据类型映射关系。
提示
KaiwuDB 时序表的第一列必须是时间戳列,且必须设置主标签列。迁移 InfluxDB 数据的元数据到时序库时,KaiwuDB 会自动为表添加 ts
时间戳列作为第一列,添加 tb_name_tag
标签列作为主标签列。
手动创建时序表迁移 InfluxDB 数据时,需要用户自行指定时间戳列和主标签列。
配置示例
本节提供了以下常见的迁移配置示例:
单库迁移元数据
前提条件
- 完成迁移准备。
- 在 InfluxDB 数据库中创建
influxdb_kaiwudb
数据库和待迁移的表。 - 在 KaiwuDB 数据库中创建
influxdb_kaiwudb
时序库。
说明
- 目标数据库的库名必须与源数据库的库名相同。
- 如果登录 KaiwuDB 数据库的用户为
admin
用户或admin
角色的成员,则无需提前建库,KaiwuDB 将自动创建与源数据库同名的时序库。
步骤
解压缩 KaiwuDB DataX 插件包,将解压后的
kaiwudbwriter
复制到datax/plugin/writer
目录。创建
.yml
格式的迁移配置文件,配置元数据、源数据库和目标数据库。有关配置参数的详细信息,参见配置参数。metadata: enable: true # 启用元数据迁移 engine-type: TIMESERIES # 引擎类型为时序引擎 auto-ddl: true # 自动创建表 source: type: INFLUXDB2X # 源数据库是 InfluxDB host: 192.168.122.67 # 数据库主机地址 port: 8086 # InfluxDB 数据库端口 username: <username> # InfluxDB 数据库用户名 password: <password> # InfluxDB 数据库密码 databases: - name: influxdb_kaiwudb # 源数据库名 target: type: KAIWUDB # 目标数据库是 KaiwuDB host: 127.0.0.1 # KaiwuDB 数据库主机地址 port: 26257 # KaiwuDB 数据库端口 username: <username> # KaiwuDB 数据库用户名 password: <password> # KaiwuDB 数据库密码 databases: - name: influxdb_kaiwudb # 目标数据库名
在
kaiwudb-datax-utils-2.2.0.jar
所在目录,执行以下命令,开始迁移表元数据。有关迁移命令支持的所有参数,参见迁移命令参数。java -jar -DyamlPath=../influxdb2kaiwudb.yml kaiwudb-datax-utils-2.2.0.jar
多表迁移指定范围的业务数据
前提条件
- 完成迁移准备。
- 在 InfluxDB 数据库中创建
influxdb_kaiwudb
数据库和待迁移的表。 - 在 KaiwuDB 数据库中创建
influxdb_kaiwudb
时序库。
步骤
解压缩 KaiwuDB DataX 插件包,将解压后的
kaiwudbwriter
复制到datax/plugin/writer
目录。创建
.yml
格式的迁移配置文件,配置业务数据、源数据库和目标数据库。有关配置参数的详细信息,参见配置参数。data: enable: true # 启用业务数据迁移 batchSize: 1000 # 每批次迁移的记录数为 1000 条 readTimeout: 60 # 读取超时时间,单位为秒,设置为 60 秒 setting: speed: channel: 1 # 设置迁移通道的数量为 1,表示单通道迁移 errorLimit: percentage: 0.02 # 设置最大错误率为 2%,超过此比例将停止迁移 core: transport: channel: speed: byte: 1048576 # 每个传输通道的传输速率为 1 MB(1048576 字节) record: 1000 # 每个通道每次传输 1000 条记录 source: type: INFLUXDB2X # 源数据库类型为 InfluxDB 2.x url: http://127.0.0.1:8086 # InfluxDB 数据库连接 URL username: <username> # InfluxDB 数据库用户名 password: <password> # InfluxDB 数据库密码 databases: - name: influxdb_kaiwudb # 源数据库名 tables: - name: table_1 # 迁移的第一张表 column: _time,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,t1,t2 # 迁移的列 beginDateTime: "2024-02-27 00:00:00" # 迁移数据的起始时间 endDateTime: "2024-03-01 00:00:00" # 迁移数据的结束时间 splitIntervalS: 86400 # 数据切分间隔,单位为秒(86400秒表示1天) - name: table_2 # 迁移的第二张表 column: _time,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,t1,t2 # 迁移的列 beginDateTime: "2024-02-27 00:00:00" # 迁移数据的起始时间 endDateTime: "2024-03-01 00:00:00" # 迁移数据的结束时间 splitIntervalS: 86400 # 数据切分间隔,单位为秒(86400秒表示1天) target: type: KAIWUDB # 目标数据库为 KaiwuDB url: jdbc:kaiwudb://127.0.0.1:26257/influxdb_kaiwudb # KaiwuDB 连接 URL username: <username> # KaiwuDB 数据库用户名 password: <password> # KaiwuDB 数据库密码 databases: - name: influxdb_kaiwudb # 目标数据库名 tables: - name: table_1 # 迁移的第一张表 column: ts,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,t1,t2 # 迁移的列 preSql: - create table table_1 (ts timestamptz not null, c1 smallint, c2 int, c3 bigint, c4 float4, c5 float8, c6 bool, c7 char(10), c8 nchar(10), c9 varchar(10), c10 nvarchar(10), c11 varbytes(10), c12 timestamptz) tags (t1 varchar not null, t2 varchar) primary tags (t1) # 创建目标表结构,包括时间戳列(ts)和主标签列(t1) - name: table_2 # 迁移的第二张表 column: ts,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,t1,t2 # 迁移的列 preSql: - create table table_2 (ts timestamptz not null, c1 smallint, c2 int, c3 bigint, c4 float4, c5 float8, c6 bool, c7 char(10), c8 nchar(10), c9 varchar(10), c10 nvarchar(10), c11 varbytes(10), c12 timestamptz) tags (t1 varchar not null, t2 varchar) primary tags (t1) # 创建目标表结构,包括时间戳列(ts)和主标签列(t1)
在
kaiwudb-datax-utils-2.2.0.jar
所在目录,执行以下命令,开始迁移表元数据和业务数据。有关迁移命令支持的所有参数,参见迁移命令参数。java -jar -DyamlPath=../influxdb2kaiwudb.yml -DdataxPath=../datax -Dpython=python kaiwudb-datax-utils-2.2.0.jar
数据类型映射
InfluxDB 到 KaiwuDB 表结构迁移字段和标签数据类型映射关系如下:
InfluxDB | KaiwuDB 时序数据 |
---|---|
BOOLEAN | BOOL |
INTEGER | INT4 |
LONG | INT8 |
DOUBLE | FLOAT8 |
FLOAT | FLOAT8 |
STRING | VARCHAR |
TIMESTAMP | TIMESTAMP |