COPY 拒绝数据和异常文件
当执行 COPY
语句并且并行处理为 ON(默认设置)时,COPY 创建单独的线程来处理加载文件。通常,线程的数量取决于系统中节点核心的数量。每个节点处理部分加载数据。如果加载总体成功,在加载处理期间发生的所有解析器拒绝都会写入到该节点的特定拒绝数据以及异常文件中。如果加载失败,则拒绝数据文件内容可能不完整或为空。如果您未明确指定文件名,则 COPY 会对拒绝数据文件使用默认名称和位置。请参阅下一个主题以指定您自己的拒绝数据和异常文件。
拒绝数据和异常文件都会保存并存储在每个节点上。此示例将多个文件用作 COPY
输入。由于语句不包括 REJECTED DATA
或 EXCEPTIONS
参数,拒绝数据和异常文件都会写入每个节点的默认位置,即数据库编录子目录 CopyErrorLogs
:
\set dir `pwd`/data/ \set remote_dir /vertica/test_dev/tmp_ms/
\set file1 '''':dir'C1_large_tbl.dat'''
\set file2 '''':dir'C2_large_tbl.dat'''
\set file3 '''':remote_dir'C3_large_tbl.dat'''
\set file4 '''':remote_dir'C4_large_tbl.dat'''
=>COPY large_tbl FROM :file1 ON site01,:file2 ON site01,
:file3 ON site02,
:file4 ON site02
DELIMITER '|';
指定拒绝的数据和异常文件
使用可选的 COPY
REJECTED DATA
和 EXCEPTIONS
参数 'path'
元素可以指定用来存储文件的非默认路径。
如果 path 解析到存储位置,并且调用 COPY 的用户不是超级用户,则需要以下权限:
-
必须已使用 USER 选项创建(或更改)存储位置(请参阅 CREATE LOCATION 和 ALTER_LOCATION_USE)。
-
用户必须已被授予文件存储位置的 READ 访问权限,如下所述 GRANT(存储位置)
两个参数也具有可使用指定路径的可选 ON
nodename 子句:
...[ EXCEPTIONS 'path' [ ON nodename ] [, ...] ]...[ REJECTED DATA 'path' [ ON nodename ] [, ...] ]
使用 'path' 指定拒绝数据和异常文件(及其相应的参数)的位置时,可选的 ON
nodename 子句会将节点上的任何现有拒绝数据和异常文件移动到同一个节点上的指定路径。
将拒绝数据和异常文件保存到单个服务器
在 COPY
处理完成后,COPY
语句并无可合并异常和拒绝数据文件的功能。查看异常和拒绝数据文件的内容时,需要访问每个节点的特定文件。
注意
要将所有异常和拒绝数据文件保存到一个网络主机上,请确保为每个节点的文件提供唯一名称,以便不同的群集节点不会覆盖其他节点的文件。例如,如果为服务器设置了两个目录(/vertica/exceptions
和 /vertica/rejections
),请为每个 Vertica 群集节点指定文件名以标识每个节点,例如 node01_exceptions.txt
和 node02_exceptions.txt
。这样,每个群集节点的文件在异常和拒绝目录中很容易区分。
将 VSQL 变量用于拒绝数据和异常文件
此示例使用了 vsql
变量来指定要与 exceptions
及 rejected data
参数(except_s1
和 reject_s1
)一起使用的路径和文件名。COPY
语句在启动程序节点上指定了单个输入文件 (large_tbl
):
\set dir `pwd`/data/ \set file1 '''':dir'C1_large_tbl.dat'''
\set except_s1 '''':dir'exceptions'''
\set reject_s1 '''':dir'rejections'''
COPY large_tbl FROM :file1 ON site01 DELIMITER '|'
REJECTED DATA :reject_s1 ON site01
EXCEPTIONS :except_s1 ON site01;
此示例使用变量指定了远程节点上的异常和拒绝数据文件(except_s2
和 reject_s2
)。COPY 语句包含远程节点上的单个输入文件 (site02
):
\set remote_dir /vertica/test_dev/tmp_ms/\set except_s2 '''':remote_dir'exceptions'''
\set reject_s2 '''':remote_dir'rejections'''
COPY large_tbl FROM :file1 ON site02 DELIMITER '|'
REJECTED DATA :reject_s2 ON site02
EXCEPTIONS :except_s2 ON site02;
此示例使用变量来指定异常和拒绝数据文件位于远程节点上(由 :remote_dir
指示)。COPY 语句的输入包括两个节点(site01
和 site02
)上的多个数据文件。exceptions
和 rejected data
选项使用了具有变量的
ON nodename
子句来指示文件的驻留位置(site01
和 site02
):
\set dir `pwd`/data/ \set remote_dir /vertica/test_dev/tmp_ms/
\set except_s1 '''':dir''''
\set reject_s1 '''':dir''''
\set except_s2 '''':remote_dir''''
\set reject_s2 '''':remote_dir''''
COPY large_tbl FROM :file1 ON site01,
:file2 ON site01,
:file3 ON site02,
:file4 ON site02
DELIMITER '|'
REJECTED DATA :reject_s1 ON site01, :reject_s2 ON site02
EXCEPTIONS :except_s1 ON site01, :except_s2 ON site02;