Ir para o conteúdo

Como identifico erros de consulta da API de dados no Amazon Redshift?

4 minuto de leitura
0

Quero determinar por que minha consulta à API de dados do Amazon Redshift falhou.

Resolução

A API de dados do Amazon Redshift é assíncrona. Você não precisa esperar pela conclusão para executar consultas de longa duração.

Quando uma consulta falha, o status da consulta não é exibido imediatamente. Use a ação da API DescribeStatement para determinar os motivos da falha em uma ou várias consultas.

Consultas únicas

Identifique o ID da declaração

Para executar uma única consulta em um cluster do Amazon Redshift, primeiro obtenha o ID da declaração.

Para obter um ID de instrução, execute a ação da API ExecuteStatement. O comando de exemplo a seguir é autenticado por meio do AWS Secrets Manager e executa sua instrução SQL em um cluster:

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

Exemplo de saída:

{
    "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 seção Id na saída exibe o ID da instrução.

Verifique o status

Para verificar o status da consulta, use DescribeStatement e insira o ID da declaração.

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

Exemplo de saída:

{
    "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 saída mostra o erro: “ERROR: relation "test_table" does not exist”.

Várias consultas

Identifique o ID da declaração

Para executar várias consultas em um cluster do Amazon Redshift, primeiro obtenha o ID da declaração.

Para obter um ID de instrução, use a ação da API BatchExecuteStatement. Veja o exemplo a seguir:

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

Exemplo de saída:

{
    "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"
}

A seção Id na saída exibe o ID da instrução.

Verifique o status

Para verificar o status da consulta, use DescribeStatement e insira o ID da declaração:

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

Exemplo de saída:

{
    "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 exibe o status de cada instrução SQL individual em sua consulta com várias instruções. A seção Error na saída exibe o erro de cada instrução.

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

Observação: usuários com o mesmo perfil do AWS Identity and Access Management (AWS IAM) ou permissões do IAM que o executor de uma operação da API ExecuteStatement ou BatchExecuteStatement podem agir na mesma declaração com DescribeStatement. Se outro usuário quiser agir na mesma instrução SQL, ele deverá assumir o perfil do IAM do usuário que executou a instrução SQL.

Para obter mais informações, consulte Considerações ao chamar a API de dados do Amazon Redshift.

Monitoramento de eventos da API de dados

O Amazon EventBridge monitora eventos da API de dados. Se você enviar essas informações para uma função do AWS Lambda, a função se conectará ao Amazon Simple Notification Service (Amazon SNS) para entregar notificações.

Para obter mais informações, consulte Criação de uma aplicação orientada por eventos com o AWS Lambda e a API de dados do Amazon Redshift.

AWS OFICIALAtualizada há um ano