我需要对存储在AWS S3上的文件进行定期批处理ETL作业。
为了不对同一文件进行两次处理,我需要将文件状态保存在某个地方,例如在某些RDBMS中。例如,AWS RDS for PostgreSQL。
例如,我将创建下表:
|file_name | status |
|-----------------------|
|file1.csv | pending |
|file2.json| pending |
在AWS EMR应用程序上Apache Spark的最开始,我将从提到的表中读取所有处于暂挂状态的文件,并将其ETL读取。例如,当file1.csv
的ETL完成时,我需要在PostgreSQL表中将其标记为completed
。像这样:
|file_name | status |
|-----------------------|
|file1.csv | completed |
|file2.json| pending |
AFAIK,Spark不支持JDBC的UPDATE
操作,因此我认为我的系统设计可能有问题。如果是这样,您能否建议如何正确跟踪S3上的已处理文件,以免在新的ETL批处理运行中再次处理它们?