TDengine数据迁移:导入与导出
背景
对于数据库的运维,免不了数据迁移,对数据库表进行导入与导出; TDengine
官方提供了各类数据导入、导出方式。
下面就体验下不同的导入、导出方法。
-
数据导出:
- taosdump
- csv
-
数据导入:
- source
- csv
- taosdump
数据导出
数据导出:taosdump
-
taosdump主要参数含义: -o:指定输出文件的路径。文件会自动生成。
-u:用户名。
-p:密码。
-A:指示导出所有数据库的数据。
-D:表示指定数据库。
-i:表示输入目录。
-s:表示导出schema。
-t:指定导入到一个文件的表的个数。该参数可以控制输出文件的大小。
-B:指定一条import语句中包含记录的条数。注意:不要让sql语句超过64k,否则后续导入会出错。该参数为了后续导入时,提高导入速率。
-T: 指定导出数据时,启动的线程数。建议设置成机器上core的2倍。
-
实际中一般不会导出所有库,就不测试这种方式了。
./bin/taosdump -o ./dump -A -t 500 -B 100 -T 8
复制代码
- 导出指定数据库的数据,可指定多个库,以空格分隔
# 不指定输出目录
./bin/taosdump -D ok -t 500 -B 100 -T 8
# 指定输出目录
./bin/taosdump -o ./dump -D ok -t 500 -B 100 -T 8
# 导出结果
[root@hadoop1 dump]# tree
.
├── dbs.sql
├── ok.tables.0.sql
└── ok.tables.1.sql
复制代码
Notes:
- 若不指定输出路径,则默认导出至当前目录;
- 若指定了输出目录,则目录需要提前创建好;
导出的文件包括:
- 一个dbs.sql文件,内容为导出的数据库、超级表创建语句;
- 若干个XXX_tables.N.sql文件,文件名的规则:XXX是数据库名称,N是数字,从0开始递增,内容为数据表建表语句、插入语句;
- 导出指定数据库中指定表的数据,可指定多个表,以空格分隔
./bin/taosdump -o ./dump ok device2 -t 500 -B 100 -T 8
复制代码
- 导出指定数据库的schema
./bin/taosdump -o ./dump -D ok -t 500 -s -T 8
复制代码
- 导出所有数据库的schema
./bin/taosdump -o ./dump -A -t 500 -s -T 8
复制代码
数据导出:导出CSV
select * from ok.power >> data.csv
复制代码
Note:
- 以上是导出所有子表数据到一个csv文件,如果后续需要通过csv文件导入,应按照子表进行查询导出,然后再导入;或者采用taosdump导出。
- 未指定路径的导出,默认在当前目录下;下载到本地后,是
Windows
操作系统,csv
格式的文件默认关联Excel
打开,打开之后,中文乱码。
这个不是 TDengine
的 bug
,因为通过文本文件打开是正常的,另存为 ANSI
编码后,在 Excel
中打开中文正常显示。
数据导入
数据导入:source
这种方式类似于批量执行 SQL
语句,比如以下 SQL
语句构成的文件:data.sql
create database if not exists ok;
USE ok;
create stable if not exists power(ts timestamp, voltage int, current float, temperature float) tags(sn int, city nchar(64), groupid int);
create table if not exists device1 using power tags(1, "太原", 1);
create table if not exists device2 using power tags(2, "西安", 2);
insert into device1 values("2021-09-04 21:03:38.734", 1, 1.0, 1.0);
insert into device2 values("2021-09-04 21:03:40.734", 2, 2.0, 2.0);
复制代码
taos> source "/usr/local/taos/data.sql";
复制代码
数据导入:导入CSV
当导入单个子表数据时可采用这种方式, data.csv
文件内容如下:
'2021-09-04 21:03:38.734',1,1.00000,1.00000,1,'太原',1
'2021-09-05 23:05:11.138',225,9.47500,13.52135,1,'太原',1
'2021-09-05 23:05:41.138',208,6.44464,0.99233,1,'太原',1
复制代码
taos> insert into ok.device1 file '/usr/local/taos/data.csv';
Query OK, 3 of 3 row(s) in database (0.002303s)
复制代码
Note:
- 此处应按照子表进行导入,即csv文件中的数据应只属于一张表,当然csv数据应与数据表结构一致;
- csv文件中应仅包含数据(即要求去掉表头),如果CSV文件首行存在描述信息,请手动删除后再导入。如某列为空,填NULL,无引号。
数据导入:taosdump
实际中更多的采用这种方式完成数据迁移:先导出→压缩→传输至其他主机上→解压→导入→完成。
# -i 表示输入文件的目录
[root@hadoop1 taos]# ./bin/taosdump -i ./dump -T 8
====== arguments config ======
host: (null)
user: root
password: taosdata
port: 0
mysqlFlag: 0
outpath:
inpath: ./dump
resultFile: ./dump_result.txt
encode: (null)
all_databases: false
databases: 0
schemaonly: false
with_property: true
avro format: false
start_time: -9223372036854775807
end_time: 9223372036854775807
precision: ms
data_batch: 1
max_sql_len: 65480
table_batch: 1
thread_num: 8
allow_sys: 0
abort: 0
isDumpIn: 1
arg_list_len: 0
debug_print: 0
==============================
start to dispose 3 files in ./dump
Success Open input file: ./dump/dbs.sql
, Success Open input file: ./dump/ok.tables.0.sql
, Success Open input file: ./dump/ok.tables.1.sql
复制代码
导入完成。
taosdump参数列表
可通过 help
参数,查看 taosdump
主要参数说明;
[root@hadoop1 taos]# ./bin/taosdump --help
Usage: taosdump [OPTION...] dbname [tbname ...]
or: taosdump [OPTION...] --databases dbname ...
or: taosdump [OPTION...] --all-databases
or: taosdump [OPTION...] -i inpath
or: taosdump [OPTION...] -o outpath
-h, --host=HOST Server host dumping data from. Default is
localhost.
-p, --password User password to connect to server. Default is
taosdata.
-P, --port=PORT Port to connect
-q, --mysqlFlag=MYSQLFLAG mysqlFlag, Default is 0
-u, --user=USER User name used to connect to server. Default is
root.
-c, --config-dir=CONFIG_DIR Configure directory. Default is
/etc/taos/taos.cfg.
-e, --encode=ENCODE Input file encoding.
-i, --inpath=INPATH Input file path.
-o, --outpath=OUTPATH Output file path.
-r, --resultFile=RESULTFILE DumpOut/In Result file path and name.
-a, --allow-sys Allow to dump sys database
-A, --all-databases Dump all databases.
-D, --databases Dump assigned databases
-N, --without-property Dump schema without properties.
-s, --schemaonly Only dump schema.
-v, --avro Dump apache avro format data file. By default,
dump sql command sequence.
-B, --data-batch=DATA_BATCH Number of data point per insert statement. Max
value is 32766. Default is 1.
-L, --max-sql-len=SQL_LEN Max length of one sql. Default is 65480.
-t, --table-batch=TABLE_BATCH Number of table dumpout into one output file.
Default is 1.
-T, --thread_num=THREAD_NUM Number of thread for dump in file. Default is
5.
-S, --start-time=START_TIME Start time to dump. Either epoch or
ISO8601/RFC3339 format is acceptable. ISO8601
format example: 2017-10-01T00:00:00.000+0800 or
2017-10-0100:00:00:000+0800 or '2017-10-01
00:00:00.000+0800'
-E, --end-time=END_TIME End time to dump. Either epoch or ISO8601/RFC3339
format is acceptable. ISO8601 format example:
2017-10-01T00:00:00.000+0800 or
2017-10-0100:00:00.000+0800 or '2017-10-01
00:00:00.000+0800'
-C, --precision=PRECISION Specify precision for converting human-readable
time to epoch. Valid value is one of ms, us, and
ns. Default is ms.
-g, --debug Print debug info.
-?, --help Give this help list
--usage Give a short usage message
-V, --version Print program version
复制代码
Reference
- www.taosdata.com/cn/document…
- www.taosdata.com/blog/2020/0…
相关文章