准备工作:

  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了,不要写太多无用的参数。

gpload的简单实用的更多相关文章

  1. jQuery的几种简单实用效果

    许久未分享博客,或许已生疏. 闲来无事, 分享几个jQuery简单实用的效果案例 不喜勿喷... 1.页面常用的返回顶部 <!DOCTYPE html> <html lang=&qu ...

  2. 经验分享:10个简单实用的 jQuery 代码片段

    尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...

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

    这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下   本文实例讲述了简单实用的PHP防注 ...

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

    php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) {  // 原目录,复制到的目录 $dir = opend ...

  5. 基于Bootstrap简单实用的tags标签插件

    http://www.htmleaf.com/jQuery/ jQuery之家 自由分享jQuery.html5和css3的插件库 基于Bootstrap简单实用的tags标签插件

  6. C#_简单实用的翻页

    简单实用的生成翻页HTML辅助类 C# using System.Text; namespace ClassLibrary { /// <summary> /// /// </sum ...

  7. 简单实用的Windows命令(一)

    前几天新买了一台笔记本电脑,使用了一下几个简单的查看电脑配置的命令,觉得非常的不错,在此记录一下 一:运行命令的方式有两种 1:使用快捷键WIN+R,然后在弹出的“运行”对话框中输入对应的命令 2:在 ...

  8. 简单实用的Windows命令(二)

    昨天简单的记录了几个非常简单实用的Windows命令,不过我又想起来还有两个我在实际的工作中也是经常用到的命令——PING和IPCONFIG,不过我在工作中的使用都是非常简单的,用PING命令检测对应 ...

  9. iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信

    一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...

随机推荐

  1. javascript检测属性

    javascript 对象可以看做属性的集合.我们可以通过三种方式来判断某个属性是否存在于某个对象中. 1.in操作符 var o={x:1} "x" in o //True :x ...

  2. 转载:在Ubuntu系统下装Win7并引导双系统

    转载自http://blog.sina.com.cn/s/blog_9f6451990101blef.html 本人的系统原先是就单ubuntu系统,而且是未分区情况下自动安装的,现在又装了个wind ...

  3. 搜索算法:深度优先搜索(DFS)

    关于深搜的介绍,在网上有很多,不再赘述.主要以题目形式实例讲解. POJ - 1321 (http://poj.org/problem?id=1321) 题目大意:给出一个棋盘,棋子不能同行同列,求放 ...

  4. 软件缺陷分析方法:ODC

    资料 Orthogonal Defect Classification:简要描述. ODC-5-2.pdf :详细说明了ODC对于缺陷属性分类的描述,以及具体应该怎么划分. ODC-5-2-Exten ...

  5. How to Validate XML using Java

    Configure Java APIs (SAX, DOM, dom4j, XOM) using JAXP 1.3 to validate XML Documents with DTD and Sch ...

  6. fzu 2135 数字游戏 【水题】

    Problem 2135 数字游戏 Accept: 253    Submit: 392Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem ...

  7. Collections.sort的两种用法 转

    /** * @author guwh * @version 创建时间:2011-11-3 上午10:49:36 * 类说明 */ package com.jabberchina.test; impor ...

  8. Splunk < 6.3 版本 SSL 证书过期事宜

    最近Splunk发出邮件提醒客户SSL证书过期事宜. 问题看起来比较严重,因为所有的实例,包括 forwarder\peernode\indexer\master node 等等都受影响,而且Depl ...

  9. angular js 表单验证

    <!doctype html> <html ng-app="myapp"> <head> <meta charset="UTF- ...

  10. bootstrap学习笔记--bootstrap网格系统

    移动设备优先 移动设备优先是 Bootstrap 3 的最显著的变化. 在之前的 Bootstrap 版本中(直到 2.x),您需要手动引用另一个 CSS,才能让整个项目友好的支持移动设备. 现在不一 ...