У меня есть задача на Snowflake, которая запускает команду копирования с «on_error = continue», поэтому, если какой-либо файл в моей корзине S3 не удастся скопировать, задание не будет немедленно прервано. Однако я также создал «интеграцию ошибок» для этой задачи с AWS/SNS, поэтому SNS будет отправлять электронные письма всякий раз, когда при выполнении этой задачи возникает ошибка. Проблема здесь в том, что если установить «on_error = continue» для команды копирования, задача в конечном итоге будет выполнена успешно, и электронные письма не будут отправлены, даже если один из файлов в моем S3 не удастся скопировать в таблицу назначения. Есть ли какой-нибудь обходной путь, чтобы задача не прерывалась немедленно, когда один из файлов, которые я пытаюсь скопировать, терпит неудачу, и все равно получаю уведомления о каких-либо ошибках?





Я бы порекомендовал вам изучить либо последующую задачу, которая использует функцию VALIDATE() для таблицы, либо запрос _last. Эта функция вернет все записи об ошибках, которые не были загружены как часть исходной функции COPY INTO. Вы можете отправить этот набор результатов по электронной почте в качестве вызова внешней функции... или заставить задачу запустить вызов EXECUTE ALERT, где условие оповещения запрашивает VALIDATE(), а затем действие представляет собой интеграцию уведомлений по электронной почте, подобную той, которую вы уже используете.
Немного легкого чтения, если это не имеет смысла:
https://docs.snowflake.com/en/sql-reference/sql/execute-alert
https://docs.snowflake.com/en/sql-reference/functions/validate
Другой мой совет — зафиксировать выходные данные функции VALIDATE() в таблице. Это позволяет вам исправить записи внутри Snowflake, а затем вручную перенести их в рабочую таблицу, если вы хотите поступить таким образом. Гораздо проще, чем иметь дело с самими файлами.
Извините, я имел в виду интеграцию уведомлений, но действием предупреждения может быть любая функция, поэтому вы можете создать любую внешнюю функцию и использовать ее для отправки сообщения в любую конечную точку.
Понял, спасибо за помощь, Майк.
Спасибо за вашу помощь. Когда вы говорите «интеграция уведомлений по электронной почте, подобная той, которую вы уже используете», вы имеете в виду интеграцию ошибок с SNS или интеграцию уведомлений с SYSTEM$SEND_EMAIL, которая не использует SNS? На данный момент я использую интеграцию ошибок с SNS и настраиваю это на уровне задачи (где вы указываете параметр «интеграция ошибок»).