微信号:gh_34977e8f8c68

介绍:私有云数据库平台的分享!

greenplum导入数据的几种方法

2016-05-10 22:36 yangting
此文介绍几种常见gpdb导入数据的方法,部分配置跟所部署的环境有关系,请依据特定场景做微调;


1、Insert

SQL必备语句,在此不多介绍,具体语法请参考:postgresql官方文档,这里需要注意一下,尽量使用insert values()()(),多values模式,提高性能;




2、copy

命令如下:

COPY country FROM ‘/data/gpdb/country_data.txt’ WITH DELIMITER ‘\t’;

但是此方法只适合管理员在本地导入使用,因为数据文件存储在master节点上。




3、外表导入

这里,我们的数据文件可以是存储在业务ETL机器上或者存储在hdfs上,如数据存储在业务机器上我们需要借助于gpfdist文件系统,这两种导入数据的方法分别如下:


1、gpfdist

(1) 在有数据的机器上通过如下命令启动一文件服务器[数据存放在/data1/file目录下]

gpfdist -d /data1/file/ -p 8081 -l /data1/file/log -m 655350 &



(2)在gpdb中挂载外部表

CREATE EXTERNAL TABLE ttime_ext(time_stamp text,logtime  timestamp,path text,action   text,c_c text)LOCATION ('gpfdist://192.168.98.35:8081/t1.txt')FORMAT 'TEXT' (DELIMITER '\t');




(3)create table ttime as select * from ttime_ext; 


这样数据就导入到ttime表中了,这里有个注意点,gpfdist与gpfdists一定要分清楚,gpfdists是使用在基于ssl上的gpfdist,需要很多额外设置。


2hdfs

hdfs导入方法与gpfdist类似,只是在创建外表之前,需要加载hdfs模块,让gpdb能直接读取hdfs的数据

(1) 在所有的gpdb机器上安装jdk、hadoop包

(2) 设置如下参数

gpconfig -c gp_hadoop_target_version -v “‘hadoop2’”  #根据hadoop版本设置
       gpconfig -c gp_hadoop_home -v “’/usr/local/hadoop-2.7.0’” #安装的hadoop位置

以上两个参数都根据特定环境需要做调整


(3)创建外表

CREATE EXTERNAL TABLE ttime_ext(                                     

 day date,             

 logtime timestamp without time zone,                                                                  kw text,                           

 category text)     

LOCATION ('gphdfs://namenode.**.*****.net:9000/b.txt')       FORMAT 'TEXT' (DELIMITER ' ') LOG ERRORS INTO err_metrics SEGMENT REJECT :100 ROWS;

注:

(1)这里的gphdfs支持通配符,也支持gz的压缩模式,如下

LOCATION ('gphdfs://namenode.**.*****.net:9000/home/****/greenplum/part*') 

(2)如果数据存在垃圾数据,导入可能存在错误,那么一定要设置LOG ERRORS into 错误表,否则前功尽弃;

(4)create table ttime as select * from ttime_ext;



4、gpload

gpdb官方提供了导入数据的命令行工具:gpload,来替换3.1中一系列手动操作,其原理也是利用gpfdist,具体步骤如下:

生成gpload.yml文件

---
VERSION: 1.0.0.1
DATABASE: newstat
USER: newstat
HOST: 192.168.1.144
PORT: 5432
PASSWORD: 0410bb
GPLOAD:
  INPUT:
    - SOURCE:
        LOCAL_HOSTNAME:
          - 192.168.0.71
        PORT: 1234
        FILE:
          - /data00/yangting/a.txt
    - COLUMNS:
          - m2: varchar(50)
          - appkey: varchar(50)
          - pushid: varchar(50)
          - type: varchar(5)
          - logtime: timestamp
          - insert_time: timestamp
    - FORMAT: text
    - DELIMITER: '|'
    - ERROR_LIMIT: 25
    - error_table: rpt_realtime_err
  OUTPUT:
    - TABLE: rpt_realtime
    - MODE: INSERT

  SQL:   

    - BEFORE: "truncate table public.rpt_realtime"    

    - AFTER: "ANALYZE rpt_realtime"


注:SQL 部分是执行gpload之前以及之后所需要执行的SQL,例如:此栗子中,BEFORE为清空改表,AFTER导入完毕,执行ANALYZE 操作

gpload -f gpload.yml[测试发现20G数据,花费248.88 seconds]



以上几种方法,都是线上实际生成环境中使用到的,如果想快速导入数据,个人还是建议利用gpfdist。


参考官方:http://gpdb.docs.pivotal.io/4360/admin_guide/load/topics/g-loading-and-unloading-data.html




 
dba流浪猫 更多文章 greenplum使用场景 为什么redis内存不宜过大 抓包,只为让DBA过的更开心 Atlas支持mysql的prepare特性吗 MySQL for update 死锁案例
猜您喜欢 如何与程序员谈一场没有Bug的恋爱? 美团大数据平台架构实践 【通知】关于大数据产业通讯录延迟发布公告 全角度回顾DockerCon 2015 丰厚奖金,海量订单——“天猫·喵葩”互动创意大赛报名启动