如何将数据从AWS Postgres RDS传输到S3(然后是Redshift)?

时间:2014-11-06 14:21:35

标签: postgresql amazon-web-services amazon-redshift amazon-data-pipeline

我使用AWS数据管道服务将数据从RDS MySql数据库传输到s3,然后传输到Redshift,这很有效。

但是,我也有数据存在于RDS Postres实例中,我想以同样的方式管道,但我很难设置jdbc连接。如果这不受支持,是否有解决办法?

"connectionString": "jdbc:postgresql://THE_RDS_INSTANCE:5432/THE_DB”

3 个答案:

答案 0 :(得分:14)

现在,您可以定义一个复制活动,以将Postgres RDS实例中的数据提取到S3中。在数据管道界面中:

  1. 创建SqlDataNode类型的数据节点。指定表名并选择查询
  2. 通过指定RDS实例ID(实例ID在您的URL中,例如your-instance-id.xxxxx.eu-west-1.rds.amazonaws.com)以及用户名,密码和数据库名称来设置数据库连接。
  3. 创建S3DataNode
  4. 类型的数据节点
  5. 创建一个Copy活动并将SqlDataNode设置为输入,将S3DataNode设置为输出

答案 1 :(得分:5)

这还行不通。 aws没有内置/发布功能,以便很好地连接到postgres。你可以在shellcommandactivity中做到这一点。您可以编写一些ruby或python代码来执行此操作,并使用scriptUri将其放在s3上的脚本中。您也可以编写一个psql命令将表转储到csv,然后通过该活动节点中的“staging:true”将其传递给OUTPUT1_STAGING_DIR。

类似的东西:

{
  "id": "DumpCommand",
  "type": "ShellCommandActivity",
  "runsOn": { "ref": "MyEC2Resource" },
  "stage": "true",
  "output": { "ref": "S3ForRedshiftDataNode" },
  "command": "PGPASSWORD=password psql -h HOST -U USER -d DATABASE -p 5432 -t -A -F\",\" -c \"select blah_id from blahs\" > ${OUTPUT1_STAGING_DIR}/my_data.csv"
}

我没有运行此验证,因为旋转管道很痛苦:(因此请仔细检查命令中的转义。

  • 专业人士:超级简单,无需额外的脚本文件上传到s3
  • 缺点:不完全安全。您的数据库密码将通过网络传输而不加密。

查看刚刚在参数化模板化数据管道上发布的新内容:http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-custom-templates.html。看起来它将允许加密任意参数。

答案 2 :(得分:0)

AWS现在允许合作伙伴近乎实时的RDS - > Redshift插入。

https://aws.amazon.com/blogs/aws/fast-easy-free-sync-rds-to-redshift/