AWS Data管道 - 如何将其用于增量RDS数据更新?

时间:2016-06-17 09:05:18

标签: csv amazon-web-services amazon-s3 amazon-data-pipeline amazon-rds-aurora

我有一种情况,我使用数据管道从S3中存储的csv文件导入数据。对于初始数据加载,数据管道执行良好。

现在我需要使这个数据库保持最新并同步到内部部署数据库。这意味着将有一组CSV文件进入S3,这将是对某些现有记录,新记录或删除的更新。我需要通过数据管道在RDS上进行更新。

问题 - 数据管道是否可以用于此目的,还是仅用于一次性数据加载?如果它可以用于增量更新,那么我该怎么做呢。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

是的,您需要进行更新并插入(也称为upsert)。

如果你有一个包含键的表:key_a,key_b和其他列:col_c,col_d你可以使用以下SQL:

insert into TABLENAME (key_a, key_b, col_c, col_d) values (?,?,?,?) ON DUPLICATE KEY UPDATE col_c=values(col_c), col_d=values(col_d)

答案 1 :(得分:1)

请参阅aws文档:http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-template-incrementalcopyrdstos3.html

有一个用于Mysql RDS增量上传的预定义模板,我个人尝试过从mysql,sql server和redshift增加上传。 您可以从使用mysql模板开始,并在架构视图中对其进行编辑,以深入了解它使用的新/附加fiels,同样也为其他RDS数据库创建数据管道。

增量内部要求您提供需要基本上是日期列的更改列,并且此更改列是在Sql脚本中使用的,如:

从#{table}中选择*其中#{myRDSTableLastModifiedCol}> ='#{format(@sduduledStartTime,'YYYY-MM-dd HH-mm-ss')}'和#{myRDSTableLastModifiedCol}< =' #{format(@scheduledEndTime,'YYYY-MM-dd HH-mm-ss')}'

scheduledStartTime和scheduleEndTime是datapipeline表达式,其值取决于您的计划。 http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-pipeline-expressions.html

和scheduletype是在计划结束时间执行sql的时间序列,以确保没有数据丢失。

是的,删除的数据无法通过datapipeline跟踪;如果你的表中没有datetime列,那么datapipleline也无济于事,在这种情况下,我更愿意加载全表。

我希望我已经覆盖了很多我知道的事情:)。

此致 Varun R