GP数据导入导出
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GP数据导入导出
一、数据导入导出方式
(1)Sql的数据插入命令insert
语法:insert into talbename*col1,col2,…+ values(val1,val2,…)
特点:这种方式效率最低,但使用方便。
适合单个表进行少量的数据插入。
相应的可以使用pg_dump命令导出对应insert 的插入的sql文件,但是这种效率低,不推荐。
Pg_dump命令默认调用的是copy命令。
(2)POSTGRESQL数据库的copy命令
语法:
COPY table [(column [, ...])] FROM {'file' | STDIN}
[ [WITH]
[OIDS]
[HEADER]
[DELIMITER [ AS ] 'delimiter']
[NULL [ AS ] 'null string']
[ESCAPE [ AS ] 'escape' | 'OFF']
[NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
[CSV [QUOTE [ AS ] 'quote']
[FORCE NOT NULL column [, ...]]
[FILL MISSING FIELDS]
[[LOG ERRORS [INTO error_table] [KEEP]
SEGMENT REJECT LIMIT count [ROWS | PERCENT] ]
COPY {table [(column [, ...])] | (query)} TO {'file' | STDOUT}
[ [WITH]
[OIDS]
[HEADER]
[DELIMITER [ AS ] 'delimiter']
[NULL [ AS ] 'null string']
[ESCAPE [ AS ] 'escape' | 'OFF']
[CSV [QUOTE [ AS ] 'quote']
[FORCE QUOTE column [, ...]]
特点:这种方式比insert要高效很多,根据对一个4千万行的表导出测试,copy效率是insert 的8倍左右。
插入使用copy 2m完成4000万行,使用insert 111m 才插入30万行。
例:
导入的:copy country from '/home/gpadmin/country.txt';
Country.txt文件默认TAB键为分界符,enter键为换行符
导出的:copy customer to '/home/gpadmin/cus1.txt';
COPY (SELECT * FROM country WHERE country_name LIKE 'A%') TO
'/home/usr1/sql/a_list_countries.copy';
(3)gpfdist、external tables、gpload方式
Gpfdist . It is an HTTP server that is usedwith external tables to allow Greenplum segments to load external data in parallel, from multiple filesystems.
先启动gpfdist
gpfdist -d /var/load_files -p 8081 -l /home/gpadmin/log &
创建外部表:
CREATE EXTERNAL TABLE ext_customer
(idint, name text, sponsor text)
LOCATION ( 'gpfdist://filehost:8081/*.txt' )
FORMAT 'TEXT' ( DELIMITER '|' NULL ' ')
LOG ERRORS INTO err_customer SEGMENT REJECT LIMIT 5;
外部表支持的操作包括:SELECT, JOIN, or SORT EXTERNAL TABLE DATA,create views for external tables。
The gpload utility automates the steps of a load task using a YAML-formatted control file
特点:这种通过创建外部表的方式是效率最高的,支持并发。
外部表数据源包含(text files, Hadoop file systems, and web servers)
Gpload控制文件例子:
---
VERSION: 1.0.0.1
DATABASE: testDB
USER: gpadmin
HOST: mdw
PORT: 5432
GPLOAD:
INPUT:
- SOURCE:
LOCAL_HOSTNAME:
- mdw
PORT: 8081
FILE:
- /home/gpadmin/gpfdist/cus1.txt
- COLUMNS:
- user_id: integer
- user_name: varchar(50)
- user_bir: date
- user_email: varchar(100)
- user_addr: varchar(200)
- u_country_id: integer
- u_company_id: varchar(40)
- FORMAT: text
OUTPUT:
- TABLE: public.custerload
- MODE: insert
必须保持这种格式。
使用goload之前,要确定gpfdist启动.
Gpfdist –d /home/gpadmin/gpfdist -p 8081 -l /gpadmin/log &
指定外部表的地址,启动的端口号,日志的地址。
Gpload语法就是:gpload -f gpload.yaml
就是刚才的控制文件。
Pg_dump:
用法: pg_dump [选项]... [数据库名字]
一般选项:
-f, --file=FILENAME output file or directory name
-F, --format=c|d|t|p output file format (custom, directory, tar, plain text) -v, --verbose 详细模式
-Z, --compress=0-9 被压缩格式的压缩级别
--lock-wait-timeout=TIMEOUT 在等待表锁超时后操作失败
--help 显示此帮助信息, 然后退出
--versoin 输出版本信息, 然后退出
控制输出内容选项:
-a, --data-only 只转储数据,不包括模式
-b, --blobs 在转储中包括大对象
-c, --clean 在重新创建之前,先清除(删除)数据库对象
-C, --create 在转储中包括命令,以便创建数据库
-E, --encoding=ENCODING 转储以ENCODING形式编码的数据
-n, --schema=SCHEMA 只转储指定名称的模式
-N, --exclude-schema=SCHEMA 不转储已命名的模式
-o, --oids 在转储中包括OID
-O, --no-owner 在明文格式中, 忽略恢复对象所属者
-s, --schema-only 只转储模式, 不包括数据
-S, --superuser=NAME 在转储中, 指定的超级用户名
-t, --table=TABLE 只转储指定名称的表
-T, --exclude-table=TABLE 只转储指定名称的表
-x, --no-privileges 不要转储权限(grant/revoke)
--binary-upgrade 只能由升级工具使用
--column-inserts 以带有列名的INSERT命令形式转储数据
--disable-dollar-quoting 取消美元(符号) 引号, 使用SQL 标准引号
--disable-triggers 在只恢复数据的过程中禁用触发器
--inserts 以INSERT命令,而不是COPY命令的形式转储数据
--no-security-labels do not dump security label assignments
--no-tablespaces 不转储表空间分配信息
--no-unlogged-table-data do not dump unlogged table data
--quote-all-identifiers quote all identifiers, even if not key words
--serializable-deferrable wait until the dump can run without anomalies
--use-set-session-authorization
使用SESSION AUTHORIZATION 命令代替ALTER OWNER 命令来设置所有权联接选项:
-h, --host=主机名数据库服务器的主机名或套接字目录
-p, --port=端口号数据库服务器的端口号
-U, --username=名字以指定的数据库用户联接
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示(自动)
--role=ROLENAME do SET ROLE before dump
如果没有提供数据库名字, 那么使用PGDATABASE 环境变量的数值.
例如:pg_dump -U gpadmin -Ft testDB>testDB.tar(tar格式)
pg_dump -U postgres -Fc TestDb1 >TestDb1.dump(dump格式)
pg_restore -U gpadmin -d testDB1 testDB.tar -t customer_press1>a.txt 2>&1 把备份的文件恢复到testDB1的数据库中,并且只恢复表customer_press1。
Pg_restore:
pg_restore从一个归档中恢复一个由pg_dump创建的PostgreSQL数据库.
用法:
pg_restore [选项]... [文件名]
一般选项:
-d, --dbname=名字连接数据库名字
-f, --file=文件名输出文件名
-F, --format=c|d|t backup file format (should be automatic)
-l, --list 打印归档文件的TOC 概述
-v, --verbose 详细模式
--help 显示此帮助信息, 然后退出
--version 输出版本信息, 然后退出恢复控制选项:
-a, --data-only 只恢复数据, 不包括模式
-c, --clean 在重新创建数据库对象之前需要清除(删除)数据库对象
-C, --create 创建目标数据库
-e, --exit-on-error 发生错误退出, 默认为继续
-I, --index=名称恢复指定名称的索引
-j, --jobs=NUM 可以执行多个任务并行进行恢复工作
-L, --use-list=文件名从这个文件中使用指定的内容表排序输出
-n, --schema=NAME 在这个模式中只恢复对象
-O, --no-owner 忽略恢复对象所属者
-P, --function=名字(参数) 恢复指定名字的函数
-s, --schema-only 只恢复模式, 不包括数据
-S, --superuser=NAME 使用指定的超级用户来禁用触发器
-t, --table=NAME 恢复指定命字的表
-T, --trigger=NAME 恢复指定命字的触发器
-x, --no-privileges 跳过处理权限的恢复(grant/revoke)
-1, --single-transaction 作为单个事务恢复
--disable-triggers 在只恢复数据的过程中禁用触发器
--no-data-for-failed-tables 没有恢复无法创建表的数据
--no-security-labels do not restore security labels
--no-tablespaces 不恢复表空间的分配信息
--use-set-session-authorization 使用SESSION AUTHORIZATION 命令代替ALTER OWNER命令来设置对象所有权
联接选项:
-h, --host=主机名数据库服务器的主机名或套接字目录
-p, --port=端口号数据库服务器的端口号
-U, --username=名字以指定的数据库用户联接
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示(自动)
--role=ROLENAME 在恢复前执行SET ROLE操作
如果没有提供输入文件名, 则使用标准输入。