COPY LOCAL 拒绝和异常文件
调用 COPY LOCAL(或 COPY LOCAL FROM STDIN)不会自动创建已拒绝的数据和异常文件。此行为与使用 COPY 不同,使用 COPY 将自动保存两种文件,而不管是否使用可选 REJECTED DATA
和 EXCEPTIONS
参数显式指定任一文件。
将 REJECTED DATA
和 EXCEPTIONS
参数与 COPY LOCAL 和 COPY LOCAL FROM STDIN 结合使用,可将相应输出文件保存到客户端。如果不使用这些选项,则不会保留已拒绝的数据解析事件(以及描述这些内容的异常文件),即使发生这些事件。
可以使用 COPY LOCAL(或 COPY LOCAL FROM STDIN)加载多个输入文件。如果还使用 REJECTED DATA
和 EXCEPTIONS
选项,该语句会将已拒绝的行和异常写入不同文件。各个文件中分别包含所有已拒绝的行和相应异常,而不管加载了多少输入文件。
如果 COPY LOCAL 不拒绝任何行,则不会创建任何一个文件。
注意
由于 COPY LOCAL(和 COPY LOCAL FROM STDIN)必须将任何已拒绝的行和异常写入客户端,因此不能使用具有rejected data
或 exceptions
选项的 [ON nodename ]
子句。
指定拒绝的数据和异常文件
若要将任何已拒绝的数据及异常保存到文件中:
-
在 COPY LOCAL(和 COPY LOCAL FROM STDIN)语句中,分别使用
REJECTED DATA 'path'
和EXCEPTIONS 'path'
参数。 -
为这两个选项指定两个不同的文件名。不能为
REJECTED DATA
和EXCEPTIONS
使用一个文件。 -
调用 COPY LOCAL 或 COPY LOCAL FROM STDIN 时,指定的文件无需预先存在。如果预先存在,COPY LOCAL 必须能够覆盖这些文件。
可以通过 vsql 变量指定路径和文件名:
\set rejected ../except_reject/copyLocal.rejected
\set exceptions ../except_reject/copyLocal.exceptions
注意
使用COPY LOCAL
时不支持将已拒绝的数据存储到表中,而使用 COPY
语句时可以。
使用 COPY LOCAL 或 COPY LOCAL FROM STDIN 语句时,使用相应参数为文件指定变量名称:
=> COPY large_tbl FROM LOCAL rejected data :rejected exceptions :exceptions;
=> COPY large_tbl FROM LOCAL STDIN rejected data :rejected exceptions :exceptions;