使⽤GreenPlumpostgres的copy命令导出导⼊数据
1. COPY命令
1.1 postgres
postgres的COPY命令可以快速的导出/导⼊数据到postgresql数据库中,⽀持常⽤的⽂件格式,如:txt、sql、csv、压缩⽂件、⼆进制格式等。特别适合批量导出和导⼊数据,速度⽐较快。
COPY TO把⼀个表的所有内容都拷贝到⼀个⽂件;
COPY FROM从⼀个⽂件⾥拷贝数据到⼀个表⾥(把数据附加到表中已经存在的内容⾥)。
注意:
COPY只能⽤于表,不能⽤于视图。
1.2 GreenPlum
对于数据的加载,GreenPlum数据库也提供了copy⼯具(源于PostgreSQL数据库),使⽤⽅法同postgres数据库的copy命令。copy命令⽀持⽂件与表之间的数据的导⼊和导出。
注意:
使⽤copy命令进⾏数据导⼊时,数据需要经过Master节点分发到Segment节点;同样使⽤copy命令进⾏数据卸载,数据也需要由Segment发送到Master节点,由Master节点汇总后再写⼊外部⽂件。这样就限制了数据加载与卸载的效率,但是数据量较⼩的情况下,copy命令就⾮常⽅便。
当数据量⽐较⼤时可以考虑使⽤GreenPlum的gpload⼯具来导⼊。
2. 使⽤copy命令导出/导⼊数据的步骤
通常使⽤psql⼯具来进⾏数据的导出和导⼊。
2.1 准备⼯作
(1) 创建⽤于存放导出⽂件(或待导⼊⽂件)的⽬录,并赋予权限;
注意:
使⽤root⽤户
# 创建⽬录
[root@node8 /]# mkdir /tmp/data
# 赋予权限
[root@node8 /]# chmod 777 /tmp/data/
(2) 进⼊psql并切换数据库
注意:
如果是postgres数据库,则切换到postgres⽤户;
如果是GreenPlum的MPP,则切换到gpadmin⽤户;
# 由于我使⽤的是GreenPlum的MPP,所以切换gpadmin⽤户
# ---------------------------------------------------------
greenplum数据库[root@node8 ~]# su - gpadmin
# 进⼊psql
[gpadmin@node8 ~]$ psql
# 使⽤`\c`命令切换数据库,切换到要导出或导⼊数据的数据库
# ---------------------------------------------------------
postgres=# \c resdata
You are now connected to database "resdata" as user "gpadmin".
3. 开始使⽤copy命令导出或导⼊数据
# 使⽤ copy 命令将 resdata 库下的 aa_test 表中的数据导出到 /tmp/data/test.csv ⽂件中
# ---------------------------------------------------------
resdata=# COPY aa_test TO '/tmp/data/test.csv' WITH csv;
COPY 2
# 使⽤ copy 命令将 /tmp/data/test.csv ⽂件中内容导⼊到 resdata 库下的 aa_test 表中
# ---------------------------------------------------------
resdata=# COPY aa_test  FROM '/tmp/data/test.csv' WITH csv;
COPY 2
COPY TO还能拷贝SELECT查询的结果。如果声明了⼀个字段列表,COPY将只在⽂件和表之间拷贝已声明字段的数据。 如果表中有任何不在字段列表⾥的字段,那么COPY FROM将为那些字段插⼊缺省值。
# 使⽤select命令
COPY (select * from bb_test capture_time > '2018-08-16 00:00:00' and capture_time < '2018-08-17 00:00:00') TO '/tmp/data/test_20180816.csv' with csv;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。