greenplum客户端工具_GreenPlum数据加载工具gpload | 信春哥,系统稳,闭眼上线不回滚!...

GreenPlum数据库除了可以使用copy和外部表的方式加载数据外,还可以使用gpload工具进行数据加载。gpload工具是对外部表的封装,但是不需要在数据库中创建外部表,可以直接将数据从数据库外的文件加载到数据库的表中。使用gpload工具,需要编写gpload工具的控制文件,这个控制文件是使用yuml语言编写,如下是gpload工具的演示。

首先编写gpload的控制文件。

[gpadmin@sdw1 ~]$ cat gpload.yml

---

VERSION: 1.0.0.1

DATABASE: dbdream

USER: gpadmin

HOST: mdw

PORT: 5432

GPLOAD:

INPUT:

- SOURCE:

LOCAL_HOSTNAME:

- sdw1

PORT: 1234

FILE:

- /home/gpadmin/MED_ORD_PGM_D.txt

- COLUMNS:

- id: int

- ord_id: int

- brd_pgm_schd_id: int

- prd_id: int

- unt_prd_id: int

- ord_acp_dtm: timestamp

- ord_acp_crr: int

- cust_id: int

- FORMAT: text

- DELIMITER: ','

- ERROR_LIMIT: 25

- error_table: public.med_ord_pgm_d_err

OUTPUT:

- TABLE: public.med_ord_pgm_d

- MODE: INSERT

然后使用gpload工具,将数据加载到数据库。

[gpadmin@sdw1 ~]$ gpload -f gpload.yml

2016-02-04 14:26:45|INFO|gpload session started 2016-02-04 14:26:45

Password:

2016-02-04 14:27:02|INFO|started gpfdist -p 1234 -P 1235 -f "/home/gpadmin/MED_ORD_PGM_D.txt" -t 30

2016-02-04 14:27:04|INFO|running time: 18.66 seconds

2016-02-04 14:27:04|INFO|rows Inserted = 1000000

2016-02-04 14:27:04|INFO|rows Updated = 0

2016-02-04 14:27:04|INFO|data formatting errors = 0

2016-02-04 14:27:04|INFO|gpload succeeded

需要注意gpload的控制文件的缩进问题,同级的参数一定要保持一致的缩进,比如上文中的INPUT、OUTPUT要保持同样的缩进,否则在加载时会遇到下面的错误。

[gpadmin@sdw1 ~]$ gpload -f gpload.yml

2016-02-04 15:21:39|ERROR|configuration file error: expected , but found '', line 30

source、column等同级的参数也要保持同样的缩进,否则会遇到下面的错误。

[gpadmin@sdw1 ~]$ gpload -f gpload.conf

2016-01-30 18:00:32|ERROR|configuration file error: mapping values are not allowed here, line 6

还组要注意的是gpload的控制文件中,-后面一定要有空格,如果:后面要跟参数值,那么:后面也一定要有空格。

gpload控制文件中也可以写一些SQL语句,这样 在执行数据加载时,会运行这些SQL,如下:

---

VERSION: 1.0.0.1

DATABASE: dbdream

USER: gpadmin

HOST: mdw

PORT: 5432

GPLOAD:

INPUT:

- SOURCE:

LOCAL_HOSTNAME:

- sdw1

PORT: 1234

FILE:

- /home/gpadmin/MED_ORD_PGM_D.txt

- COLUMNS:

- id: int

- ord_id: int

- brd_pgm_schd_id: int

- prd_id: int

- unt_prd_id: int

- ord_acp_dtm: timestamp

- ord_acp_crr: int

- cust_id: int

- FORMAT: text

- DELIMITER: ','

- ERROR_LIMIT: 25

- error_table: public.med_ord_pgm_d_err

OUTPUT:

- TABLE: public.med_ord_pgm_d

- MODE: INSERT

SQL:

- BEFORE: "truncate table public.med_ord_pgm_d"

- AFTER: "ANALYZE med_ord_pgm_d"

before参数后面的SQL是在数据加载之前运行的,after参数后面的SQL是在加载完成之后运行的,比如上面的例子,在数据加载之前先清空表的数据,加载完成后,收集表的统计信息。

[gpadmin@sdw1 ~]$ gpload -f gpload.yml

2016-02-04 15:07:45|INFO|gpload session started 2016-02-04 15:07:45

Password:

2016-02-04 15:07:48|INFO|started gpfdist -p 1234 -P 1235 -f "/home/gpadmin/MED_ORD_PGM_D.txt" -t 30

2016-02-04 15:07:51|INFO|running time: 6.18 seconds

2016-02-04 15:07:51|INFO|rows Inserted = 1000000

2016-02-04 15:07:51|INFO|rows Updated = 0

2016-02-04 15:07:51|INFO|data formatting errors = 0

2016-02-04 15:07:51|INFO|gpload succeeded

dbdream=# select count(*) from med_ord_pgm_d;

count

---------

1000000

(1 row)

在gpload的帮助手册中,SQL的例子是在加载前向表中插入一条记录,记录加载的时间点,在加载完成后,再向表中插入一条记录,记录加载完成的时间点,这样就可以知道数据加载用了多长时间。

SQL:

- BEFORE: "INSERT INTO audit VALUES('start', 'current_timestamp')"

- AFTER: "INSERT INTO audit VALUES('end', 'current_timestamp')"

gpload是对外部表的封装,使用gpfdist工具数据也是并行加载,但是个人认为,没有外部表的方式方便,最起码没有准确的gpload控制文件模版,缩进问题就很头疼。

你可能感兴趣的:(greenplum客户端工具)