COPY ... FROM LOCAL не выводит ошибку на консоль - PullRequest
0 голосов
/ 13 июня 2019

COPY .. FROM LOCAL не выводит ошибку на консоль. Например:

create table test (col1 INT);

и у меня есть файл (abc.data), содержащий данные для вставки теста таблицы, как показано ниже

1237232632624232
111
222

я использовал команду, указанную ниже, чтобы вставить данные в таблицу

COPY test from local 'abc.data';

Я ожидаю, что выводит ошибку (переполнение) на консоль. Однако это не так. Я обошел стороной, используя EXCEPTIONS для вывода ошибки в файл.

Как узнать способ вывода ошибки на консоль? Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 15 июня 2019

По умолчанию Vertica не выполняет команду COPY в каждой плохой строке.Вместо этого Он записывает ошибки и неправильные строки в файлы в каталоге с именем CopyErrorLogs, расположенном в каталоге Vertica.

Вы можете выбрать другое расположение для этих файлов ошибок, используя опции EXCEPTIONS и REJECTED DATA (как вы сделали).

Или, что может быть более удобным, записывать ошибки и неверные данныев таблицу:

COPY test from local 'abc.data' REJECTED DATA as TABLE test_rejected;

Затем вы можете проанализировать test_rejected с помощью sql

dbadmin=> \x
Expanded display is on.
dbadmin=> select * from test_rejected limit 1;
-[ RECORD 1 ]---+------------------------------------------------------------------
file_name       | abc.data
row_number      | 1
rejected_data   | 1237232632624232123243214
rejected_reason | int8 out of range '1237232632624232123243214' for column 1 (col1)

Если вы хотите выполнить команду COPY при каждой неудачеиспользование строки ABORT ON ERROR.например:

dbadmin=> COPY test from local 'abc.data' ABORT ON ERROR;
ERROR 2035:  COPY: Input record 1 has been rejected (int8 out of range '1237232632624232123243214' for column 1 (col1))
0 голосов
/ 13 июня 2019

Вы можете использовать REJECTMAX 1, если хотите, чтобы команда копирования завершилась неудачно с сообщением об ошибке при отклонении строки (хотя это не будет конкретным). Затем вы можете продолжить расследование, используя исключения и файлы отклоненных данных или таблицу отклоненных данных.

Дальнейшее чтение в документации по ошибкам загрузки: https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/AdministratorsGuide/BulkLoadCOPY/CapturingLoadExceptionsAndRejections.htm

0 голосов
/ 13 июня 2019

Попробуйте это:

load data infile 'abc.data' into table test fields terminated by ',';
...