Para usar a tabela STL_LOAD_ERRORS para identificar erros de carregamento de dados, realize as seguintes etapas:
-
Verifique os dados em seu arquivo simples de amostra e confirme se os dados de origem são válidos:
7|BMO Field|Toronto|ON|016|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
No exemplo anterior do arquivo demo.txt, um caractere de barra separa os cinco campos que são usados. Para obter mais informações, consulte Carregar LISTING de um arquivo delimitado por barras (delimitador padrão).
-
Abra o console do Amazon Redshift.
-
Use a linguagem de definição de dados (DDL) a seguir para criar uma tabela de amostra:
CREATE TABLE VENUE1(VENUEID SMALLINT,
VENUENAME VARCHAR(100),
VENUECITY VARCHAR(30),
VENUESTATE CHAR(2),
VENUESEATS INTEGER
) DISTSTYLE EVEN;
-
Para identificar a causa do erro de carregamento de dados, crie uma exibição para visualizar as colunas relevantes da tabela STL_LOAD_ERRORS:
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);
-
Execute o comando COPY para carregar os dados:
copy Demofrom 's3://your_S3_bucket/venue/'
iam_role 'arn:aws:iam::123456789012:role/redshiftcopyfroms3'
delimiter '|' ;
Observação: substitua your_S3_bucket pelo nome do seu bucket do S3 e arn:aws:iam::123456789012:role/redshiftcopyfroms3 pelo ARN do seu perfil do AWS Identity and Access Management (IAM). O perfil do IAM deve ter permissões para acessar dados do seu bucket do S3. Para obter mais informações, consulte Parâmetros.
-
Para exibir e analisar os detalhes do erro de carregamento da tabela, consulte a visualização de carregamento:
testdb=# 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
No exemplo anterior, a exceção é causada pelo valor do comprimento e deve ser adicionada à coluna venuestate. O valor (NC ,25 |) é maior do que o comprimento definido no DDL VENUESTATE CHAR (2).
Para resolver esse problema, realize uma das seguintes tarefas:
Se for esperado que os dados excedam o comprimento definido da coluna, atualize a definição da tabela para modificar o comprimento da coluna.
-ou-
Se os dados não estiverem corretamente formatados ou transformados, modifique os dados no arquivo para usar o valor correto.
A saída da consulta inclui as seguintes informações:
O arquivo que causa o erro
A coluna que causa o erro
O número da linha no arquivo de entrada
O motivo da exceção
-
Modifique os dados do arquivo de carregamento para usar os valores corretos:
7|BMO Field|Toronto|ON|016|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
Observação: o comprimento deve estar alinhado com o comprimento definido da coluna.
-
Recarregue o carregamento de dados:
testdb=# copy Demofrom '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.
Observação: a tabela STL_LOAD_ERRORS pode conter somente um número limitado de logs, por aproximadamente 4 a 5 dias. Os usuários padrão podem visualizar apenas seus próprios dados quando consultam a tabela STL_LOAD_ERRORS. É preciso ser um superusuário para visualizar todos os dados da tabela.