Перезаписать Mysql таблицу с помощью клеевого соединения и свечи scala - PullRequest
1 голос
/ 09 февраля 2020

возможно ли предварительно сформировать запросы предварительной реакции в aws задании соединения с помощью предварительно определенного соединения? или как перезаписать данные в таблице mysql с помощью glueContext.getJDBCSink?

код, который я пытаюсь выполнить,

val datasink4 = glueContext.getJDBCSink(
catalogConnection = "xxxxx_mysql",
options = JsonOptions(
"""{"dbtable": "xxxxx.role_code_se", 
"database": "xxxxx", 
"preactions": "TRUNCATE TABLE xxxxx.role_code_se;", 
"overwrite": "true"}"""
), 
redshiftTmpDir = "", transformationContext = "datasink4"
).writeDynamicFrame(new_dynamic_frame)

, но он не работает. он игнорирует параметры перезаписи и усечения и выдает ошибку

java. sql .BatchUpdateException: дублирующаяся запись '31' для ключа 'ix_role_code_se_role_code' в

1 Ответ

0 голосов
/ 09 февраля 2020

Клей разрешает только преакции и пост-операции с красным смещением, но не для других баз данных. Если вы хотите перезаписать таблицу, затем преобразовать динамический кадр в информационный, а затем использовать что-то вроде следующего:

df.write.option("truncate", "true").jdbc(url=DATABASE_URL, table=DATABASE_TABLE, mode="overwrite", properties=DATABASE_PROPERTIES)

См. это чтобы узнать больше о параметрах spark jdb c и this для образцов.

...