用于解决数据加载问题的系统表
以下 Amazon Redshift 系统表可能有助于排查数据加载问题:
-
查询 STL_LOAD_ERRORS 以发现在特定加载期间发生的错误。
-
查询 STL_FILE_SCAN 以查看特定文件的加载时间或了解是否甚至读取了某个特定文件。
-
查询 STL_S3CLIENT_ERROR 以查找有关从 Amazon S3 传输数据时遇到的错误的详细信息。
查找和诊断加载错误
-
创建视图或定义返回有关加载错误的详细信息的查询。以下示例将 STL_LOAD_ERRORS 表联接到 STV_TBL_PERM 表以将表 ID 与实际表名称进行匹配。
create view loadview as (select distinct tbl, trim(name) as table_name, query, starttime, trim(filename) as input, line_number, colname, err_code, trim(err_reason) as reason from stl_load_errors sl, stv_tbl_perm sp where sl.tbl = sp.id);
-
将 COPY 命令中的 MAXERRORS 选项设置为足够大的值,以使 COPY 能够返回有关您的数据的有用值。如果 COPY 遇到错误,则会出现一条错误消息,指示您参阅 STL_LOAD_ERRORS 表以了解详细信息。
-
查询 LOADVIEW 视图以查看错误详细信息。例如:
select * from loadview where table_name='venue';
tbl | table_name | query | starttime --------+------------+-------+---------------------------- 100551 | venue | 20974 | 2013-01-29 19:05:58.365391 | input | line_number | colname | err_code | reason +----------------+-------------+---------+----------+-------------------- | venue_pipe.txt | 1 | 0 | 1214 | Delimiter not found
-
根据视图返回的信息修复输入文件或加载脚本中的问题。要观察的一些典型加载错误包括:
-
表中的数据类型与输入数据字段中的值不匹配。
-
表中的列数与输入数据中的字段数不匹配。
-
引号不匹配。Amazon Redshift 支持单引号和双引号;但是,必须适当平衡这些引号。
-
输入文件中的日期/时间数据的格式不正确。
-
输入文件中的值超出范围(对于数字列)。
-
某个列的不同值的数量超出了对其压缩编码的限制。
-