RDS 到 S3 - 数据转换 AWS

RDS to S3 - Data Transformation AWS

我的 RDS postgres / oracle(尚未确定它是 oracle 还是 postgres)实例中大约有 30 个 table。我想获取过去 4 小时内插入/更新的所有记录(可配置),创建一个与每个 table 相关的 csv 文件并将文件存储在 S3 中。我希望整个过程都是事务性的。如果从一个 table 获取数据时出现任何错误,我不希望与其他 29 个 table 相关的数据保留在 S3 中。数据不是很大,在 4 小时的持续时间内,每个 table 中的记录应该在 100 条或更少的数量级。

我正在考虑在 EMR 集群中创建一个 spark 作业以从 RDS 获取数据,在流程结束时为每个 table 和 post 所有文件创建一个 csv 到 S3。一旦数据 posted 到 S3,EMR 集群将被销毁。 cloudwatch 触发器将每 4 小时调用一次 lamda,这将启动一个执行此作业的新 EMR 集群。

对于这种转变,是否有任何值得探索的替代方法?

看看AWS Glue which is using EMR under the hood but you don't need to care about infrastructure and configurations, just setup crawler and write your ETL job

请注意,AWS Glue 不支持 JDBC 连接 (currently s3 only) 的谓词下推,因此这意味着它将首先加载整个 table,然后才应用过滤。

您还应该仔细考虑原子性,因为 Glue ETL 作业只是处理数据并写入接收器而无需事务。如果失败,它不会删除部分写入的记录,所以你应该自己管理它。我会考虑几个选项:

  1. 每次执行将数据写入临时文件夹(本地或 s3),然后使用 aws s3 sync command or copy data using TransferManager from AWS SDK
  2. 将对象移动到最终目的地
  3. 将数据写入最终目的地到专用文件夹中,如果失败,请使用 CLI 或 SDK 将其删除