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.