将数据从 DB2 DB 传输到 greenplum DB
Posted
技术标签:
【中文标题】将数据从 DB2 DB 传输到 greenplum DB【英文标题】:Transferring data from a DB2 DB to a greenplum DB 【发布时间】:2011-05-24 12:28:24 【问题描述】:我的公司决定使用 [Greenplum] 实施数据集市,我的任务是弄清楚如何继续进行。从现有 [DB2] DB 传输到 Greenplum DB 的数据量大概是 2 TB。
我想知道: 1) Greenplum DB 是否与 vanilla [PostgresSQL] 相同? (我在 Postgres AS 8.3 上工作过) 2)是否有任何(免费)工具可用于此任务(提取和导入) 3) 我对 Python 有一定的了解。在合理的时间内做到这一点是否可行,甚至容易?
我不知道该怎么做。非常欢迎任何建议、提示和建议。
【问题讨论】:
【参考方案1】:1) Greenplum 不是普通的 postgres,但它是相似的。它有一些新的语法,但总的来说是高度一致的。
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 发送一个创建外部表并加载数据的命令。不过,这取决于你想做什么。
【讨论】:
感谢 cmets 的帮助。 Greenplum 是否有任何在线文档?我肯定在他们的网站上找不到任何东西。 您需要管理员指南,可以在此处找到。 gpn.greenplum.com/download.php 还有一个论坛不是很活跃,但是很多Greenplum 工程师都看过。如果您喜欢我的回答,请投票 :)【参考方案2】:Greenplum 的许多实用程序都是用 python 编写的,当前的 DBMS 发行版附带安装了 python 2.6.2,包括可用于在 GPDB 中工作的 pygresql 模块。
为了将数据传输到 greenplum,我编写了 python 脚本,使用 cx_Oracle 连接到源 (Oracle) DB,然后将该输出转储到平面文件或命名管道。 gpfdist 可以从任何一种源中读取数据并将数据加载到系统中。
【讨论】:
【参考方案3】:一般情况下,使用SQL插入或合并导入大批量数据确实很慢。
推荐的方法是使用您定义的外部表来使用基于文件、基于 Web 或 gpfdist 协议托管的文件。
此外,greenplum 有一个名为 gpload 的实用程序,可用于定义您的传输作业,如源、输出、模式(惰性、更新或合并)。
【讨论】:
【参考方案4】:1) 这不是普通的 postgres
2) 我在各种类型的数据传输项目中使用pentaho data integration 并取得了很好的成功。 如果您仔细设计步骤,它允许复杂的转换和多线程、多步骤的数据加载。 我也相信 Pentaho 特别支持 Greenplum,虽然我没有这方面的经验。
【讨论】:
以上是关于将数据从 DB2 DB 传输到 greenplum DB的主要内容,如果未能解决你的问题,请参考以下文章
将整个数据库从 postgresql 传输到 Greenplum 服务器
如何使用 Python 将数据从 Teradata 传输到 Greenplum?
使用 MapReduce 或 Sqoop 将数据加载到 Greenplum DB