我使用AWS数据管道服务将数据从RDS MySql
数据库管道传输到s3
,然后再传输到Redshift
,效果很好。
然而,我也有数据生活在RDS Postres
实例中,我想以同样的方式进行管道传输,但我很难设置jdbc连接。如果不支持此操作,是否有解决方案?
"connectionString": "jdbc:postgresql://THE_RDS_INSTANCE:5432/THE_DB”
如今,您可以定义一个复制活动,将Postgres RDS实例中的数据提取到S3中。在数据管道接口中:
- 创建SqlDataNode类型的数据节点。指定表名并选择查询
- 通过指定RDS实例ID(实例ID在您的URL中,例如your-instance-ID.xxxxx.eu-west-1.RDS.amazonaws.com)以及用户名、密码和数据库名称来设置数据库连接
- 创建类型为S3DataNode的数据节点
- 创建一个Copy活动,并将SqlDataNode设置为输入,将S3DataNode设置为输出
这还不起作用。aws尚未构建/发布与postgres良好连接的功能。不过,您可以在shell命令活动中执行此操作。您可以编写一些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.看起来它将允许对任意参数进行加密。
AWS现在允许合作伙伴进行近乎实时的RDS->Redshift插入。
https://aws.amazon.com/blogs/aws/fast-easy-free-sync-rds-to-redshift/