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 时,它将显示数据行中每列的错误原因,这只是意味着该行中发生了错误。结果中的最后一行是发生解析错误的实际列。