文件接入
文件接入是指将现有的文本数据文件导入到目标数据表。文本文件通常是CSV格式。
测试CSV文件格式如下,第一行为HEADER,后面是数据行,3列的类型分别为时间戳、整型和字符串:
time,c1,c2
2021-01-01 00:00:00,1,a1
2021-01-01 00:00:00,2,a2
2021-01-01 00:00:00,3,a3
目标库为test
,目标表dest
的schema如下,与CSV文件格式一致:
CREATE TABLE dest(
time timestamp,
c1 int,
c2 text
)DISTRIBUTED BY(c1);
下面介绍几种常用的方法将文件内容导入到目标表中:
1. COPY
COPY
是MatrixDB自带的SQL命令,可以将在master节点的数据文件导入到目标表中。
首先使用psql连接到目标库,再执行COPY命令。
[mxadmin@mdw ~]$ psql test
psql (12)
Type "help" for help.
test=# COPY dest FROM '/home/mxadmin/rows.csv' DELIMITER ',' HEADER;
COPY 3
DELIMITER参数指定了分隔符;HEADER的含义是导入数据时要过滤文件头。
COPY
的方式比较简单,但存在如下问题:
- 数据文件必须在master节点上
- 数据通过master插入,和批量INSERT效果一样,当数据量大时有性能问题
2. MatrixGate
MatrixGate方式是使用MatrixDB提供的高速数据接入工具mxgate
进行数据导入。
和COPY
相比,mxgate
在数据量大的时候性能更好,并且数据文件和master也可以分开部署。
tail -n +2 rows.csv | mxgate --source stdin --db-database test --db-master-host localhost --db-master-port 5432 --db-user mxadmin --time-format raw --target public.dest --parallel 2 --delimiter ','
上述命令通过管道方式,将rows.csv的数据部分重定向到了mxgate。mxgate以stdin的方式接入数据到test
库的dest
表中。
因为mxgate进行数据接入时不需要文件头,所以使用
tail -n +2
命令,从第二行进行输出。
更多的mxgate使用方法请参考文档