У меня есть задача на 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, а затем вручную перенести их в рабочую таблицу, если вы хотите поступить таким образом. Гораздо проще, чем иметь дело с самими файлами.