Greeplum 系列(四) 数据的装载与卸裁
Greeplum 系列(四) 数据的装载与卸裁
装载数据有以下种方法:
- insert
- copy
- 外部表
- gpload
下面以 member_delta 表为例分别介绍这四种方法。
create table public.member_delta (
member_id varchar(64),
phoneno varchar(64),
action char(1),
dw_ins_date date
) with (appendonly=true, compresslevel=5)
distributed by(member_id);
一、insert
insert into public.member_delta values('mem006', '13100000006', 'I', date'2011-12-03');
insert into public.member_delta values('mem002', '13100000002', 'D', date'2011-12-03');
insert into public.member_delta values('mem003', '13100000003', 'U', date'2011-12-03');
二、copy
-- 导入数据
copy public.member_delta from '/home/gpadmin/member_his_init.dat' with delimiter ','
LOG ERRORS INTO err_member_delta SEGMENT REJECT LIMIT 2 ROWS;
-- 导出数据
COPY (SELECT * FROM member_delta WHERE date LIKE '2013%') TO '/data/unload/tb_cp_02_2013.out';
member_his_init.dat 文件如下:
mem001,13100000001,2011-12-01,3000-12-31,C,I,2011-12-01
mem002,13100000002,2011-12-01,3000-12-31,C,I,2011-12-01
mem003,13100000003,2011-12-01,3000-12-31,C,I,2011-12-01
mem004,13100000004,2011-12-01,3000-12-31,C,I,2011-12-01
mem005,13100000005,2011-12-01,3000-12-31,C,I,2011-12-01
三、外部表(××××)
外部表允许用户像访问标准数据库表一样访问外部表。结合 GP 的并行文件分配程序(gpfdist),外部表支持在装载和卸载数据时全并行化利用所有 segment 实例的资源。GP还可以利用 Hadoop 分布式文件系统的并行架构来访问文件。
GP 提供了两种类型的外部表:
可读外部表: 用于数据装载,不允许对数据进行修改
按数据源不同,分为两种可读外部表。一是常规的:访问静态的平面文件;二是 WEB:访问动态数据源(比如web服务或者OS的命令或脚本)
可写外部表: 用于数据卸载,从数据库表中选择记录并输出到文件、命令管道或其他的可执行程序,包括并行 MapReduce 计算。只需允许 INSERT 操作。
3.1 三种协议
在创建外部表定义时,必须指定文件格式和文件位置以及用来访问外部表数据源的协议:gpfdist, gpfdists 和 gphdfs
gpfdist
如果文件使用了 gzip 或者 bzip2 压缩,gpfdist 会自动解压,也可使用通配符匹配多个文件。
gpfdists
gpfdists 是 gpfdist 的安全版本,其开启的加密通信并确保文件与 GP 之间的安全认证。
file
如果使用 file:// 协议,则外部文件必须存放在 segment 主机上面。pg_max_external_files 用来确定每个外部表中允许多少个外部文件。
gphdfs
该协议指定了一个可以在 HDFS 上包含通配符的路径。在 GP 链接到 HDFS 文件时,所有数据将从 HDFS 数据节点被并行读取到 GP 的 Segment 实例以快速处理。每个 GP Segment 实例只读取一组 Hadoop 数据块。
3.2 gpfdist 使用
(1) 启动 gpfdist
# nohup 后台启动,关闭当前会话,进程仍运行;& 后台启动,关闭当前会话,进程关闭
# -d 数据目录; -l 日志目录
nohup gpfdist –d /var/load_files –p 8081 –l /home/gpadmin/log &
# 查看 gpfdist 进程
ps -ef | grep gpfdist
# 用 wget 诊断 gpfdist 是否正常工作
wget http://gpfdist_hostname:port/filename
(2) 创建外部表,用于写入数据
CREATE EXTERNAL TABLE tb_ext_gf01(id int, name text)
LOCATION (
'gpfdist://mdw:8081/*.txt',
'gpfdist://mdw:8082/*.txt'
)
FORMAT 'TEXT' (DELIMITER '|' NULL '')
LOG ERRORS INTO err_customer SEGMENT REJECT LIMIT 2;
(3) 创建可写外部表,用于导出数据
CREATE WRITABLE EXTERNAL TABLE tb_ext_gf04 (LIKE tb_cp_02)
LOCATION ('gpfdist://mdw:8081/tb_cp_02.out')
FORMAT 'TEXT' (DELIMITER '|' NULL ' ')
DISTRIBUTED BY (id);
-- 导出数据
insert into tb_ext_gf04 select * from tb_cp_02;
(4) 定义 OS 命令型 WEB 外部表
drop external table if exists public.tb_ext_wb01;
CREATE EXTERNAL WEB TABLE tb_ext_wb01(output text)
EXECUTE 'hostname'
-- execute 'cat /home/gpadmin/data/member_delta.dat' on master
FORMAT 'TEXT';
(5) 定义 URL 型 WEB 外部表
CREATE EXTERNAL WEB TABLE tb_ext_wb02 (name text, date date, amount float4, category text, description text)
LOCATION (
'http://intranet.company.com/expenses/marketing/file.csv',
'http://intranet.company.com/expenses/eng/file.csv')
FORMAT 'CSV' (HEADER);
四、gpload
gpload 是对外部表的一层封装,首先编写 gpload 控制文件 gpload.yml,代码如下:
---
VERSION: 1.0.0.1
DATABASE: test
USER: gpadmin
HOST: localhost
PORT: 5432
GPLOAD:
INPUT:
- SOURCE:
LOCAL_HOSTNAME:
- master
PORT: 8888
FILE:
- /home/gpadmin/data/member_delta.dat
- COLUMNS:
- member_id: varchar(64),
- phoneno: varchar(20),
- action: char(1),
- dw_ins_date: date
- FORMAT: text
- DELIMITER: ','
- ERROR_LIMIT: 2
- ERROR_TABLE: public.member_err
OUTPUT:
- TABLE: public.member_delta
- MODE: INSERT
SQL:
- BEFORE: "truncate table public.member_delta"
- AFTER: "analyze public.member_delta"
执行 gpload 命令,结果如下:
gpload -f gpload.yml
2018-05-18 20:53:10|INFO|gpload session started 2018-05-18 20:53:10
2018-05-18 20:53:10|INFO|started gpfdist -p 8888 -P 8889 -f "/home/gpadmin/data/member_delta.dat" -t 30
2018-05-18 20:53:11|INFO|running time: 0.85 seconds
2018-05-18 20:53:11|INFO|rows Inserted = 1
2018-05-18 20:53:11|INFO|rows Updated = 0
2018-05-18 20:53:11|INFO|data formatting errors = 0
2018-05-18 20:53:11|INFO|gpload succeeded
每天用心记录一点点。内容也许不重要,但习惯很重要!
Greeplum 系列(四) 数据的装载与卸裁的更多相关文章
- AI佳作解读系列(四)——数据增强篇
前言 在深度学习的应用过程中,数据的重要性不言而喻.继上篇介绍了数据合成(个人认为其在某种程度上可被看成一种数据增强方法)这个主题后,本篇聚焦于数据增强来介绍几篇杰作! (1)NanoNets : H ...
- Greeplum 系列(八) 数据维护
Greeplum 系列(八) 数据维护 一.事务管理 begin(start transaction) # 开始事务 savepoint # 保存事务回滚点 rollback # 回滚事务 end(c ...
- Greeplum 系列(四) 实战
Greeplum 系列(四) 实战 表结构 (1) 拉链表结构 create table public.member_fatdt0 ( member_id varchar(64), phoneno v ...
- Greeplum 系列(三) 基本用法
Greeplum 系列(三) 基本用法 <PostgreSQL 教程>:https://www.yiibai.com/postgresql 一.Greeplum 登陆与创建 1.1 登陆 ...
- Greeplum 系列(六) 备份与恢复
Greeplum 系列(六) 备份与恢复 http://www.dbdream.com.cn/category/greenplum/ 先介绍几个命令查看 Greenplum 集群状态: # 1. 查看 ...
- S5PV210开发系列四_uCGUI的移植
S5PV210开发系列四 uCGUI的移植 象棋小子 1048272975 GUI(图形用户界面)极大地方便了非专业用户的使用,用户无需记忆大量的命令,取而代之的是能够通过窗体.菜单 ...
- SQL Server 2008空间数据应用系列四:基础空间对象与函数应用
原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. ...
- 系列四TortoiseSvn客户端软件
原文:系列四TortoiseSvn客户端软件 TortoiseSvn介绍 TortoiseSvn 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录.文件保存在中 ...
- 【C++自我精讲】基础系列四 static
[C++自我精讲]基础系列四 static 0 前言 变量的存储类型:存储类型按变量的生存期划分,分动态存储方式和静态存储方式. 1)动态存储方式的变量,生存期为变量所在的作用域.即程序运行到此变量时 ...
随机推荐
- golang里面检测对象是否实现了接口的方法
写法有点怪异,记一下吧 _, implemented := this.delegate.(IGenTcpServerDelegate) if implemented { this.delegate.G ...
- spring面试资料
* Spring的优点有什么? 1. Spring是分层的架构,你可以选择使用你需要的层而不用管不需要的部分 2. Spring是POJO编程,POJO编程使得可持续构建和可测试能力提高 ...
- 关于PIPELINE,也许你应该知道
所谓流水线(pipeline)设计,通常来说是流水生产线. 同样,组合逻辑路径可以看作是一条生产线,路径上的每个逻辑单元都可以看作是一个阶段,都会产生时延. 如果不采用流水设计,前后级组合逻辑依次工作 ...
- (转)Inno Setup入门(二十二)——Inno Setup类参考(8)
本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17268473 列表框 列表框(ListBox)是Windows应用程 ...
- Clustershell集群管理
在运维实战中,如果有若干台数据库服务器,想对这些服务器进行同等动作,比如查看它们当前的即时负载情况,查看它们的主机名,分发文件等等,这个时候该怎么办?一个个登陆服务器去操作,太傻帽了!写个shell去 ...
- Ubuntu16下编译linux内核,报"mkimage" command not found错的解决
"mkimage" command not found - U-Boot images will not be built /work/system/linux-3.4.20/ar ...
- Win10 恢复后退键
转自:http://www.cnblogs.com/liubaicai/p/4368261.html 自带的几种风格的页面,竟然是用的左上角虚拟后退键,这种倒行逆施的行为微软你真是够了! 一定要把后退 ...
- [Oracle] 用python插入中文
先替换字符串中的\x22 为双引号,\x0A为回车 str2 = '{\x22name\x22:\x22hao\x22 \x0A ,\x22os\x22:\x22other\x22 } print s ...
- SpringBoot起步依赖和自动配置
一.起步依赖 1. 是什么 本质上是一个Maven项目对象模型(Project Object Model, POM), 定义了对其他库的传递依赖,这些东西加在一起即支持某项功能. 比如: spring ...
- cocos2dx中快速完成一段可播放动画
版本:cocos2dx 2.2.6 IDE: VS2012 语言:C++98 CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteF ...