GreenPlum数据的装载与卸载之外部表以及gpfdist工具的使用

Greenplum的外部表和ORACLE的外部表一样,都是数据存储在数据库之外的表。它的外部表除了可以加载本地的数据,还可以通过gpfdist工具并行加载数据。由于本地方式加载的效率低,已经被gpfdist取代。本文先介绍本地方式加载,后介绍gpfdist方式。

1、本地方式加载

1.1、创建外部表

rhnschema=# CREATE EXTERNAL TABLE ext_rhn1 (package_id numeric, primary_xml bytea, filelist bytea, other bytea, created timestamp(6) with time zone, modified timestamp(6) with time zone) LOCATION (‘file://pg03:5432/u01/rhnpackagerepodata.csv‘) FORMAT ‘CSV‘;

注意:
1、数据文件必须位于segment节点;
2、主机名后面的端口号随便写,也可以不写;
3、如果文件有头部信息,则在format后面跟上(HEADER)参数;
4、file后面必须使用主机名,使用IP创建外部表可以成功,但是查询时会报错。
具体的创建外部表的语法可以参考官方手册

1.2、数据装载测试

在装载之前,打开时间记录器,统计下整个加载过程耗时多久。

数据分布情况如下图所示:

数据分布相对来讲非常均匀,GreenPlum数据库是自动提交,不需要触发commit命令进行提交(Greenplum下想要回滚操作,比较麻烦,所以尽量不要在GreenPlum数据库做DML测试性的操作)。

2、gpfdist的使用

gpfdist可以实现并行加载,需要先启动gpfdist进程及监听端口,这个命令在Master和Segment节点的GPHOME/bin目录下,如果配置了GP的环境变量,可以直接使用,如果在没有安装GP的服务器上使用gpfdist工具,只需要将gpfdist命令的文件拷贝到相应的服务器上即可使用。

2.1 启动gpfdist服务

[[email protected] ~]$ gpfdist -d /u01 -p 5555  -l /tmp/gpfdist.log &
[[email protected] ~]$ more /tmp/gpfdist.log
2019-06-19 14:20:24 16560 INFO Before opening listening sockets - following listening sockets are available:
2019-06-19 14:20:24 16560 INFO IPV6 socket: [::]:5555
2019-06-19 14:20:24 16560 INFO IPV4 socket: 0.0.0.0:5555
2019-06-19 14:20:24 16560 INFO Trying to open listening socket:
2019-06-19 14:20:24 16560 INFO IPV6 socket: [::]:5555
2019-06-19 14:20:24 16560 INFO Opening listening socket succeeded
2019-06-19 14:20:24 16560 INFO Trying to open listening socket:
2019-06-19 14:20:24 16560 INFO IPV4 socket: 0.0.0.0:5555
Serving HTTP on port 5555, directory /u01

2.2 创建外部表

rhnschema=# CREATE EXTERNAL TABLE ext_rhn2 (package_id numeric, primary_xml bytea, filelist bytea, other bytea, created timestamp(6) with time zone, modified timestamp(6) with time zone) LOCATION (‘gpfdist://pg01:5555/rhnpackagerepodata.csv‘) FORMAT ‘CSV‘;
CREATE EXTERNAL TABLE

在gpfdist下,即可以使用主机名,也可以使用IP。后面的文件路径不能使用绝对路径,因为gpfdist启动时候指定了扫描路径为/u01。
当查询外部表的总记录数时,报如下错误:

rhnschema=# select count(*) from ext_rhn2;                                                                                              ERROR:  gpfdist error - line too long in file /u01/rhnpackagerepodata.csv near (148241 bytes)  (seg2 slice1 192.168.120.19:40000 pid=20990)
DETAIL:  External table ext_rhn2, line 3 of gpfdist://pg01:5555/rhnpackagerepodata.csv: ""

出现此错误,使用-m参数重新启动,如下:

