gpload的简单实用

准备工作:

  1.因为gpload是对gpfdist的封装,因此使用gpload之前必须开启gpfdist的服务,不然无法使用。

gpfdist -d /home/admin -p 8181 -l /tmp/gpfdist.log &

  开启服务的命令这里就不详解,可以参考我之前讲解的gpfdist文档: http://www.cnblogs.com/daojiao/p/4589038.html

   2.系统需要安Python工具,因为我用的是红帽子系统(redhat),内置了此工具,因此不需要安装。

  3.首先准备数据文件(这里就补贴数据文件了,直接打印出文件名及文件中的书):

4.GP库中创建装载数据的表:

create table member_delta
(
   mever_id varchar(54)
   ,phoneno varchar(20)
   ,action char(1)
   ,dw_ins_date date
)
with
(
    appendonly=true ,compresslevel=5
)
distributed by (mever_id)
partition by list (action)
(
    partition u values(‘U‘),
    partition i values(‘I‘),
    partition d values(‘D‘),
    default partition other_action
)
;

表结构大概讲解下: 这张表附加了分布键,数据压缩,数据分区等功能。

开始gpload的编码:

创建执行的脚本(这里的脚本就是上面所提到的Python语言),文件名为member.yml:

VERSION: 1.0.0.1
DATABASE: Test
USER: gpadmin
HOST: 192.168.23.128
PORT: 5432
GPLOAD:
   INPUT:
    - SOURCE:
         LOCAL_HOSTNAME:
           - mdw
         PORT: 8181
         FILE:
           - /home/admin/member_delta.txt
    - COLUMNS:
               - mever_id: varchar(54)
               - phoneno: varchar(20)
               - action: char(1)
               - dw_ins_date: date
    - FORMAT: text
    - DELIMITER: ‘ ‘
    - QUOTE: ‘"‘
    - HEADER: true
    - ERROR_LIMIT: 25
    - ERROR_TABLE: public.member_err
   OUTPUT:
    - TABLE: public.member_delta
    - MODE: INSERT

脚本所用参数的含义

VERSION: 1.0.0.1            --指定控制文件schema的版本
DATABASE: db_name           --指定连接数据库的名字,如果没有指定,由环境变量$PGDATABASE,或者通过gpload参数-d指定
USER: db_username           --指定连接目标数据库的用户名,如果不使用超级管理员,服务参数gp_external_grant_privileges必须设置成on。
HOST: master_hostname       --指定master主机名,也可以通过gpload的-h选项,或者环境变量$PGHOST指定
PORT: master_port           --指定master的连接端口号,默认是5432,或者通过gpload命令的-p选项或者环境变量$PGPORT指定。
GPLOAD:                     --必须指定,表示装载设置部分在它下面必须定义INPUT:和OUTPUT:两个部分。
INPUT:                      --必须指定,这部分指定装载数据的格式和位置
- SOURCE:                   --必须指定,定义source文件的位置,每个输入部分可以定义多个source部分, windows路径的指定比较特别,比如c:\ 要写成 c:/
LOCAL_HOSTNAME:             --指定gpload运行的主机名称和ip地址,如果有多块网卡,可以同时使用它们,提高装载速度。默认只使用首选主机名和IP。
- hostname_or_ip
PORT: http_port             --指定gpfdist使用的端口,也可以选择端口范围,由系统选择,如果同时指定,port设置优先级高。
| PORT_RANGE: [start_port_range, end_port_range]
FILE:                       --指定装载数据文件的位置,目录或者命名管道。如果文件使用gpzip或者bzip2进行了压缩,它可以自动解压。可以使用通配符*和C语言风格的关系匹配模式指定多个文件。
- /path/to/input_file
- COLUMNS:                    --指定数据源的数据格式,如果没有指定这部分,source表的列顺序,数量,以及数据类型必须与目标表一致。
- field_name: data_type
- FORMAT: text | csv          --指定文件格式是text还是csv
- DELIMITER: ‘delimiter_character‘  --指定文本数据域(列)之间的分割符,默认是|
- ESCAPE: ‘escape_character‘ | ‘OFF‘  --text定义转义字符,text格式默认是\,在text格式中可以选择off关掉转义字符(web log处理时比较有用)
- NULL_AS: ‘null_string‘       --指定描述空值的字符串,text格式默认是\N,csv格式不使用转义符号的空值。
- FORCE_NOT_NULL: true | false --csv格式,强制所有字符默认都用”“括起,因此不能有空值,如果两个分割符之间没有值,被当做0长度字符串,认为值已经丢失。
- QUOTE: ‘csv_quote_character‘  --csv指定转义字符,默认是"
- HEADER: true | false          --是否跳过数据文件第一行,当做表头
- ENCODING: database_encoding   --指定数据源的字符集
- ERROR_LIMIT: integer          --指定由于不符合格式数据记录的上限,如果超过该上限,gpload停止装载,否则正确记录可以被装载,错误记录抛出写入错误表。但它仅支持数据格式错误,不支持违背约束的问题
- ERROR_TABLE: schema.table_name --指定不符合格式要求记录的错误表。如果指定的表不存在系统自动创建。

OUTPUT:
- TABLE: schema.table_name       --指定装载的目标表
- MODE: insert | update | merge  --指定操作模式,默认是insert。merge操作不支持使用随机分布策略的表。
- MATCH_COLUMNS:                 --为update操作和merge操作指定匹配条件。
     - target_column_name
- UPDATE_COLUMNS:                 --为update操作和merge操作指定更新的列
     - target_column_name
