从DB2数据库迁移到Greenplum数据库
我公司决定使用[Greenplum]来建立一个数据集市,而我需要搞清楚该怎么做。从现有的[DB2]数据库转移到Greenplum数据库的数据量大约是2 TB。
我想知道:
1) Greenplum数据库和普通的[PostgresSQL]是一样的吗?(我之前用过Postgres AS 8.3)
2) 有没有什么(免费的)工具可以用来完成这个任务(提取和导入数据)?
3) 我对Python有一些了解。用Python来做这个事情可行吗?会不会很简单,能在合理的时间内完成?
我对怎么做完全没有头绪。任何建议、提示和意见都非常欢迎。
4 个回答
很多Greenplum的工具都是用Python写的,目前的数据库管理系统(DBMS)版本里安装了Python 2.6.2,还包括一个叫pygresql的模块,你可以用它在GPDB里进行操作。
为了把数据传输到Greenplum,我写了一些Python脚本,这些脚本通过cx_Oracle连接到源数据库(Oracle),然后把输出的数据转存到平面文件或者命名管道里。gpfdist可以从这两种来源读取数据,并把数据加载到系统中。
1) 这不是普通的Postgres数据库。
2) 我用过Pentaho数据集成,在各种数据传输项目中取得了不错的效果。 它可以进行复杂的数据转换,并且如果你仔细设计步骤,还能实现多线程和多步骤的数据加载。 我相信Pentaho特别支持Greenplum数据库,虽然我没有这方面的经验。
1) Greenplum 不是普通的 PostgreSQL,但它们很相似。Greenplum 有一些新的语法,但总体来说,它的使用方式还是很一致的。
2) Greenplum 提供了一个叫做 "gpfdist" 的工具,这个工具可以让你在指定的端口上监听,以便导入文件(不过文件需要分割成小块)。你需要的是可读的外部表,这样的表读取速度很快。语法大致是这样的:
CREATE READABLE EXTERNAL TABLE schema.ext_table
( thing int, thing2 int )
LOCATION (
'gpfdist://server:port1/path/to/filep1.txt',
'gpfdist://server:port2/path/to/filep2.txt',
'gpfdist://server:port3/path/to/filep3.txt'
) FORMAT 'text' (delimiter E'\t' null 'null' escape 'off') ENCODING 'UTF8';
CREATE TEMP TABLE import AS SELECT * FROM schema.ext_table DISTRIBUTED RANDOMLY;
如果你按照它的规则来操作,并且你的数据是干净的,那么加载数据的速度会非常快。
3) 你不需要使用 Python 来完成这个操作,虽然你可以用 Python 来自动化这个过程,比如启动 gpfdist 进程,然后发送命令给 psql 来创建外部表并加载数据。不过这要看你想做什么。