[[email protected] ~]$ kill -9 `ps -ef|grep gpfdist|grep -v grep|awk ‘{print $2}‘`
[[email protected] ~]$ gpfdist -d /u01 -m 268435456 -p 5555 -l /tmp/gpfdist.log & 

-m参数的值默认是32K,最大为256M,这里设置为最大268435456 bytes(256M)。再次查询正常,如下图:

2.3 装载数据测试

使用gpfdist测试下装载速度,如下:

通过测试可以看到,使用本地文件的方式加载,需要102399ms,而使用gpfdist工具加载数据,需要57361ms。如果测试数据更多,加载的文件更大,速度还会更加明显。
数据分布情况如下图所示:

数据分布情况和本地文件方式加载的分布情况一样。另外GreenPlum数据库查询数据,先扫描到的数据会直接返回,也就是多次查询的结果可能是不一样的,但是使用gpfdist工具加载,查询结果基本不会是像本地文件加载那样直接从第一条开始有序返回,因为本地加载没有使用并行,在加载的时候数据是从第一条开始有序插入的,而gpfdist工具加载数据是并行加载的,最先插入到数据库的数据并不一定是从第一条数据开始的。

2.4 卸载数据测试

使用可写外部表卸载数据时,如果使用gpfdist工具,就可以实现并行卸载,而且数据不需要经过Master节点,直接由Segment节点写入到外部文件中,效率比较高,卸载大量数据时,使用这种方式会节省大量的时间。
使用下面的命令创建可写外部表:

rhnschema=# CREATE WRITABLE EXTERNAL TABLE unload_ext_rhn (package_id numeric, primary_xml bytea, filelist bytea, other bytea, created timestamp(6) with time zone, modified timestamp(6) with time zone) LOCATION (‘gpfdist://pg01:5555/unload_rhnpackagerepodata.csv‘) FORMAT ‘CSV‘;
CREATE EXTERNAL TABLE

由于gpfdist启动过程中,指定了扫描路径为/u01,所以上述gpfdist后面不能跟绝对路径,否则会报错。
卸载数据如下:

rhnschema=# insert into unload_ext_rhn select *from rhnpackagerepodata;
INSERT 0 77810

可写外部表,仅支持数据写入操作,并不支持数据的更改和删除操作。也不支持对表进行truncate操作。如果卸载数据时出错,只能删除外部表的外部文件,再重新卸载。

原文地址:https://blog.51cto.com/candon123/2411097

时间: 2024-10-03 21:18:25

GreenPlum数据的装载与卸载之外部表以及gpfdist工具的使用的相关文章

GreenPlum数据的装载与卸载之copy命令的使用

Copy是PostgreSql数据库自带的数据工具,它不仅支持表于表之间的数据加载,也支持文件于表之间的数据加载和表对文件的数据卸载.对于Greenplum数据库,使用copy命令进行数据加载,数据需要经过Master节点分发到Segment节点;同样使用copy命令进行数据卸载,数据也需要由Segment发送到Master节点,由Master节点汇总后再写入外部文件,这样就限制了数据加载与卸载的效率,数据量较小的情况下,使用copy命令就非常方便. 1.创建测试表 由于在建表语句中,没有指定具

GreenPlum数据的装载与卸载之gpload的使用

Greenplum的gpload工具使用可读外部表和Greenplum并行文件服务器(gpfdist或者gpfdists)来装载数据.它处理并行的基于文件的外部表设置并且允许用户在一个单一配置文件中配置他们的数据格式.外部表定义以及gpfdist或者gpfdists设置.使用gpload工具,需要编写gpload的控制文件,这个控制文件是一个yaml格式文件,如下图所示:然后执行gpload进行装载操作,如下:控制文件的说明:1.gpload的控制文件,同级的参数一定要保持一致的缩进:2."-&

GreenPlum数据加载

