首页 > 解决方案 > COPY ... FROM LOCAL 不会在控制台上输出错误

问题描述

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

create table test (col1 INT);

我有一个文件(abc.data),其中包含要插入到表中的数据,test如下所示

1237232632624232
111
222

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

COPY test from local 'abc.data';

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

你怎么知道在控制台上输出错误的方式?提前致谢。

标签: mysqlvertica

解决方案


默认情况下,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))

推荐阅读