2013-08-08 3 views
3

Для Amazon RedShift обычно данные загружаются с S3 с помощью команды «copy». Я хочу знать, является ли команда атомарной или нет. Например. возможно ли, что в некоторых исключительных случаях только часть файла данных загружается в таблицу RedShift?Является ли команда 'copy' в Amazon RedShift атомарной или нет?

ответ

5

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

Если вы хотите пропустить недопустимые строки и не останавливать транзакцию, вы можете использовать опцию MAXERROR для команды COPY, которая игнорирует недопустимые строки. Вот пример, который игнорирует до 100 недопустимых строк.

COPY table_name from 's3://[bucket-name]/[file-path or prefix]' CREDENTIALS 'aws_access_key_id=xxxx;aws_secret_access_key=xxxx' DELIMITER '\t' MAXERROR 100; 

Если число недействительных строк больше, чем MAXERROR подсчета ошибок (100), то сделка будет rollbacked.

Для получения дополнительной информации о команде COPY, см. Следующую ссылку. http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html

2

Вы можете использовать флаг NOLOAD, чтобы проверить наличие ошибок перед загрузкой данных. Это более быстрый способ проверки формата ваших данных, поскольку он не пытается загрузить какие-либо данные, просто проанализируйте его.

Вы можете определить, сколько ошибок вы готовы мириться с MAXERROR флагом

Если у вас есть больше, чем MAXERROR счет, ваш груз будет терпеть неудачу, и запись не добавляется.

Смотреть больше информации здесь: http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html

+0

Вы имеете в виду, что часть записей не может быть загружена даже при возникновении ошибки? – ciphor

+1

Если количество ошибок меньше MAXERROR, остальные будут скопированы правильно – Guy

Смежные вопросы