1. copy命令 对于数据加载,GreenPlum数据库提供copy工具,copy工具源于PostgreSQL数据库,copy命令支持文件与表之间的数据加载和表对文件的数据卸载.使用copy命令进行数据加载,数据需要经过Master节点分发到Segment节点,同样使用copy命令进行数据卸载,数据也需要由Segment发送到Master节点,由Master节点汇总后再写入外部文件,这样就限制了数据加载与卸载的效率,但是数据量较小的情况下,copy命令就非常方便.下面测试通过copy命令实现操

PLSQL_Oracle外部表的概念和使用(案例)(通过外部表直接查询数据文件以节数据库表空间)

2014-08-25 BaoXinjian 一.摘要 ORACLE外部表用来存取数据库以外的文本文件(Text File)或ORACLE专属格式文件. 因此,建立外部表时不会产生段.区.数据块等存储结构,只有与表相关的定义放在数据字典中. 外部表,顾名思义,存储在数据库外面的表. 当存取时才能从ORACLE专属格式文件中取得数据,外部表仅供查询,不能对外部表的内容进行修改(INSERT.UPDATE.DELETE操作). 不能对外部表建立索引.因为创建索引就意味着要存在对应的索引记录.而外部表其

如何利用Oracle外部表导入文本文件的数据

同事最近在忙数据一致性比对工作,需要对不同文本文件中的数据进行比对,有的文件较大,记录较多,如果用普通的文本编辑器打开的话,很显然,会很卡,甚至打不开. 基于此,可将该文本文件的数据导入到数据库中,在集合的层面进行比对. 那么如何将文本文件的数据导入到数据库中呢?在这里,主要利用了Oracle的外部表特性. Oracle外部表支持两种类型的驱动:一种是ORACLE_LOADER,外部表的数据必须来源于文件文件,另一种则是ORACLE_DATAPUMP,外部表的数据必须是二进制dump文件,该du

Oracle外部表详解(转载)

(外部表创建主要注意创建目录访问权限问题.目录路径格式无空格等不相关字符,即必须是当前表访问用户可以访问:关于表中行数的限制问题,如果不加限制注意添加reject limit unlimited:表中数据格式与创建表时access parameters中的定义需保持同步,适当用skip=1) 外部表概述 外部表只能在Oracle 9i之后来使用.简单地说,外部表,是指不存在于数据库中的表.通过向Oracle提供描述外部表的元数据,我们可以把一个操作系统文件当成一个只读的数据库表,就像这些数据存储

Oracle 创建外部表

Oracle 外部表能迅速的将海量的数据导入到数据库里面,外部表的创建使用步骤如下: 1 创建一个Directory:必须用sys用户创建,用户存放外部数据文件. create directory DIR_DATA as '/home/oracle/oradata/IN'; 给用户授权目录的使用权限,否则用户不能访问该目录以及其下的文件 grant write,read on directory DIR_DATA to Test; 2 将要导入的外部数据文件,Test_File.csv 放到目录

Hive 外部表 分区表

  之前主要研究oracle与mysql,认为hive事实上就是一种数据仓库的框架,也没有太多另类,所以主要精力都在研究hadoop.hbase,sqoop,mahout,近期略微用心看了下hive.事实上hive还是比我想象中好用的多,心里有点点暗爽,不论是与hadoop的衔接,还是在对外查询分析,定期hsql生成报表方面,都很方便.能够不用mapreduce.直接用hive生成报表. 真是方便.  Hive 提供两者表的两种使用方式,一种是内部表(托管表),第二种就是外部表. 对于两种表的使

0015-如何使用Sentry管理Hive外部表权限

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看. 1.文档编写目的 本文档主要讲述如何使用Sentry对Hive外部表权限管理,并基于以下假设: 1.操作系统版本:RedHat6.5 2.CM版本:CM 5.11.1 3.集群已启用Kerberos和Sentry 4.采用具有sudo权限的ec2-user用户进行操作 2.前置准备 2.1创建外部表数据父目录 1.使用hive用户登录Kerberos [[email protected] 1874-hive-HIVESERVER2]