保存加载拒绝 (REJECTED DATA)

COPY 加载拒绝是由于解析器出现异常或者出现转换错误而未加载的数据行。默认情况下,如果您未指定包含拒绝数据的文件,则 COPY 会将包含拒绝数据的文件保存到以下位置:

catalog_dir/CopyErrorLogs/target_table-source-copy-from-rejected-data.n

将拒绝的数据保存到默认位置或所选位置,可以让您查看文件内容、解决问题以及从包含拒绝数据的文件中重新加载数据。将拒绝的数据保存到某个表中后,您可以查询该表以查看拒绝的数据行以及无法解析行的原因(异常)。Vertica 建议将拒绝的数据保存到表中。

多个包含拒绝数据的文件

除非加载非常小 (< 10 MB),否则 COPY 会创建多个文件来保存拒绝的行。决定 COPY 为拒绝的数据创建的文件数有几个因素。以下是其中一些因素:

  • 正在加载的源数

  • 拒绝的行总数

  • 源文件(或多个文件)的大小

  • 协作解析和正在使用的线程数

  • 支持分摊加载的 UDL

  • 对于您自己的 COPY 解析器,从 prepareUDSources() 返回的对象数

拒绝文件的命名约定

您可以使用正在加载的文件指定一个或多个包含拒绝数据的文件。使用 REJECTED DATA 参数指定文件位置和名称,并用逗号 (,) 分隔包含连续拒绝数据的文件名。请勿使用 ON ANY NODE 选项,因为它仅适用于加载文件。

如果指定一个或多个文件,并且 COPY 需要多个文件来存储拒绝的数据,则 COPY 使用您提供的拒绝数据文件名作为前缀,并为每个包含拒绝数据的文件附加数字后缀。例如,如果为 REJECTED_DATA 参数指定名称 my_rejects,并且您正在加载的文件足够大 (> 10 MB),则会存在如下几个文件:

  • my_rejects-1

  • my_rejects-2

  • my_rejects-3

COPY 默认使用协作解析,可让节点解析文件内容的特定部分。根据文件或部分的大小,每个线程会为每个源文件或部分至少生成一个包含拒绝数据的文件,并将加载结果返回给启动程序节点。当 COPY 使用多个线程(.1、.2、.3 等)时,文件后缀是线程索引。

要使每个线程能够解析任何部分,拒绝的最大数据文件数量不能大于正在加载的源数量。最大线程数由资源池决定。对于协作解析,请使用所有可用线程。

如果将 COPY 与支持分摊加载的 UDL 结合使用,则文件后缀是偏移量值。支持分摊加载的 UDL 使得协作解析变得没有必要。对于分摊加载,COPY 会为每个数据部分至少创建一个拒绝文件,并根据加载大小和拒绝的行数来创建更多文件。

对于除 COPY LOCAL 以外的所有数据加载,COPY 的行为如下所示:

文件名的最大长度

在一个语句中加载多个输入文件时,需要为每个文件指定完整的路径名称。请牢记,将较长的输入文件名与拒绝数据文件名组合使用可能会超出操作系统的最大长度(通常为 255 个字符)。若要解决文件名超出最大长度的问题,请使用一个与默认路径不同的拒绝数据文件路径,例如 \tmp\\<shorter-file-name>