COPY ... FROM LOCAL在控制台上不输出错误

时间:2019-06-13 08:14:56

标签: mysql vertica

COPY .. FROM LOCAL在控制台上不输出错误。 例如:

create table test (col1 INT);

并且我有文件(abc.data)包含要插入表测试的数据,如下所示

1237232632624232
111
222

我使用以下命令将数据插入表中

COPY test from local 'abc.data';

我希望它在控制台上输出错误(溢出)。但是,事实并非如此。我通过使用EXCEPTIONS将错误输出到文件来解决。

您如何知道在控制台上输出错误的方式?预先感谢。

3 个答案:

答案 0 :(得分:2)

默认情况下,Vertica不会在每个坏行上使COPY命令失败。相反,它将错误和不良行写入位于Vertica目录路径下名为CopyErrorLogs的目录中的文件中。

您可以使用EXCEPTIONSREJECTED DATA选项为这些错误文件选择其他位置(就像您一样)。

或者,为方便起见,将错误和不良数据写入表:

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

然后,您可以使用sql分析test_rejected

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))

答案 1 :(得分:0)

如果您希望在拒绝行时复制命令失败并显示错误消息,则可以使用REJECTMAX 1(尽管它不是特定的)。 然后,您可以使用异常和拒绝的数据文件或拒绝的数据表进一步进行调查。

有关文档中有关加载错误的更多信息: https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/AdministratorsGuide/BulkLoadCOPY/CapturingLoadExceptionsAndRejections.htm

答案 2 :(得分:-1)

尝试一下:

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