2

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

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

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

任何帮助深表感谢!

4

2 回答 2

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)

于 2016-07-13T16:22:15.010 回答
2

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

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

在内部,增量要求您提供本质上必须是日期列的更改列,并且此更改列是它们在 Sql 脚本中使用的,如下所示:

select * from #{table} where #{myRDSTableLastModifiedCol} >= '#{format(@scheduledStartTime, 'YYYY-MM-dd HH-mm-ss')}' and #{myRDSTableLastModifiedCol} <= '#{format(@ scheduleEndTime, 'YYYY-MM-dd HH-mm-ss')}'

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

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

是的,删除的数据无法通过数据管道跟踪;如果您的表中没有 datetime 列,datapipleline 也无济于事,在这种情况下,我更喜欢加载完整的表。

我希望我已经涵盖了很多我知道的内容:)

问候, 瓦伦 R

于 2016-06-17T10:19:16.953 回答