Вы не можете обработать этот сценарий, используя блок try-catch, так как это внутренняя ошибка API BQ. Скорее, я бы предложил вам написать политику Retry Transient и установить тип ошибки. Таким образом, вы можете сохранить результат ошибки записи BigQuery в PCollection и затем вывести эту запись как ваш wi sh. Пожалуйста, обратитесь к приведенному ниже фрагменту, чтобы добиться того же.
WriteResult result = formattedData.get(successRows).setCoder(TableRowJsonCoder.of()).apply("BQ SteamingInserts",
BigQueryIO.writeTableRows().withMethod(BigQueryIO.Write.Method.STREAMING_INSERTS)
.to("audit.db_audit")
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
.withFailedInsertRetryPolicy(InsertRetryPolicy.retryTransientErrors()).withoutValidation()
.withExtendedErrorInfo());
Используя приведенный выше фрагмент кода, если что-то не получается из-за операций ddl, данные будут сохранены в WriteResult.
PCollection<String> failedInserts = result.getFailedInsertsWithErr().apply("BQErrorToTableRow",
ParDo.of(new BQErrorToString()));
Вы можете получить неудачная запись с использованием приведенного выше фрагмента кода. Дайте мне знать, если это поможет:)