TDengine数据迁移:导入与导出

2022-03-22 00:00:00 数据 文件 导入 复制 导出

背景

对于数据库的运维,免不了数据迁移,对数据库表进行导入与导出; 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:

  • 若不指定输出路径,则默认导出至当前目录;
  • 若指定了输出目录,则目录需要提前创建好;

导出的文件包括:

  1. 一个dbs.sql文件,内容为导出的数据库、超级表创建语句;
  2. 若干个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:

  1. 以上是导出所有子表数据到一个csv文件,如果后续需要通过csv文件导入,应按照子表进行查询导出,然后再导入;或者采用taosdump导出。
  2. 未指定路径的导出,默认在当前目录下;下载到本地后,是Windows操作系统,csv格式的文件默认关联Excel打开,打开之后,中文乱码。

这个不是 TDenginebug ,因为通过文本文件打开是正常的,另存为 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:

  1. 此处应按照子表进行导入,即csv文件中的数据应只属于一张表,当然csv数据应与数据表结构一致;
  2. 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…

相关文章