我的RDS postgres / oracle中有大约30个表(尚未确定它是oracle还是postgres)实例。我想获取在过去4小时内插入/更新的所有记录(可配置),创建与每个表有关的csv文件并将文件存储在S3中。我希望整个过程都是事务性的。如果从一个表中获取数据时出现任何错误,我不希望在S3中保留与其他29个表相关的数据。数据不是很大,每个表中的数据应该是少于100条或更少的记录,持续时间为4小时。
我正在考虑在EMR集群中设置一个Spark作业来从RDS获取数据,为每个表创建一个csv,并在流程结束时将所有文件发布到S3。数据发布到S3后,EMR集群将被销毁。一个cloudwatch触发器将每4小时调用一次lamda,这将启动一个执行此工作的新EMR集群。
有没有其他方法可以探索这种转变?
答案 0 :(得分:1)
查看正在使用EMR的AWS Glue,但您不需要关心基础架构和配置,只需setup crawler和write your ETL job。
请注意,AWS Glue不支持JDBC连接的谓词下推(currently s3 only),因此这意味着它将首先加载整个表,然后才应用过滤。
此外,您应该仔细考虑原子性,因为Glue ETL作业只是简单地处理数据并在没有事务的情况下写入接收器。如果失败,它不会删除部分书面记录,因此您应该自己管理。我会考虑的选择很少:
aws s3 sync
命令将对象移动到最终目的地,或使用TransferManager from AWS SDK复制数据