8

我正在使用 AWS 数据管道服务将数据从RDS MySql数据库传输到s3,然后再传输到Redshift,效果很好。

但是,我也有一个RDS Postres实例中的数据,我想以相同的方式进行管道传输,但我很难设置 jdbc 连接。如果这不受支持,是否有解决方法?

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

3 回答 3

14

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

  1. 创建 SqlDataNode 类型的数据节点。指定表名并选择查询
  2. 通过指定 RDS 实例 ID(实例 ID 在您的 URL 中,例如 your-instance-id.xxxxx.eu-west-1.rds.amazonaws.com)以及用户名、密码和数据库名称来设置数据库连接。
  3. 创建 S3DataNode 类型的数据节点
  4. 创建一个 Copy 活动并将 SqlDataNode 设置为输入,将 S3DataNode 设置为输出
于 2015-12-06T17:28:54.773 回答
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
  • 缺点:不完全安全。您的数据库密码将通过网络传输而无需加密。

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

于 2014-11-28T17:42:46.183 回答
1

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

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

于 2015-01-22T20:54:05.700 回答