數(shù)據(jù)導(dǎo)入
大約 8 分鐘
數(shù)據(jù)導(dǎo)入
1. IoTDB 數(shù)據(jù)導(dǎo)入
IoTDB 目前支持將 CSV、SQL、及TsFile(IoTDB底層開放式時間序列文件格式)格式的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫。具體功能如下:
| 文件格式 | IoTDB工具 | 具體介紹 |
|---|---|---|
| CSV | import-data.sh/bat | 可用于單個或一個目錄的 CSV 文件批量導(dǎo)入 IoTDB |
| SQL | import-data.sh/bat | 可用于單個或一個目錄的 SQL 文件批量導(dǎo)入 IoTDB |
| TsFile | load-tsfile.sh/bat | 可用于單個或一個目錄的 TsFile 文件批量導(dǎo)入 IoTDB |
| TsFile 主動監(jiān)聽&加載功能 | 根據(jù)用戶配置,監(jiān)聽指定路徑下TsFile文件的變化,將新增加的TsFile文件加載入IoTDB |
2. import-data 腳本
- 支持格式:CSV、SQL
2.1 運(yùn)行命令:
# Unix/OS X
>tools/import-data.sh -h <ip> -p <port> -u <username> -pw <password> -s <xxx.csv/sql> [-fd <./failedDirectory> -aligned <true/false> -batch <int> -tp <ms/ns/us> -typeInfer <boolean=text,float=double...> -lpf <int>]
# Windows
>tools\import-data.bat -h <ip> -p <port> -u <username> -pw <password> -s <xxx.csv/sql> [-fd <./failedDirectory> -aligned <true/false> -batch <int> -tp <ms/ns/us> -typeInfer <boolean=text,float=double...> -lpf <int>]2.2 參數(shù)介紹:
| 參數(shù) | 定義 | 是否必填 | 默認(rèn) |
|---|---|---|---|
| -h | 數(shù)據(jù)庫IP地址 | 否 | 127.0.0.1 |
| -p | 數(shù)據(jù)庫端口 | 否 | 6667 |
| -u | 數(shù)據(jù)庫連接用戶名 | 否 | root |
| -pw | 數(shù)據(jù)庫連接密碼 | 否 | root |
| -s | 指定想要導(dǎo)入的數(shù)據(jù),這里可以指定文件或者文件夾。如果指定的是文件夾,將會把文件夾中所有的后綴為 csv 或者 sql 的文件進(jìn)行批量導(dǎo)入(V1.3.2版本參數(shù)是-f) | 是 | |
| -fd | 指定存放失敗 SQL 文件的目錄,如果未指定這個參數(shù),失敗的文件將會被保存到源數(shù)據(jù)的目錄中。 說明:對于不支持的 SQL ,不合法的 SQL ,執(zhí)行失敗的 SQL 都會放到失敗目錄下的失敗文件里(默認(rèn)為 文件名.failed) | 否 | 源文件名加上.failed后綴 |
| -aligned | 指定是否使用aligned接口,選項(xiàng)為 true 或者 false 說明:這個參數(shù)只在導(dǎo)入文件為csv文件時生效 | 否 | false |
| -batch | 用于指定每一批插入的數(shù)據(jù)的點(diǎn)數(shù)(最小值為1,最大值為 Integer.MAX_VALUE)。如果程序報了org.apache.thrift.transport.TTransportException: Frame size larger than protect max size這個錯的話,就可以適當(dāng)?shù)恼{(diào)低這個參數(shù)。 | 否 | 100000 |
| -tp | 指定時間精度,可選值包括ms(毫秒),ns(納秒),us(微秒) | 否 | ms |
| -lpf | 指定每個導(dǎo)入失敗文件寫入數(shù)據(jù)的行數(shù)(V1.3.2版本參數(shù)是-linesPerFailedFile) | 否 | 10000 |
| -typeInfer | 用于指定類型推斷規(guī)則,如<srcTsDataType1=dstTsDataType1,srcTsDataType2=dstTsDataType2,...>。 說明:用于指定類型推斷規(guī)則.srcTsDataType 包括 boolean,int,long,float,double,NaN.dstTsDataType 包括 boolean,int,long,float,double,text.當(dāng)srcTsDataType為boolean, dstTsDataType只能為boolean或text.當(dāng)srcTsDataType為NaN, dstTsDataType只能為float, double或text.當(dāng)srcTsDataType為數(shù)值類型, dstTsDataType的精度需要高于srcTsDataType.例如:-typeInfer boolean=text,float=double | 否 |
2.3 運(yùn)行示例:
- 導(dǎo)入當(dāng)前
data目錄下的dump0_0.sql數(shù)據(jù)到本機(jī) IoTDB 數(shù)據(jù)庫中。
# Unix/OS X
>tools/import-data.sh -s ./data/dump0_0.sql
# Windows
>tools/import-data.bat -s ./data/dump0_0.sql- 將當(dāng)前
data目錄下的所有數(shù)據(jù)以對齊的方式導(dǎo)入到本機(jī) IoTDB 數(shù)據(jù)庫中。
# Unix/OS X
>tools/import-data.sh -s ./data/ -fd ./failed/ -aligned true
# Windows
>tools/import-data.bat -s ./data/ -fd ./failed/ -aligned true- 導(dǎo)入當(dāng)前
data目錄下的dump0_0.csv數(shù)據(jù)到本機(jī) IoTDB 數(shù)據(jù)庫中。
# Unix/OS X
>tools/import-data.sh -s ./data/dump0_0.csv -fd ./failed/
# Windows
>tools/import-data.bat -s ./data/dump0_0.csv -fd ./failed/- 將當(dāng)前
data目錄下的dump0_0.csv數(shù)據(jù)以對齊的方式,一批導(dǎo)入100000條導(dǎo)入到192.168.100.1IP所在主機(jī)的 IoTDB 數(shù)據(jù)庫中,失敗的記錄記在當(dāng)前failed目錄下,每個文件最多記1000條。
# Unix/OS X
>tools/import-data.sh -h 192.168.100.1 -p 6667 -u root -pw root -s ./data/dump0_0.csv -fd ./failed/ -aligned true -batch 100000 -tp ms -typeInfer boolean=text,float=double -lpf 1000
# Windows
>tools/import-data.bat -h 192.168.100.1 -p 6667 -u root -pw root -s ./data/dump0_0.csv -fd ./failed/ -aligned true -batch 100000 -tp ms -typeInfer boolean=text,float=double -lpf 10002.4 導(dǎo)入說明
- CSV 導(dǎo)入規(guī)范
- 特殊字符轉(zhuǎn)義規(guī)則:若Text類型的字段中包含特殊字符(例如逗號,),需使用反斜杠(\)?進(jìn)行轉(zhuǎn)義處理。
- 支持的時間格式:yyyy-MM-dd'T'HH:mm:ss, yyy-MM-dd HH:mm:ss, 或者 yyyy-MM-dd'T'HH:mm:ss.SSSZ。
- 時間戳列?必須作為數(shù)據(jù)文件的首列存在。
- CSV 文件示例
- 時間對齊
-- header 中不包含數(shù)據(jù)類型
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",,
-- header 中包含數(shù)據(jù)類型(Text 類型數(shù)據(jù)支持加雙引號和不加雙引號)
Time,root.test.t1.str(TEXT),root.test.t2.str(TEXT),root.test.t2.var(INT32)
1970-01-01T08:00:00.001+08:00,"123hello world","123\,abc",100
1970-01-01T08:00:00.002+08:00,123,hello world,123
1970-01-01T08:00:00.003+08:00,"123",,
1970-01-01T08:00:00.004+08:00,123,,12- 設(shè)備對齊
-- header 中不包含數(shù)據(jù)類型
Time,Device,str,var
1970-01-01T08:00:00.001+08:00,root.test.t1,"123hello world",
1970-01-01T08:00:00.002+08:00,root.test.t1,"123",
1970-01-01T08:00:00.001+08:00,root.test.t2,"123\,abc",100
-- header 中包含數(shù)據(jù)類型(Text 類型數(shù)據(jù)支持加雙引號和不加雙引號)
Time,Device,str(TEXT),var(INT32)
1970-01-01T08:00:00.001+08:00,root.test.t1,"123hello world",
1970-01-01T08:00:00.002+08:00,root.test.t1,"123",
1970-01-01T08:00:00.001+08:00,root.test.t2,"123\,abc",100
1970-01-01T08:00:00.002+08:00,root.test.t1,hello world,1233. load-tsfile 腳本
- 支持格式:TsFile
3.1 運(yùn)行命令
# Unix/OS X
>tools/load-tsfile.sh -h <ip> -p <port> -u <username> -pw <password> -s <source> -os <on_success> [-sd <success_dir>] -of <on_fail> [-fd <fail_dir>] [-tn <thread_num>]
# Windows
>tools\load-tsfile.bat -h <ip> -p <port> -u <username> -pw <password> -s <source> -os <on_success> [-sd <success_dir>] -of <on_fail> [-fd <fail_dir>] [-tn <thread_num>]3.2 參數(shù)介紹
| 參數(shù) | 定義 | 是否必填 | 默認(rèn) |
|---|---|---|---|
| -h | 主機(jī)名 | 否 | root |
| -p | 端口號 | 否 | root |
| -u | 用戶名 | 否 | 127.0.0.1 |
| -pw | 密碼 | 否 | 6667 |
| -s | 待加載的腳本文件(夾)的本地目錄路徑 | 是 | |
| -os | none:不刪除 mv:移動成功的文件到目標(biāo)文件夾 cp:硬連接(拷貝)成功的文件到目標(biāo)文件夾 delete:刪除 | 是 | |
| -sd | 當(dāng)--on_succcess為mv或cp時,mv或cp的目標(biāo)文件夾。文件的文件名變?yōu)槲募A打平后拼接原有文件名 | 當(dāng)--on_succcess為mv或cp時需要填寫是 | ${EXEC_DIR}/success |
| -of | none:跳過 mv:移動失敗的文件到目標(biāo)文件夾 cp:硬連接(拷貝)失敗的文件到目標(biāo)文件夾 delete:刪除 | 是 | |
| -fd | 當(dāng)--on_fail指定為mv或cp時,mv或cp的目標(biāo)文件夾。文件的文件名變?yōu)槲募A打平后拼接原有文件名 | 當(dāng)--on_fail指定為mv或cp時需要填寫 | ${EXEC_DIR}/fail |
| -tn | 最大并行線程數(shù) | 是 | 8 |
3.3 運(yùn)行示例:
# Unix/OS X
> tools/load-tsfile.sh -h 127.0.0.1 -p 6667 -u root -pw root -s /path/sql -os delete -of delete -tn 8
> tools/load-tsfile.sh -h 127.0.0.1 -p 6667 -u root -pw root -s /path/sql -os mv -of cp -sd /path/success/dir -fd /path/failure/dir -tn 8
# Windows
> tools/load_data.bat -h 127.0.0.1 -p 6667 -u root -pw root -s /path/sql -os mv -of cp -sd /path/success/dir -fd /path/failure/dir -tn 8
> tools/load_data.bat -h 127.0.0.1 -p 6667 -u root -pw root -s /path/sql -os delete -of delete -tn 84. TsFile 主動監(jiān)聽&加載功能
TsFile 主動監(jiān)聽&加載功能能夠主動監(jiān)聽指定目標(biāo)路徑(用戶配置)下TsFile的文件變化,并將目標(biāo)路徑下的TsFile文件自動同步至指定接收路徑(用戶配置)。通過此功能,IoTDB 能自動檢測并加載這些文件,無需手動執(zhí)行任何額外的加載操作。這種自動化流程不僅簡化了用戶的操作步驟,還減少了操作過程中可能出現(xiàn)的錯誤,有效降低了用戶在使用過程中的復(fù)雜性。

