CSV 工具可帮您将 CSV 格式的数据导入到 IoTDB 或者将数据从 IoTDB 导出到 CSV 文件。
# Unix/OS X > tools/export-csv.sh -h <ip> -p <port> -u <username> -pw <password> -td <directory> [-tf <time-format> -datatype <true/false> -q <query command> -s <sql file>] # Windows > tools\export-csv.bat -h <ip> -p <port> -u <username> -pw <password> -td <directory> [-tf <time-format> -datatype <true/false> -q <query command> -s <sql file>]
参数:
-datatype:Time, root.sg1.d1.s1(INT32), root.sg1.d1.s2(INT64).Time, root.sg1.d1.s1 , root.sg1.d1.s2-q <query command>:select * from root.** limit 100, or select * from root.** limit 100 align by device-s <sql file>:-td <directory>:-tf <time-format>:-tf timestamp。-tf yyyy-MM-dd\ HH:mm:ss or -tf timestamp-linesPerFile <int>:10000。-linesPerFile 1-t <timeout>:除此之外,如果你没有使用-s和-q参数,在导出脚本被启动之后你需要按照程序提示输入查询语句,不同的查询结果会被保存到不同的CSV文件中。
# Unix/OS X > tools/export-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ # Or > tools/export-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -tf yyyy-MM-dd\ HH:mm:ss # or > tools/export-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -q "select * from root.**" # Or > tools/export-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -s sql.txt # Or > tools/export-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -tf yyyy-MM-dd\ HH:mm:ss -s sql.txt # Or > tools/export-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -tf yyyy-MM-dd\ HH:mm:ss -s sql.txt -linesPerFile 10 # Or > tools/export-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -tf yyyy-MM-dd\ HH:mm:ss -s sql.txt -linesPerFile 10 -t 10000 # Windows > tools/export-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -td ./ # Or > tools/export-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -tf yyyy-MM-dd\ HH:mm:ss # or > tools/export-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -q "select * from root.**" # Or > tools/export-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -s sql.txt # Or > tools/export-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -tf yyyy-MM-dd\ HH:mm:ss -s sql.txt # Or > tools/export-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -tf yyyy-MM-dd\ HH:mm:ss -s sql.txt -linesPerFile 10 # Or > tools/export-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -tf yyyy-MM-dd\ HH:mm:ss -s sql.txt -linesPerFile 10 -t 10000
select * from root.**; select * from root.** align by device;
select * from root.**的执行结果:
Time,root.ln.wf04.wt04.status(BOOLEAN),root.ln.wf03.wt03.hardware(TEXT),root.ln.wf02.wt02.status(BOOLEAN),root.ln.wf02.wt02.hardware(TEXT),root.ln.wf01.wt01.hardware(TEXT),root.ln.wf01.wt01.status(BOOLEAN) 1970-01-01T08:00:00.001+08:00,true,"v1",true,"v1",v1,true 1970-01-01T08:00:00.002+08:00,true,"v1",,,,true
select * from root.** align by device的执行结果:
Time,Device,hardware(TEXT),status(BOOLEAN) 1970-01-01T08:00:00.001+08:00,root.ln.wf01.wt01,"v1",true 1970-01-01T08:00:00.002+08:00,root.ln.wf01.wt01,,true 1970-01-01T08:00:00.001+08:00,root.ln.wf02.wt02,"v1",true 1970-01-01T08:00:00.001+08:00,root.ln.wf03.wt03,"v1", 1970-01-01T08:00:00.002+08:00,root.ln.wf03.wt03,"v1", 1970-01-01T08:00:00.001+08:00,root.ln.wf04.wt04,,true 1970-01-01T08:00:00.002+08:00,root.ln.wf04.wt04,,true
布尔类型的数据用true或者false来表示,此处没有用双引号括起来。文本数据需要使用双引号括起来。
注意,如果导出字段存在如下特殊字符:
,: 导出程序会在,字符前加\来进行转义。CREATE DATABASE root.fit.d1; CREATE DATABASE root.fit.d2; CREATE DATABASE root.fit.p; CREATE TIMESERIES root.fit.d1.s1 WITH DATATYPE=INT32,ENCODING=RLE; CREATE TIMESERIES root.fit.d1.s2 WITH DATATYPE=TEXT,ENCODING=PLAIN; CREATE TIMESERIES root.fit.d2.s1 WITH DATATYPE=INT32,ENCODING=RLE; CREATE TIMESERIES root.fit.d2.s3 WITH DATATYPE=INT32,ENCODING=RLE; CREATE TIMESERIES root.fit.p.s1 WITH DATATYPE=INT32,ENCODING=RLE;
IoTDB 具有类型推断的能力,因此在数据导入前创建元数据不是必须的。但我们仍然推荐在使用 CSV 导入工具导入数据前创建元数据,因为这可以避免不必要的类型转换错误。
通过时间对齐,并且header中不包含数据类型的数据。
Time,root.test.t1.str,root.test.t2.str,root.test.t2.int 1970-01-01T08:00:00.001+08:00,"123hello world","123\,abc",100 1970-01-01T08:00:00.002+08:00,"123",,
通过时间对齐,并且header中包含数据类型的数据。(Text类型数据支持加双引号和不加双引号)
Time,root.test.t1.str(TEXT),root.test.t2.str(TEXT),root.test.t2.int(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
通过设备对齐,并且header中不包含数据类型的数据。
Time,Device,str,int 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中包含数据类型的数据。(Text类型数据支持加双引号和不加双引号)
Time,Device,str(TEXT),int(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,123
# Unix/OS X >tools/import-csv.sh -h <ip> -p <port> -u <username> -pw <password> -f <xxx.csv> [-fd <./failedDirectory>] [-aligned <true>] [-tp <ms/ns/us>] [-typeInfer <boolean=text,float=double...>] [-linesPerFailedFile <int_value>] # Windows >tools\import-csv.bat -h <ip> -p <port> -u <username> -pw <password> -f <xxx.csv> [-fd <./failedDirectory>] [-aligned <true>] [-tp <ms/ns/us>] [-typeInfer <boolean=text,float=double...>] [-linesPerFailedFile <int_value>]
参数:
-f:
-f filename.csv-fd:
.failed的后缀。-fd ./failed/-aligned:
aligned接口? 默认参数为false。-aligned true-batch:
org.apache.thrift.transport.TTransportException: Frame size larger than protect max size这个错的话,就可以适当的调低这个参数。-batch 100000,100000是默认值。-tp:
ms(毫秒),ns(纳秒),us(微秒),默认值为ms。-typeInfer <srcTsDataType1=dstTsDataType1,srcTsDataType2=dstTsDataType2,...>:
srcTsDataType 包括 boolean,int,long,float,double,NaN.dstTsDataType 包括 boolean,int,long,float,double,text.srcTsDataType为boolean, dstTsDataType只能为boolean或text.srcTsDataType为NaN, dstTsDataType只能为float, double或text.srcTsDataType为数值类型, dstTsDataType的精度需要高于srcTsDataType.-typeInfer boolean=text,float=double-linesPerFailedFile <int>:
-linesPerFailedFile 1# Unix/OS X >tools/import-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -f example-filename.csv -fd ./failed # or >tools/import-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -f example-filename.csv -fd ./failed # or > tools\import-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -f example-filename.csv -fd ./failed -tp ns # or > tools\import-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -f example-filename.csv -fd ./failed -tp ns -typeInfer boolean=text,float=double # or > tools\import-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -f example-filename.csv -fd ./failed -tp ns -typeInfer boolean=text,float=double -linesPerFailedFile 10 # Windows >tools\import-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -f example-filename.csv # or >tools\import-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -f example-filename.csv -fd .\failed # or > tools\import-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -f example-filename.csv -fd .\failed -tp ns # or > tools\import-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -f example-filename.csv -fd .\failed -tp ns -typeInfer boolean=text,float=double # or > tools\import-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -f example-filename.csv -fd .\failed -tp ns -typeInfer boolean=text,float=double -linesPerFailedFile 10
注意,在导入数据前,需要特殊处理下列的字符:
, :如果text类型的字段中包含,那么需要用\来进行转义。yyyy-MM-dd'T'HH:mm:ss, yyy-MM-dd HH:mm:ss, 或者 yyyy-MM-dd'T'HH:mm:ss.SSSZ格式的时间。Time这一列应该放在第一列。