STL_LOADERROR_DETAIL - Amazon Redshift

STL_LOADERROR_DETAIL

显示使用 COPY 命令加载表时发生的数据解析错误的日志记录。为了节省磁盘空间,对于每个加载操作,每个节点切片最多记录 20 个错误。

在将数据行中的某个字段加载到表时,如果 Amazon Redshift 无法解析该字段,则会发生解析错误。例如,如果表列应为整数数据类型,而且数据文件包含该字段中的字母字符串,则它会导致解析错误。

在您查询 STL_LOAD_ERRORS 以了解有关错误的一般信息之后,请查询 STL_LOADERROR_DETAIL 以获取其他详细信息,如发生解析错误的准确的数据行和列。

STL_LOADERROR_DETAIL 视图包含所有数据列,其中包括解析错误发生的列及其之前的列。使用 VALUE 字段来查看实际已在此列(包括在发生此错误之前已正确解析的列)中解析的数据值。

此视图对所有用户可见。超级用户可以查看所有行;普通用户只能查看其自己的数据。有关更多信息,请参阅 系统表和视图中的数据可见性

注意

STL_LOADERROR_DETAIL 仅包含在主集群上运行的查询。它不包含在并发扩展集群上运行的查询。要访问在主集群和并发扩展集群上运行的查询,我们建议您使用 SYS 监控视图 SYS_LOAD_ERROR_DETAIL。SYS 监控视图中的数据经过格式化处理,便于使用和理解。

表列

列名称 数据类型 描述
userid integer 生成该条目的用户 ID。
slice integer 发生错误的切片。
session integer 执行加载的会话的会话 ID。
query integer 查询 ID。查询列可用于连接其他系统表和视图。
filename character(256) 加载的输入文件的完整路径。
line_number bigint 加载文件中的错误所在的行号。
field integer 存在错误的字段。
colname character(1024) 列名称。
character(1024) 字段的已解析数据值。(可能已被截断。) 加载数据中的多字节字符替换为句点。
is_null integer 解析的值是否为 null。
type character(10) 字段的数据类型。
col_length character(10) 列长度(如果适用)。当数据类型具有限制长度时填充此字段。例如,对于数据类型为“character(3)”的列,此列将包含值“3”。

示例查询

以下查询将 STL_LOAD_ERRORS 联接到 STL_LOADERROR_DETAIL 以查看加载 EVENT 表(表 ID 为 100133)时发生的解析错误的详细信息:

select d.query, d.line_number, d.value, le.raw_line, le.err_reason from stl_loaderror_detail d, stl_load_errors le where d.query = le.query and tbl = 100133;

以下示例输出显示已加载成功的列,包括存在错误的列。在此示例中,在第三个列中发生解析错误之前已成功加载两个列,第三个列中应为整数的字段不正确地解析为了字符串。由于该字段应为整数,因此它将字符串“aaa”(未初始化的数据)解析为了 null 并生成了解析错误。输出显示原始值、解析的值和错误原因:

query | line_number | value | raw_line | err_reason -------+-------------+-------+----------+---------------- 4 | 3 | 1201 | 1201 | Invalid digit 4 | 3 | 126 | 126 | Invalid digit 4 | 3 | | aaa | Invalid digit (3 rows)

当查询联接 STL_LOAD_ERRORS 和 STL_LOADERROR_DETAIL 时,它将显示数据行中每列的错误原因,这只是意味着该行中发生了错误。结果中的最后一行是发生解析错误的实际列。