Greeplum 系列(四) 数据的装载与卸裁

装载数据有以下种方法:

  1. insert
  2. copy
  3. 外部表
  4. 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 提供了两种类型的外部表:

  1. 可读外部表: 用于数据装载,不允许对数据进行修改

    按数据源不同,分为两种可读外部表。一是常规的:访问静态的平面文件;二是 WEB:访问动态数据源(比如web服务或者OS的命令或脚本)

  2. 可写外部表: 用于数据卸载,从数据库表中选择记录并输出到文件、命令管道或其他的可执行程序,包括并行 MapReduce 计算。只需允许 INSERT 操作。

3.1 三种协议

在创建外部表定义时,必须指定文件格式和文件位置以及用来访问外部表数据源的协议:gpfdist, gpfdists 和 gphdfs

  1. gpfdist

    如果文件使用了 gzip 或者 bzip2 压缩,gpfdist 会自动解压,也可使用通配符匹配多个文件。

  2. gpfdists

    gpfdists 是 gpfdist 的安全版本,其开启的加密通信并确保文件与 GP 之间的安全认证。

  3. file

    如果使用 file:// 协议,则外部文件必须存放在 segment 主机上面。pg_max_external_files 用来确定每个外部表中允许多少个外部文件。

  4. 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 系列(四) 数据的装载与卸裁的更多相关文章

  1. AI佳作解读系列(四)——数据增强篇

    前言 在深度学习的应用过程中,数据的重要性不言而喻.继上篇介绍了数据合成(个人认为其在某种程度上可被看成一种数据增强方法)这个主题后,本篇聚焦于数据增强来介绍几篇杰作! (1)NanoNets : H ...

  2. Greeplum 系列(八) 数据维护

    Greeplum 系列(八) 数据维护 一.事务管理 begin(start transaction) # 开始事务 savepoint # 保存事务回滚点 rollback # 回滚事务 end(c ...

  3. Greeplum 系列(四) 实战

    Greeplum 系列(四) 实战 表结构 (1) 拉链表结构 create table public.member_fatdt0 ( member_id varchar(64), phoneno v ...

  4. Greeplum 系列(三) 基本用法

    Greeplum 系列(三) 基本用法 <PostgreSQL 教程>:https://www.yiibai.com/postgresql 一.Greeplum 登陆与创建 1.1 登陆 ...

  5. Greeplum 系列(六) 备份与恢复

    Greeplum 系列(六) 备份与恢复 http://www.dbdream.com.cn/category/greenplum/ 先介绍几个命令查看 Greenplum 集群状态: # 1. 查看 ...

  6. S5PV210开发系列四_uCGUI的移植

    S5PV210开发系列四 uCGUI的移植 象棋小子          1048272975 GUI(图形用户界面)极大地方便了非专业用户的使用,用户无需记忆大量的命令,取而代之的是能够通过窗体.菜单 ...

  7. SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

    原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. ...

  8. 系列四TortoiseSvn客户端软件

    原文:系列四TortoiseSvn客户端软件 TortoiseSvn介绍 TortoiseSvn 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录.文件保存在中 ...

  9. 【C++自我精讲】基础系列四 static

    [C++自我精讲]基础系列四 static 0 前言 变量的存储类型:存储类型按变量的生存期划分,分动态存储方式和静态存储方式. 1)动态存储方式的变量,生存期为变量所在的作用域.即程序运行到此变量时 ...

随机推荐

  1. erlang的一些小技巧(不定期更新)

    在任意节点热更新代码 rpc:call(Node,c,l,[Mod]) c和l的指的是code,library Erlang Shell隐藏的小技巧 f(). %%把所有绑定变量释放掉 f(Val). ...

  2. MySql触发器实现数据同步学习

    触发器实现:(增.删.改操作事件触发数据单向同步)数据库触发器教程:https://www.cnblogs.com/phpper/p/7587031.html同步代码: DELIMITER $ DRO ...

  3. python下很帅气的爬虫包 - Beautiful Soup 示例

    先发一下官方文档地址.http://www.crummy.com/software/BeautifulSoup/bs4/doc/ 建议有时间可以看一下python包的文档. Beautiful Sou ...

  4. java------------break;

    总结: package com.mmm; public class Pnal { public static void main(String[] args) { int i = 0; while ( ...

  5. Druid.io系列(四):索引过程分析

    原文链接: https://blog.csdn.net/njpjsoftdev/article/details/52956083 Druid底层不保存原始数据,而是借鉴了Apache Lucene.A ...

  6. url携带的参数获取并处理demo

    url demo: http://servername/webname/pagename.csp?paramName=paramValue&paramName2=paramName2& ...

  7. Flask之视图(二)

    2.2 扩展 上下文:相当于一个容器,保存了Flask程序运行过程中的一些信息. Flask中有两种上下文,请求上下文和应用上下文. 请求上下文(request context) request和se ...

  8. PHP,JAVA,NET 开发比较

    装载出处:http://www.cnblogs.com/sinlang5778/archive/2011/08/10/2133190.html 一.语言: PHP:PHP产生与1994年,其语法混合了 ...

  9. VS2017 Intelligense C++ 设置的几个重点

    1,高级-点到箭头的转换,用于指针操作 2,高级-成员列表筛选模式-一定要选[模糊],而不要选[智能] 这样在我们输入 vkphdfea就能检索到vkPhysicalDeviceFeatures, 而 ...

  10. Server_id 冲突导致 IO 等待故障

    问题描述: 线上添加新的 MySQL Slave 后,服务器异常. 1.show processlist; Queueing master event to the relay log Reconne ...