如何对失败的 Amazon Redshift 数据加载进行问题排查?

上次更新时间:2020 年 3 月 25 日

如何对失败的 Amazon Redshift 数据加载进行问题排查?

简短描述

使用 STL_LOAD_ERRORS 表来识别特定加载期间发生的错误。

解决方法

注意:以下步骤使用城市和场地的示例数据集。

1.    在 Amazon Simple Storage Service (Amazon S3) 存储桶中创建名为 venue_pipe0000_part_00 并使用以下内容的原始文件:

7|BMO Field|Toronto|ON|0
16|TD Garden|Boston|MA|0
23|The Palace of Auburn Hills|Auburn Hills|MI|0
28|American Airlines Arena|Miami|FL|0
37|Staples Center|Los Angeles|CA|0
42|FedExForum|Memphis|TN|0
52|PNC Arena|Raleigh|NC  ,25   |0
59|Scotiabank Saddledome|Calgary|AB|0
66|SAP Center|San Jose|CA|0
73|Heinz Field|Pittsburgh|PA|65050

有关更多信息,请参阅从用竖线分隔的文件(默认分隔符)加载 LISTING

2.    创建 master_schema.venue1 表:

CREATE TABLE VENUE1(
VENUEID SMALLINT,
VENUENAME VARCHAR(100),
VENUECITY VARCHAR(30),
VENUESTATE CHAR(2),
VENUESEATS INTEGER
) DISTSTYLE EVEN;

3.     创建加载视图以诊断加载失败:

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);

4.     使用 Copy 命令加载数据: 

master=# copy venue1
master-# from 's3://your_S3_bucket/venue/'
master-# iam_role 'arn:aws:iam::123456789012:role/redshiftcopyfroms3' delimiter '|' ;

注意:请将 your_S3_bucket 替换为您的 S3 存储桶的名称。然后,将 aarn:aws:iam::123456789012:role/redshiftcopyfroms3 替换为您的 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称 (ARN)。有关更多信息,请参阅参数

5.    查询加载视图以显示表的加载详细信息:

master=# select * from loadview where table_name='venue1';
tbl | 265190
table_name | venue1
query | 5790
starttime | 2017-07-03 11:54:22.864584
input | s3://
your_S3_bucket/venue/venue_pipe0000_part_00
line_number | 7
colname | venuestate
err_code | 1204
reason | Char length exceeds DDL length

注意:标准用户在查询查询 STL_LOAD_ERRORS 表时只能查看自己的数据。要查看所有表数据,您必须是超级用户

此查询的输出包含以下重要信息:

  • 导致错误的文件。
  • 导致错误的列。
  • 输入文件中的行号。
  • 异常的原因。

在上述示例中,异常由长度值引起,该值必须添加到 venuestate 列。( NC ,25 |) 值超出了 VENUESTATE CHAR(2) DDL 中定义的长度。要解决此问题,请将文件修改为使用正确的值:

7|BMO Field|Toronto|ON|0
16|TD Garden|Boston|MA|0
23|The Palace of Auburn Hills|Auburn Hills|MI|0
28|American Airlines Arena|Miami|FL|0
37|Staples Center|Los Angeles|CA|0
42|FedExForum|Memphis|TN|0
52|PNC Arena|Raleigh|NC|0
59|Scotiabank Saddledome|Calgary|AB|0
66|SAP Center|San Jose|CA|0
73|Heinz Field|Pittsburgh|PA|65050

6.     重新加载数据负载:

master=# copy venue1
from 's3://your_S3_bucket/sales/'
iam_role 'arn:aws:iam::123456789012:role/redshiftcopyfroms3' delimiter '|' ;
INFO:  Load into table 'venue1' completed, 808 record(s) loaded successfully.

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?