目前 Glue 不支持为 JDBC 源添加书签。
您可以使用 postactions 选项(Scala 中的代码)在 Glue 作业中实现 upsert/merge into Redshift:
val fields = sourceDf.columns.mkString(",")
glueContext.getJDBCSink(
catalogConnection = "RedshiftConnectionTest",
options = JsonOptions(Map(
"database" -> "conndb",
"dbtable" -> "staging_schema.staging_table",
"postactions" ->
s"""
DELETE FROM dst_schema.dst_table USING staging_schema.staging_table AS S WHERE dst_table.id = S.id;
INSERT INTO dst_schema.dst_table ($fields) SELECT $fields FROM staging_schema.staging_table;
DROP TABLE IF EXISTS staging_schema.staging_table
"""
)),
redshiftTmpDir = tempDir,
transformationContext = "redshift-output"
).writeDynamicFrame(DynamicFrame(sourceDf, glueContext))
如果你只是想删除现有的表,那么你可以使用preactions参数来代替:
glueContext.getJDBCSink(
catalogConnection = "RedshiftConnectionTest",
options = JsonOptions(Map(
"database" -> "conndb",
"dbtable" -> "dst_schema.dst_table",
"preactions" -> "DELETE FROM dst_schema.dst_table"
)),
redshiftTmpDir = tempDir,
transformationContext = "redshift-output"
).writeDynamicFrame(DynamicFrame(sourceDf, glueContext))