¿Cómo identifico los errores relacionados con la API de datos en Amazon Redshift?

Última actualización: 31-10-2022

¿Cómo identifico el motivo por el que falló una consulta de API de datos en Amazon Redshift?

Resolución

La API de datos de Amazon Redshift es asincrónica, lo que significa que puede ejecutar consultas de larga duración sin tener que esperar a que se complete. Cuando se produce un error en una consulta de la API de datos, el estado de la consulta no se muestra inmediatamente. Para determinar los motivos del error, utilice la acciónDescribeStatement para consultas únicas o múltiples. Para ejecutar DescribeStatement, debe tener el ID de la sentencia.

Consulta única

Para ejecutar una única consulta en el clúster, utilice la acción ExecuteStatement para devolver un ID de la sentencia:

Nota: El siguiente comando de ejemplo utiliza el método de autenticación de AWS Secrets Manager. El comando ejecuta una sentencia SQL en un clúster y devuelve un identificador para obtener los 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

Nota: Si recibe errores mientras ejecuta los comandos de AWS CLI, asegúrese de que está utilizando la versión más reciente de dicha interfaz.

La salida es similar a la siguiente:

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

La sentencia SQL anterior devuelve un ExecuteStatementOutput, que incluye el Id de la sentencia. Puede comprobar el estado de la consulta mediante DescribeStatement e introduciendo el ID de la sentencia:

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

El resultado de DescribeStatement proporciona los siguientes detalles adicionales:

  • RedshiftPid
  • Duración de la consulta
  • Número de filas en
  • Tamaño del conjunto de resultados
  • RedshiftQueryID

La salida es similar a la siguiente:

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

La sección "Error": de la respuesta anterior muestra el error exacto. Cuál en el ejemplo anterior es "ERROR: relation \"test_table\" does not exist".

Consultas múltiples

Para ejecutar varias consultas en el clúster, utilice la acción BatchExecuteStatement para devolver un ID de sentencia:

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

La salida es similar a la siguiente:

{
    "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 obtener el estado de las consultas, utilice DescribeStatement con el ID de la sentencia de la respuesta anterior:

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

La salida es similar a la siguiente:

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

El resultado anterior muestra el estado de todas las subsentencias de una consulta con varias sentencias. La sección "Error": de la respuesta anterior muestra el error exacto de cada subsentencia.

Para solucionar problemas con la API de datos, consulte Solución de problemas de la API de datos de Amazon Redshift.

Supervisión de eventos de la API de datos

Los eventos de la API de datos se pueden supervisar mediante Amazon EventBridge. Esta información se puede enviar a una función de AWS Lambda que esté integrada con Amazon Simple Notification Service (Amazon SNS) para enviar notificaciones. Para obtener más información, consulte Crear una aplicación basada en eventos con AWS Lambda y la API de datos de Amazon Redshift.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?