Hi Dulce, This functionality is not supported by the JDBCOutputFormat. Some database systems (AFAIK, MySQL) support Upsert writes, i.e., writes that insert if the primary key is not present or update the row if the PK exists. Not sure if that would meet your requirements.
If you don't want to go with Upserts or if your DBMS doesn't support them in a single statement, you'd have to implement your own output format. You can of course use the JDBCOutputFormat as a starting point and adjust it to your needs. Best, Fabian 2018-06-18 23:38 GMT+02:00 Dulce Morim <dulce.mo...@i2s.pt>: > Hello, > > I'm trying catch a BatchUpdateException when insert DataSet using a method > output. Because, I need control if insert a duplicate key. How I can do > this? > > > > [2018-06-18 22:18:56,419] INFO DataSink (org.apache.flink.api.java.io. > jdbc.JDBCOutputFormat@64aad6db) (1/1) (00a77c9e18f893cde9c62a3c9ca5c471) > switched from RUNNING to FAILED. (org.apache.flink.runtime. > executiongraph.ExecutionGraph) > java.lang.IllegalArgumentException: writeRecord() failed > at org.apache.flink.api.java.io.jdbc.JDBCOutputFormat. > writeRecord(JDBCOutputFormat.java:209) > at org.apache.flink.api.java.io.jdbc.JDBCOutputFormat. > writeRecord(JDBCOutputFormat.java:41) > at org.apache.flink.runtime.operators.DataSinkTask.invoke( > DataSinkTask.java:194) > at org.apache.flink.runtime.taskmanager.Task.run(Task.java:702) > at java.lang.Thread.run(Thread.java:748) > Caused by: java.sql.BatchUpdateException: Violation of PRIMARY KEY > constraint 'TEST_PK'. Cannot insert duplicate key in object 'TEST'. The > duplicate key value is (371855553). > at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement. > executeBatch(SQLServerPreparedStatement.java:2303) > at org.apache.flink.api.java.io.jdbc.JDBCOutputFormat. > writeRecord(JDBCOutputFormat.java:205) > ... 4 more > > > Only have a generic exception: > org.apache.flink.runtime.client.JobExecutionException: Job execution > failed. > > > Thanks, > Dulce Morim >