Amazon Redshift:在数据库之间复制数据

Sam*_*rma 5 postgresql amazon-s3 amazon-web-services amazon-redshift amazon-data-pipeline

我正在寻找在Amazon Redshift上的数据库内复制数据。在此之前,我曾将数据从Redshift数据库复制到EC2实例上托管的PostgreSQL,以进行分析。我有使用dblink EXTENSION进行操作的ruby脚本。

但是现在由于数据在PostgreSQL实例上不可管理,因此我们决定将数据复制到同一Redshift集群上的单独数据库中。

撞!我发现dblink不适用于Postgre 8.0(Redshift版本)。有没有办法让我在Redshift上进行这项工作。

我不想使用复制命令并在两者之间甚至数据管道中添加S3层。您会看到,它是同一集群,只是不同的数据库。

万一没有别的办法,我应该使用数据流水线还是复制到S3,然后再回到Redshift。还是最后本质上是一样的?

PS任何帮助/线索将不胜感激。我会努力的。只是需要一个抬头。

Ben*_*ier 5

现在看来(自2016年6月3日起)

参见:https : //blogs.aws.amazon.com/bigdata/post/Tx1GQ6WLEWVJ1OX/JOIN-Amazon-Redshift-AND-Amazon-RDS-PostgreSQL-WITH-dblink

在上面的文章中,他们给出了一个从redshift复制到另一个数据库的示例:

为了清楚起见,我将使用(postgres集群)和(redshift集群)进行注释

将数据从Amazon Redshift复制到RDS PostgreSQL

创建表的SQL:(postgres集群)

CREATE TABLE sales_summary (
   saletime timestamp,
   sellerid int,
   sales decimal
);
Run Code Online (Sandbox Code Playgroud)

[...]

以下查询显示如何使用dblink函数将数据插入表中:

复制是从(redshift集群)(postgres集群)

INSERT INTO sales_summary
SELECT *
FROM dblink('foreign_server',$REDSHIFT$
    SELECT date_trunc('hours', saletime) AS ts, sellerid, sum(pricepaid) sales
    FROM sales 
    WHERE saletime >= '2008-01-01'
    AND saletime < '2008-02-01'
    GROUP BY ts, sellerid 
    ORDER BY sales 
$REDSHIFT$) AS t1 (saletime timestamp, sellerid int, sales decimal);
Run Code Online (Sandbox Code Playgroud)

编辑:我已经在生产中使用它来每天加载具有数百万行的表,但我还没有一个与此相关的问题。因此,我建议将其作为从Redshift加载到RDS-postgres的首选方法(与COPYing相比,或更糟糕的是,使用ORM将数据加载到内存中)