Greenplum数据导入

gpdb导入导入除了用 insert 外,还可以用 copy 和 gpload。

1. copy

用copy导入的文件为带逗号分隔符的csv文件,导入的语句类似如下(利用time命令统计时间)

/usr/bin/time -v -o runGal.txt psql -d astronomy -c "copy GalaxyLJ from '/home/gpadmin/load/comma/Galaxy1000.csv' with DELIMITER ',' csv header;" 

2. gpload

利用gpload导入时,是并行导入,所以速度会快很多,但需要编写yaml文件。示例文件如下:

VERSION: 1.0.0.1
DATABASE: ops
USER: gpadmin
HOST: mdw-1
PORT: 5432
GPLOAD:
   INPUT:
    - SOURCE:
         LOCAL_HOSTNAME:
           - etl1-1
           - etl1-2
           - etl1-3
           - etl1-4
         PORT: 8081
         FILE: 
           - /var/load/data/*
    - COLUMNS:
           - name: text
           - amount: float4
           - category: text
           - desc: text
           - date: date
    - FORMAT: text
    - DELIMITER: '|'
    - NULL_AS: ''
    - HEADER: false
    - ERROR_LIMIT: 25
    - LOG_ERRORS: true
   OUTPUT:
    - TABLE: payables.expenses
    - MODE: INSERT
   PRELOAD:
    - TRUNCATE: true
    - REUSE_TABLES: true 
   SQL:
   - BEFORE: "INSERT INTO audit VALUES('start', current_timestamp)"
   - AFTER: "INSERT INTO audit VALUES('end', current_timestamp)"

INPUT

DATABASE:要导入的数据库名称
USER:指定用户名
HOST:指定master主机名
PORT:指定master的连接端口
LOCAL_HOSTNAME:指定gpload运行的主机名称或ip地址,对应主机上必须能够运行gpfdist 命令,并且存在要导入的文件
PORT:指定gpfdist的端口
FILE:指定要导入的数据文件,目录等
COLUMNS:指定数据源的数据格式,可以不用指定,默认的数据格式和表列对应
FORMAT:指定文件格式text还是csv
DELIMITER:指定文件数据列之间的分隔符,默认是 | 
NULL_AS:使用描述空值的描述符。如: ||,表示两个分割符之间没有值,对应的空值描述符为:''
HEADER;是否跳过数据文件的第一行。
ERROR_LIMIT:错误的记录数上限,如果超过该限制,则停止导入
LOG_ERRORS:记录错误的行数并存入表中

OUTPUT

TABLE:指定要导入的表
MODE:指定操作模式,默认是 insert

RELOAD
TRUNCATE:如果为true,则导入之前,删除目标表中的记录,再导入
REUSE_TABLES:如果为true,不会删除外部表对象或者中间对象,从而提升性能

SQL

BEFORE:导入之前执行的SQL
AFTER:导入之后执行的SQL

一个具体的导入示例

VERSION: 1.0.0.1
DATABASE: testDB
USER: gpdba
HOST: 192.168.100.78
PORT: 5432
GPLOAD:
 INPUT:
  - SOURCE:
     LOCAL_HOSTNAME:
      - 192.168.100.78
     PORT: 8081
     FILE:
      - /home/gpdba/DBtest/GPDB/tpcds/item.csv
  - FORMAT: text
  - DELIMITER: '|'
  - NULL_AS: ''
  - ERROR_LIMIT: 25
  - LOG_ERRORS: true
 PRELOAD:
  - REUSE_TABLES: true
 OUTPUT:
  - TABLE: item
  - MODE: insert
 PRELOAD:
  - TRUNCATE: true

gpload  
Greenplum使用gpload通过gpfdist实现文件的高速加载