4.1 配置參數(shù)
可通過從配置文件模版 iotdb-system.properties.template 中找到下列參數(shù),添加到 IoTDB 配置文件 iotdb-system.properties 中開啟TsFile 主動監(jiān)聽&加載功能。完整配置如下::
| 配置參數(shù) | 參數(shù)說明 | value 取值范圍 | 是否必填 | 默認(rèn)值 | 加載方式 |
|---|---|---|---|---|---|
| load_active_listening_enable | 是否開啟 DataNode 主動監(jiān)聽并且加載 tsfile 的功能(默認(rèn)開啟)。 | Boolean: true,false | 選填 | true | 熱加載 |
| load_active_listening_dirs | 需要監(jiān)聽的目錄(自動包括目錄中的子目錄),如有多個使用 “,“ 隔開默認(rèn)的目錄為 ext/load/pending(支持熱裝載) | String: 一個或多個文件目錄 | 選填 | ext/load/pending | 熱加載 |
| load_active_listening_fail_dir | 執(zhí)行加載 tsfile 文件失敗后將文件轉(zhuǎn)存的目錄,只能配置一個 | String: 一個文件目錄 | 選填 | ext/load/failed | 熱加載 |
| load_active_listening_max_thread_num | 同時執(zhí)行加載 tsfile 任務(wù)的最大線程數(shù),參數(shù)被注釋掉時的默值為 max(1, CPU 核心數(shù) / 2),當(dāng)用戶設(shè)置的值不在這個區(qū)間[1, CPU核心數(shù) /2]內(nèi)時,會設(shè)置為默認(rèn)值 (1, CPU 核心數(shù) / 2) | Long: [1, Long.MAX_VALUE] | 選填 | max(1, CPU 核心數(shù) / 2) | 重啟后生效 |
| load_active_listening_check_interval_seconds | 主動監(jiān)聽輪詢間隔,單位秒。主動監(jiān)聽 tsfile 的功能是通過輪詢檢查文件夾實(shí)現(xiàn)的。該配置指定了兩次檢查 load_active_listening_dirs 的時間間隔,每次檢查完成 load_active_listening_check_interval_seconds 秒后,會執(zhí)行下一次檢查。當(dāng)用戶設(shè)置的輪詢間隔小于 1 時,會被設(shè)置為默認(rèn)值 5 秒 | Long: [1, Long.MAX_VALUE] | 選填 | 5 | 重啟后生效 |
4.2 注意事項(xiàng)
- 如果待加載的文件中,存在 mods 文件,應(yīng)優(yōu)先將 mods 文件移動到監(jiān)聽目錄下面,然后再移動 tsfile 文件,且 mods 文件應(yīng)和對應(yīng)的 tsfile 文件處于同一目錄。防止加載到 tsfile 文件時,加載不到對應(yīng)的 mods 文件
FUNCTION moveFilesToListeningDirectory(sourceDirectory, listeningDirectory)
// 移動 mods 文件
modsFiles = searchFiles(sourceDirectory, "*mods*")
IF modsFiles IS NOT EMPTY
FOR EACH file IN modsFiles
MOVE(file, listeningDirectory)
END FOR
END IF
// 移動 tsfile 文件
tsfileFiles = searchFiles(sourceDirectory, "*tsfile*")
IF tsfileFiles IS NOT EMPTY
FOR EACH file IN tsfileFiles
MOVE(file, listeningDirectory)
END FOR
END IF
END FUNCTION
FUNCTION searchFiles(directory, pattern)
matchedFiles = []
FOR EACH file IN directory.files
IF file.name MATCHES pattern
APPEND file TO matchedFiles
END IF
END FOR
RETURN matchedFiles
END FUNCTION
FUNCTION MOVE(sourceFile, targetDirectory)
// 實(shí)現(xiàn)文件從 sourceFile 移動到 targetDirectory 的邏輯
END FUNCTION禁止設(shè)置 Pipe 的 receiver 目錄、存放數(shù)據(jù)的 data 目錄等作為監(jiān)聽目錄
禁止
load_active_listening_fail_dir與load_active_listening_dirs存在相同的目錄,或者互相嵌套保證
load_active_listening_dirs目錄有足夠的權(quán)限,在加載成功之后,文件將會被刪除,如果沒有刪除權(quán)限,則會重復(fù)加載