數據導出
大約 6 分鐘
數據導出
1. 導出工具介紹
導出工具可以將 SQL 查詢的數據導出為指定的格式,包含用于導出 TsFile 文件的 export-tsfile.sh/bat 腳本和支持 CSV 和 SQL 格式的導出的 export-data.sh/bat 腳本。
2. 支持的數據類型
CSV:純文本格式,存儲格式化數據,需按照下文指定 CSV 格式進行構造
SQL:包含自定義 SQL 語句的文件
TsFile: IoTDB 中使用的時間序列的文件格式
3. export-tsfile 腳本
支持 TsFile: IoTDB 中使用的時間序列的文件格式
3.1 運行命令
# Unix/OS X
tools/export-tsfile.sh -h <ip> -p <port> -u <username> -pw <password> -td <directory> [-f <export filename> -q <query command> -s <sql file>]
# Windows
tools\export-tsfile.bat -h <ip> -p <port> -u <username> -pw <password> -td <directory> [-f <export filename> -q <query command> -s <sql file>]3.2 參數介紹
| 參數 | 定義 | 是否必填 | 默認 |
|---|---|---|---|
| -h | 主機名 | 否 | 127.0.0.1 |
| -p | 端口號 | 否 | 6667 |
| -u | 用戶名 | 否 | root |
| -pw | 密碼 | 否 | root |
| -t | 目標文件目錄,用于指定輸出文件應該保存到的目錄 | 是 | - |
| -tfn | 導出文件的名稱 | 否 | - |
| -q | 想要執行的查詢命令的數量,可能用于批量執行查詢 | 否 | - |
| -s | SQL 文件路徑,用于指定包含要執行的 SQL 語句的文件位置 | 否 | - |
| -timeout | 會話查詢的超時時間,用于指定查詢操作在自動終止前允許的最長時間 | 否 | - |
除此之外,如果沒有使用-s和-q參數,在導出腳本被啟動之后你需要按照程序提示輸入查詢語句,不同的查詢結果會被保存到不同的TsFile文件中。
3.3 運行示例
# Unix/OS X
tools/export-tsfile.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./
# or
tools/export-tsfile.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -q "select * from root.**"
# Or
tools/export-tsfile.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -s ./sql.txt
# Or
tools/export-tsfile.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -s ./sql.txt -f myTsFile
# Or
tools/export-tsfile.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -s ./sql.txt -f myTsFile -t 10000
# Windows
tools/export-tsfile.bat -h 127.0.0.1 -p 6667 -u root -pw root -td ./
# Or
tools/export-tsfile.bat -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -q "select * from root.**"
# Or
tools/export-tsfile.bat -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -s ./sql.txt
# Or
tools/export-tsfile.bat -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -s ./sql.txt -f myTsFile
# Or
tools/export-tsfile.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -s ./sql.txt -f myTsFile -t 100004. export-data 腳本
支持 CSV:純文本格式,存儲格式化數據,需按照下文指定 CSV 格式進行構造
支持 SQL:包含自定義 SQL 語句的文件
4.1 運行命令
# Unix/OS X
>tools/export-data.sh -h <ip> -p <port> -u <username> -pw <password> -t <directory> [-tf <time-format> -datatype <true/false> -q <query command> -s <source sql file> -tfn <target file name> -lpf <int> -type <export type> -aligned <true/false>]
# Windows
>tools\export-data.bat -h <ip> -p <port> -u <username> -pw <password> -t <directory> [-tf <time-format> -datatype <true/false> -q <query command> -s <source sql file> -tfn <target file name> -lpf <int> -type <export type> -aligned <true/false>]4.2 參數介紹
| 參數 | 定義 | 是否必填 | 默認 |
|---|---|---|---|
| -h | 主機名 | 否 | 127.0.0.1 |
| -p | 端口號 | 否 | 6667 |
| -u | 用戶名 | 否 | root |
| -pw | 密碼 | 否 | root |
| -t | 導出的 CSV 或 SQL 文件的輸出路徑(V1.3.2版本參數是-td) | 是 | |
| -datatype | 是否在 CSV 文件的 header 中時間序列的后面打印出對應的數據類型,選項為 true 或者 false | 否 | true |
| -q | 在命令中直接指定想要執行的查詢語句(目前僅支持部分語句,詳細明細見下表)說明:-q 與 -s 參數必填其一,同時填寫則 -q 生效。詳細支持的 SQL 語句示例,請參考下方“SQL語句支持明細” | 否 | |
| -s | 指定 SQL 文件,該文件可包含一條或多條 SQL 語句。如果包含多條 SQL 語句,語句之間應該用換行(回車)進行分割。每一條 SQL 語句對應一個或多個輸出的CSV或 SQL 文件說明:-q 與 -s 參數必填其一,同時填寫則-q生效。詳細支持的 SQL 語句示例,請參考下方“SQL語句支持規則” | 否 | |
| -type | 指定導出的文件類型,選項為 csv 或者 sql | 否 | csv |
| -tf | 指定時間格式。時間格式必須遵守ISO 8601標準,或時間戳(timestamp) 說明:只在 -type 為 csv 時生效 | 否 | yyyy-MM-dd HH:mm:ss.SSSz |
| -lpf | 指定導出的 dump 文件最大行數(V1.3.2版本參數是-linesPerFile) | 否 | 10000 |
| -timeout | 指定 session 查詢時的超時時間,單位為ms | 否 | -1 |
4.3 SQL 語句支持規則
- 只支持查詢語句,非查詢語句(如:元數據管理、系統管理等語句)不支持。對于不支持的 SQL ,程序會自動跳過,同時輸出錯誤信息。
- 查詢語句中目前版本僅支持原始數據的導出,如果有使用 group by、聚合函數、udf、操作運算符等則不支持導出為 SQL。原始數據導出時請注意,若導出多個設備數據,請使用 align by device 語句。詳細示例如下:
| 支持導出 | 示例 | |
|---|---|---|
| 原始數據單設備查詢 | 支持 | select * from root.s_0.d_0 |
| 原始數據多設備查詢(aligin by device) | 支持 | select * from root.** align by device |
| 原始數據多設備查詢(無 aligin by device) | 不支持 | select * from root.*select * from root.s_0. |
4.4 運行示例
- 導出某 SQL 執行范圍下的所有數據至 CSV 文件。
# Unix/OS X
>tools/export-data.sh -h <ip> -p <port> -u <username> -pw <password> -t <directory> [-tf <time-format> -datatype <true/false> -q <query command> -s <source sql file> -tfn <target file name> -lpf <int> -type <export type> -aligned <true/false>]
# Windows
>tools\export-data.bat -h <ip> -p <port> -u <username> -pw <password> -t <directory> [-tf <time-format> -datatype <true/false> -q <query command> -s <source sql file> -tfn <target file name> -lpf <int> -type <export type> -aligned <true/false>]- 導出結果
Time,root.stock.Legacy.0700HK.L1_BidPrice,root.stock.Legacy.0700HK.Type,root.stock.Legacy.0700HK.L1_BidSize,root.stock.Legacy.0700HK.Domain,root.stock.Legacy.0700HK.L1_BuyNo,root.stock.Legacy.0700HK.L1_AskPrice
2024-07-29T18:37:18.700+08:00,0.9666617,3.0,0.021367407654674264,-6.0,false,0.8926191
2024-07-29T18:37:19.701+08:00,0.3057328,3.0,0.9965377284981661,-5.0,false,0.15167356- 導出 SQL 文件內所有 SQL 執行范圍下的所有數據至 CSV 文件。
# Unix/OS X
>tools/export-data.sh -t ./data/ -s export.sql
# Windows
>tools/export-data.bat -t ./data/ -s export.sql- export.sql 文件內容(-s 參數指向的文件)
select * from root.stock.** limit 100
select * from root.db.** limit 100- 導出結果文件1
Time,root.stock.Legacy.0700HK.L1_BidPrice,root.stock.Legacy.0700HK.Type,root.stock.Legacy.0700HK.L1_BidSize,root.stock.Legacy.0700HK.Domain,root.stock.Legacy.0700HK.L1_BuyNo,root.stock.Legacy.0700HK.L1_AskPrice
2024-07-29T18:37:18.700+08:00,0.9666617,3.0,0.021367407654674264,-6.0,false,0.8926191
2024-07-29T18:37:19.701+08:00,0.3057328,3.0,0.9965377284981661,-5.0,false,0.15167356- 導出結果文件2
Time,root.db.Random.RandomBoolean
2024-07-22T17:16:05.820+08:00,true
2024-07-22T17:16:02.597+08:00,false- 將 IoTDB 數據庫中在 SQL 文件內定義的數據,以對齊的格式將其導出為 SQL 語句。
# Unix/OS X
>tools/export-data.sh -h 127.0.0.1 -p 6667 -u root -p root -t ./data/ -s export.sql -type sql -aligned true
# Windows
>tools/export-data.bat -h 127.0.0.1 -p 6667 -u root -p root -t ./data/ -s export.sql -type sql -aligned true- 導出結果
INSERT INTO root.stock.Legacy.0700HK(TIMESTAMP,L1_BidPrice,Type,L1_BidSize,Domain,L1_BuyNo,L1_AskPrice) ALIGNED VALUES (1722249629831,0.62308747,2.0,0.012206747854849653,-6.0,false,0.14164352);
INSERT INTO root.stock.Legacy.0700HK(TIMESTAMP,L1_BidPrice,Type,L1_BidSize,Domain,L1_BuyNo,L1_AskPrice) ALIGNED VALUES (1722249630834,0.7520042,3.0,0.22760657101910464,-5.0,true,0.089064896);
INSERT INTO root.stock.Legacy.0700HK(TIMESTAMP,L1_BidPrice,Type,L1_BidSize,Domain,L1_BuyNo,L1_AskPrice) ALIGNED VALUES (1722249631835,0.3981064,3.0,0.6254559288663467,-6.0,false,0.9767922);- 將某 SQL 執行范圍下的所有數據導出至 CSV 文件,指定導出的時間格式為
yyyy-MM-dd HH:mm:ss,且表頭時間序列的后面打印出對應的數據類型。
# Unix/OS X
>tools/export-data.sh -h 127.0.0.1 -p 6667 -u root -p root -t ./data/ -s export.sql -type sql -aligned true
# Windows
>tools/export-data.bat -h 127.0.0.1 -p 6667 -u root -p root -t ./data/ -s export.sql -type sql -aligned true- 導出結果
Time,root.stock.Legacy.0700HK.L1_BidPrice(DOUBLE),root.stock.Legacy.0700HK.Type(DOUBLE),root.stock.Legacy.0700HK.L1_BidSize(DOUBLE),root.stock.Legacy.0700HK.Domain(DOUBLE),root.stock.Legacy.0700HK.L1_BuyNo(BOOLEAN),root.stock.Legacy.0700HK.L1_AskPrice(DOUBLE)
2024-07-30 10:33:55,0.44574088,3.0,0.21476832811611501,-4.0,true,0.5951748
2024-07-30 10:33:56,0.6880933,3.0,0.6289119476165305,-5.0,false,0.114634395