我有一种情况,我使用数据管道从S3中存储的csv文件导入数据。对于初始数据加载,数据管道执行良好。
现在我需要使这个数据库保持最新并同步到内部部署数据库。这意味着将有一组CSV文件进入S3,这将是对某些现有记录,新记录或删除的更新。我需要通过数据管道在RDS上进行更新。
问题 - 数据管道是否可以用于此目的,还是仅用于一次性数据加载?如果它可以用于增量更新,那么我该怎么做呢。
非常感谢任何帮助!
答案 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)
有一个用于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