- UPDATE_CONDITION: ‘boolean_condition‘  --指定where条件,目标表中只有满足条件的记录才能更改,(merge情况下,只有满足条件的记录才能insert)
- MAPPING:                        --指定source列和目标列的映射关系。
target_column_name: source_column_name | ‘expression‘
PRELOAD:                          --指定load之前的操作
- TRUNCATE: true | false          --如果设置成true,装载之前先删除目标表中所有记录,再装载
- REUSE_TABLES: true | false     --设置成true,不会删除外部表对象会这中间表对象。从而提升性能。
SQL:
- BEFORE: "sql_command"         --装载操作开始前执行的SQL,比如写日志表
- AFTER: "sql_command"          --装载操作之后执行的SQL。

执行脚本:

脚本完成后,放在指定服务器位置,比如/home/command/ 目录下

进入服务器找到存放脚本的目录: cd /home/command/ 执行该脚本

执行命令为:gpload -f member.yml  脚本执行完后,打印台会得到如下信息:

 

查询member_delta,看数据是否添加成功:

select * from member_delta;

总结:

今天写这个例子,虽然是一个简单的例子,但大概让我知道gpload执行的流程是什么。写这个脚本也折腾了不少时间,关键没人教你,从头到尾都是自己在摸索,不懂baidu,不懂翻书,一句话为了写出这个程序不择手段的进行各种尝试,其中的抓狂无奈……但和结果比起来却现的那么微不足道,写飘了,进入正题,今天遇到一个蛋疼的问题就是不够认真,脚本中的个别关键字写错了,确实比较捉急,还有就是刚开始没找到正规的文档,随手捏来一个例子,不知道意思改了半天,这样做真的很浪费时间,对于这个处理个人感觉尽量找官方文档,查看具体每个参数的含义,那些可以写,那些可以省掉。在开始写的时候保证基本语法通过就OK了,不要写太多无用的参数。

上面所写必须有不足的地方,还请各位大牛指教,也可以加我QQ一起探讨,QQ:2233699673  加QQ时请说明greenplum交流。

时间: 2024-11-05 18:37:23

gpload的简单实用的相关文章

简单实用的PHP防注入类实例

这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下 本文实例讲述了简单实用的PHP防注入类.分享给大家供大家参考.具体如下: PHP防注入注意要过滤的信息基本是get,post,然后对于sql就是我们常用的查询,插入等等sql命令了,下面我给各位整理两个简单的例子,希望这些例子能给你网站带来安全. PHP防注入类代码如下: 复制代码 代码如下: <?php /**  * 参数处理类  *

微信公众平台之超简单实用的天气预报后台实现

微信公众平台之超简单实用的天气预报后台实现 概述,前段时间我在开发一个自己的微信公众平台,需要实现天气预报功能,在网上度娘了下,实现天气预报的接口API还蛮多的,有:中国气象局.雅虎和新浪等,中国天气预报接口需要全国的编码,雅虎的有时候访问不了,研究了下还是新浪提供的接口比较简单实用.新浪天气预报API的URL是http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0.其

FMDB数据库的简单实用

引入和FMDB第三方类库,  demo地址:http://pan.baidu.com/s/1c0pbfxA 1 #define dataBasePath [[(NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)) lastObject]stringByAppendingPathComponent:dataBaseName] 2 #define dataBaseName @"MyDatabase

简单实用的CSS网页布局中文排版技巧

由于汉字的特殊性,在css网页布局中,中文排版有别于英文排版.排版是一个麻烦的问题,小编认为,作为一个优秀的网页设计师和网页制作人员,掌握一些简单的中文排版技巧是不可或缺的,所以今天特意总结了几个简单实用的技巧,希望对大家有所帮助. 一.如何设定文字字体.颜色.大小等 font-style设定斜体,比如font-style:italic font-weight设定文字粗细,比如font-weight:bold font-size设定文字大小,比如font-size:12px line-heigh

Java对象简单实用(计算器案例)

Java对象简单实用(计算器案例) 对 Java中的对象与属性,方法的使用,简单写了个案例 1 import java.util.Scanner; 2 class Calculste 3 { 4 int a; //定义两个整数 5 int b; 6 String option; //定义接收操作符的字符串 7 public void count(){ 8 9 //对操作符进行判断 10 switch(option){ 11 case "+": 12 System.out.println

php简单实用的操作文件工具类(创建、移动、复制、删除)

php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) {  // 原目录,复制到的目录 $dir = opendir($src); @mkdir($dst); while(false !== ( $file = readdir($dir)) ) { if (( $file != '.' ) && ( $file != '..' )) { if ( is_dir($src . '/' . $file) )

Mac中Git的简单实用(6) --- 分支管理策略

今天我来介绍下Git,Git是一款免费.开源的分布式版本控制系统. 我们在上一个学习了Git分支冲突管理. 这一章,我们要学习Git的Fast-forward模式.保存恢复现场 .测试的feature分支. Mac中Git的简单实用(1) - Git基本命令(1) Mac中Git的简单实用(2) - Git基本命令(2) Mac中Git的简单实用(3) - Github远程仓库 Mac中Git的简单实用(4) - 分支branch管理 Mac中Git的简单实用(5) - Git分支冲突管理 1.

JavaScript 日期格式化 简单实用

JavaScript 日期格式化 简单实用 代码如下,引入jquery后直接后加入以下代码刷新可测试 Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 "m+": this.

关于git的简单实用

这里主要介绍的是 "开源中国"的使用  ;其实就相当于github的中国版.只不过服务器在中国 ,所以速度上稍微快一些. 好 废话不多说直接上代码 ! 整个过程都是在Mac终端中完成: 首先 .要创建一个文件夹用来装我们的项目  在创建项目之前我们先来熟悉一下终端的帮助功能 , 在终端中 如果想调出git 的帮助直接可以输入 git help指令 这样就可以调出关于git的所有帮助 如果 知道详细的某个关键字怎么使用也很简单 直接输入git help checkout *退出输入wq