Como identifico erros relacionados à API Data no Amazon Redshift?

Data da última atualização: 31/10/2022

Como identificar por que uma consulta da API Data no Amazon Redshift falhou?

Resolução

A API Data do Amazon Redshift é assíncrona, o que significa que você pode executar consultas de longa duração sem precisar esperar que elas sejam concluídas. Quando uma consulta da API Data falha, o status dessa consulta não é exibido imediatamente. Para determinar os motivos da falha, use a ação DescribeStatement para uma ou várias consultas. Para executar DescribeStatement, você deve ter o ID da instrução.

Consulta única

Para executar uma única consulta no cluster, use a ação ExecuteStatement para retornar um ID de instrução:

Observação: o comando de exemplo a seguir usa o método de autenticação do AWS Secrets Manager. O comando executa uma instrução SQL em um cluster e retorna um identificador para obter os resultados.

aws redshift-data execute-statement
    --region us-east-1
    --secret arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn
    --cluster-identifier redshift-cluster-1
    --sql "select * from test_table;"
    --database dev

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar utilizando a versão mais recente da AWS CLI.

A saída é semelhante à seguinte:

{
    "ClusterIdentifier": "redshift-cluster-1",
    "CreatedAt": "2022-09-16T12:22:31.894000+05:30",
    "Database": "dev",
    "Id": "458c568d-717b-4f36-90bd-e642bfb06cbf",
    "SecretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn"
}

A instrução SQL anterior retorna um ExecuteStatementOutput, que inclui a instrução Id. Você pode verificar o status da consulta usando DescribeStatement e inserindo o ID da instrução:

aws redshift-data describe-statement --id 458c568d-717b-4f36-90bd-e642bfb06cbf

A saída para DescribeStatement fornece os seguintes detalhes adicionais:

  • RedshiftPid
  • Duração da consulta
  • Número de linhas em
  • Tamanho do conjunto de resultados
  • RedshiftQueryID

A saída é semelhante à seguinte:

{
    "ClusterIdentifier": "redshift-cluster-1",
    "CreatedAt": "2022-09-16T12:22:31.894000+05:30",
    "Duration": -1,
    "Error": "ERROR: relation \"test_table\" does not exist",
    "HasResultSet": false,
    "Id": "458c568d-717b-4f36-90bd-e642bfb06cbf",
    "QueryString": "select * from test_table;",
    "RedshiftPid": 1074727629,
    "RedshiftQueryId": -1,
    "ResultRows": -1,<
    "ResultSize": -1,
    "SecretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn",
    "Status": "FAILED",
    "UpdatedAt": "2022-09-16T12:22:32.365000+05:30"
}

A seção "Error": na resposta anterior mostra o erro exato. Que no exemplo anterior é "ERROR: relation \"test_table\" does not exist".

Várias consultas

Para executar várias consultas no cluster, use a ação BatchExecuteStatement para retornar um ID de instrução:

aws redshift-data batch-execute-statement
    --region us-east-1
    --secret-arn arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn     --cluster-identifier redshift-cluster-1
        --database dev
    --sqls "select * from test_table;" "select * from another_table;"

A saída é semelhante à seguinte:

{
    "ClusterIdentifier": "redshift-cluster-1",
    "CreatedAt": "2022-09-16T12:37:16.707000+05:30",
    "Database": "dev",
    "Id": "08b4b917-9faf-498a-964f-e82a5959d1cb",
    "SecretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn"
}

Para obter o status das consultas, use DescribeStatement com o ID da instrução da resposta anterior:

aws redshift-data describe-statement --id 08b4b917-9faf-498a-964f-e82a5959d1cb

A saída é semelhante à seguinte:

{
    "ClusterIdentifier ": "redshift-cluster-1 ",
    "CreatedAt ": "2022-09-16T12:37:16.707000+05:30 ",
    "Duration ": 0,
    "Error ": "Query #1 failed with ERROR: relation \ "test_table\"
does not exist ",
    "HasResultSet ": false,
    "Id ": "08b4b917-9faf-498a-964f-e82a5959d1cb ",
    "RedshiftPid ": 1074705048,
    "RedshiftQueryId ": 0,
    "ResultRows ":-1,
    "ResultSize ": -1,
    "SecretArn ": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn ",
    "Status ": "FAILED ",
    "SubStatements ": [
        {
            "CreatedAt ": "2022-09-16T12:37:16.905000+05:30 ",
            "Duration ": -1,
            "Error ": "ERROR: relation \ "test_table\" does not exist ",
            "HasResultSet ": false,
            "Id ": "08b4b917-9faf-498a-964f-e82a5959d1cb:1",
            "QueryString ": "select * from test_table; ",
            "RedshiftQueryId ": -1,
            "ResultRows ": -1,
            "ResultSize ": -1,
            "Status ": "FAILED ",
            "UpdatedAt ": "2022-09-16T12:37:17.263000+05:30 "
        },
        {
            "CreatedAt ": "2022-09-16T12:37:16.905000+05:30",
            "Duration ": -1,
            "Error ": "Connection or an prior query failed. ",
            "HasResultSet ": false,
            "Id ": "08b4b917-9faf-498a-964f-e82a5959d1cb:2 ",
            "QueryString ": "select * from another_table;",
            "RedshiftQueryId ": 0,
            "ResultRows ": -1,
            "ResultSize": -1,
            "Status ": "ABORTED ",
            "UpdatedAt ": "2022-09-16T12:37:17.263000+05:30 "
        }
    ],
    "UpdatedAt ": "2022-09-16T12:37:17.288000+05:30 "
}

A saída anterior exibe o status de todas as subinstruções de uma consulta com várias instruções. A seção "Error": na resposta anterior mostra o erro exato de cada subinstrução.

Para solucionar problemas com a API Data, consulte Solução de problemas com a API Data do Amazon Redshift.

Monitorar eventos da API Data

Eventos da API Data podem ser monitorados usando o Amazon EventBridge. Essas informações podem ser enviadas a uma função do AWS Lambda integrada ao Amazon Simple Notification Service (Amazon SNS) para enviar notificações. Para obter mais informações, consulte Criar uma aplicação orientada a eventos com o AWS Lambda e a API Data do Amazon Redshift.


Este artigo foi útil?


Precisa de ajuda com faturamento ou suporte técnico?