IoTDB 数据导入全攻略:工具、自动加载与 Load SQL 详解

# IoTDB 数据导入全攻略:工具、自动加载与 Load SQL 详解


在物联网时序数据规模化应用的今天,如何高效、稳定地将海量数据导入IoTDB,是每个使用者都会面对的问题。IoTDB提供了多种数据导入方式,适配不同场景需求。本文从实操角度出发,详解数据导入工具、TsFile自动加载功能和Load SQL三种方式,帮助读者根据实际场景选择合适方案。


## 三大导入方式概览


IoTDB支持的数据导入方式主要分为三类:


| 导入方式 | 支持格式 | 适用场景 |

|---------|---------|---------|

| 数据导入工具 (import-data) | CSV、SQL、TsFile | 手动批量导入,适合离线数据迁移 |

| TsFile自动加载功能 | TsFile | 实时监听目录,适合流式数据接入 |

| Load SQL | TsFile | 通过SQL命令灵活加载,适合运维操作 |


## 方式一:数据导入工具(import-data)


import-data脚本是IoTDB最通用的数据导入工具,位于`tools`目录下,支持CSV、SQL和TsFile三种格式。


### CSV格式导入


CSV是最常用的数据交换格式。使用import-data.sh导入CSV的基本命令如下:


```bash

# Unix/OS X

tools/import-data.sh -ft csv -h 127.0.0.1 -p 6667 -u root -pw root -s /path/to/data.csv


# Windows

tools\import-data.bat -ft csv -h 127.0.0.1 -p 6667 -u root -pw root -s D:\data\data.csv

```


CSV文件需要遵循特定规范:

- 时间戳列必须作为文件首列

- 支持的时间格式:`yyyy-MM-dd HH:mm:ss`或`yyyy-MM-dd'T'HH:mm:ss.SSSZ`

- Text类型中的特殊字符(如逗号)需用反斜杠`\`转义


以下是一个标准的CSV文件示例:


```csv

Time,root.test.t1.str,root.test.t2.str,root.test.t2.var

1970-01-01T08:00:00.001+08:00,"123hello world","123\,abc",100

1970-01-01T08:00:00.002+08:00,"123",,

```


对于大规模导入,可以通过参数优化性能:


```bash

tools/import-data.sh -ft csv -s ./data/ -fd ./failed/ -aligned true -batch 100000 -tp ms -tn 4

```


关键参数说明:

- `-aligned true`:导入为对齐序列

- `-batch 100000`:每批处理10万行数据

- `-tp ms`:指定时间戳精度为毫秒

- `-tn 4`:启用4个并行线程

- `-fd ./failed/`:指定失败记录存放目录


### SQL格式导入


对于已经导出为SQL文件的数据,import-data工具同样支持:


```bash

tools/import-data.sh -ft sql -s /path/to/data.sql -fd ./failed/ -batch 100000

```


SQL文件中应包含标准的IoTDB插入语句,如:


```sql

insert into root.test.t1(timestamp, str) values(1625097600000, "hello");

insert into root.test.t2(timestamp, str, var) values(1625097601000, "world", 100);

```


## 方式二:TsFile自动加载功能


TsFile是IoTDB的原生文件格式,自动加载功能是v1.3.3版本引入的重要特性。它允许DataNode主动监听指定目录,当新TsFile文件生成时自动加载到数据库中。


### 配置自动加载


在`iotdb-datanode.properties`中配置监听目录:

<"bfd.a8k1.org.cn"><"iky.a8k1.org.cn"><"ynh.a8k1.org.cn">

```properties

# 启用自动加载

data_node_tsfile_auto_load_enable=true

# 监听的目录路径

data_node_tsfile_auto_load_dir=/data/tsfile/incoming

# 加载成功后的处理方式:delete、move或none

data_node_tsfile_auto_load_on_success=move

# 成功文件移动目标目录

data_node_tsfile_auto_load_success_dir=/data/tsfile/success

```


配置完成后重启DataNode,系统即开始自动监听指定目录。这种方式特别适合与数据采集系统集成,采集端将TsFile写入指定目录,IoTDB自动完成加载。


### 结合远程加载


对于分布式场景,IoTDB 0.13.5及以上版本支持通过HTTP协议远程加载TsFile:


```sql

-- 远程加载文件

load 'http://192.168.1.100:8000/data/1575028885956-101-0.tsfile'

```


这需要在源机器上启动HTTP服务,例如使用Python:


```bash

cd /data/tsfile/export

python -m http.server 8000

```


## 方式三:Load SQL导入


Load SQL是最灵活的TsFile导入方式,用户可以通过Cli工具或JDBC直接执行加载命令。


### 基础用法


```sql

-- 加载单个TsFile文件

load '/Users/Desktop/data/1575028885956-101-0.tsfile'


-- 批量加载目录下所有TsFile

load '/Users/Desktop/data'


-- 加载时指定存储组级别

load '/Users/Desktop/data' sglevel=1

<"nyr.a8k1.org.cn"><"ytn.a8k1.org.cn"><"rtg.a8k1.org.cn">

-- 加载后删除源文件

load '/Users/Desktop/data' >

```


### 参数详解


v1.3版本中Load SQL支持以下参数:


| 参数 | 说明 | 默认值 |

|------|------|--------|

| `sglevel` | 自动创建Database的路径层级 | iotdb-common.properties中配置 |

| `verify` | 是否进行元数据校验 | true |

| `onSuccess` | 成功后的处理方式(delete/none) | delete |


开启元数据校验时,若待加载文件中的时间序列与现有序列数据类型不一致,加载会失败;关闭校验可提升加载速度,但需自行保证数据一致性。


### 脚本方式加载


除SQL命令外,IoTDB也提供了独立的加载脚本:


```bash

# Linux/Unix

./load-tsfile.sh -f /data/tsfile/batch -h 192.168.0.101 -p 6667 -u root -pw root --verify=false -->


# Windows

.\load-tsfile.bat -f D:\data\tsfile -h 192.168.0.101 -p 6667 -u root -pw root

```


## 场景化选择建议


面对不同的业务场景,可以选择最合适的导入方式:


- **历史数据批量迁移**:推荐使用import-data工具导入CSV或SQL文件,支持断点续传和失败重试。

- **实时数据流接入**:启用TsFile自动加载功能,采集端持续写入TsFile,IoTDB自动监听加载。

- **跨集群数据同步**:使用export-tsfile导出后再用Load SQL导入,支持完整的时序数据语义。

- **运维临时操作**:直接使用Load SQL命令,灵活快捷。


## 常见问题处理


### 1. 导入失败文件处理


使用import-data时,可通过`-fd`参数指定失败文件存放目录。失败文件以`.failed`为后缀,可检查后修正数据重新导入。


### 2. 数据类型不一致


导入CSV时可通过`-typeInfer`参数指定类型映射:


```bash

-typeInfer boolean=text,float=double,int=long

```


### 3. 内存溢出


对于超大文件导入,适当调低`-batch`参数值,避免单次处理数据量过大。


## 结语


IoTDB丰富的数据导入方式,覆盖了从离线批量到实时流式、从本地文件到远程加载的全场景需求。import-data工具简单通用,自动加载功能解放运维,Load SQL灵活可控。掌握这三种方式,即可根据业务特点选择最优方案,让时序数据接入更加高效顺畅。


请使用浏览器的分享功能分享到微信等