GlueのジョブでDynamicFrameを使ってデータをRDSに書き込むとき、
追記(Append)で書き込むため、同じジョブを動かすとデータが重複してしまいます。
DynamicFrameをDataFrameに変換すると、上書きモードで書き込むことができます。
自動生成されたジョブのコードに以下を追記します。
JDBCの接続定義が用意されてることが前提です。
#datasink4 = glueContext.write_dynamic_frame.from_jdbc_conf(frame = dropnullfields3, catalog_connection = "MyConnection", connection_options = {"dbtable": "my_table", "database": "my_database"}, transformation_ctx = "datasink4")
# 接続定義からJDBC情報を取得
jdbc_conf = glueContext.extract_jdbc_conf(connection_name='MyConnection')
# DynamicFrameをDataFrameに変換
df = dropnullfields3.toDF()
# DataFrameをテーブルに書き込み(上書きモード)
df.write \
.format("jdbc") \
.option("url", jdbc_conf['url']) \
.option("dbtable", "my_database.my_table") \
.option("user", jdbc_conf['user']) \
.option("password", jdbc_conf['password']) \
.mode("overwrite") \
.save()
job.commit()
例では、S3のデータをAurora Serverless MySQLに書き込んでいますが上書きできました。