Saltar al contenido

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

4 minutos de lectura
0

Quiero determinar por qué falló mi consulta de la API de datos de Amazon Redshift.

Resolución

La API de datos de Amazon Redshift es asincrónica. No es necesario esperar a que se completen para ejecutar consultas de larga duración.

Cuando se produce un error en una consulta, el estado de la consulta no se muestra inmediatamente. Utiliza la acción de la API DescribeStatement para determinar los motivos del error de una o varias consultas.

Consultas únicas

Identificación del ID de la instrucción

Para ejecutar una única consulta en un clúster de Amazon Redshift, primero obtén el ID de la instrucción.

Para obtener un ID de instrucción, ejecuta la acción de la API ExecuteStatement. El siguiente comando de ejemplo se autentica a través de AWS Secrets Manager y ejecuta la instrucción SQL en un clúster:

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

Resultado de ejemplo:

{
    "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 sección ID del resultado muestra el ID de la instrucción.

Comprobación del estado

Para comprobar el estado de la consulta, utiliza DescribeStatement e introduce el ID de la instrucción.

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

Resultado de ejemplo:

{
    "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 del resultado muestra el error: «ERROR: relation "test_table" does not exist».

Consultas múltiples

Identificación del ID de la instrucción

Para ejecutar varias consultas en un clúster de Amazon Redshift, primero obtén el ID de la instrucción.

Para obtener un ID de instrucción, usa la acción de la API BatchExecuteStatement. Observa el siguiente ejemplo:

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

Resultado de ejemplo:

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

La sección ID del resultado muestra el ID de la instrucción.

Comprobación del estado

Para comprobar el estado de la consulta, utiliza DescribeStatement e introduce el ID de la instrucción:

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

Resultado de ejemplo:

{
    "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 muestra el estado de cada instrucción SQL individual dentro de la consulta de varias instrucciones. La sección Error del resultado muestra el error de cada instrucción.

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

Nota: Los usuarios con el mismo rol de AWS Identity and Access Management (IAM) o permisos de IAM que los que ejecutan una operación de la API ExecuteStatement o BatchExecuteStatement pueden ejecutar la misma instrucción con DescribeStatement. Si otro usuario quiere actuar en la misma instrucción SQL, debe asumir el rol de IAM del usuario que ejecutó la instrucción SQL.

Para obtener más información, consulta Consideraciones al llamar a la API de datos de Amazon Redshift.

Supervisión de los eventos de la API de datos

Amazon EventBridge supervisa los eventos de la API de datos. Si envías esta información a una función de AWS Lambda, la función se conecta a Amazon Simple Notification Service (Amazon SNS) para entregar las notificaciones.

Para obtener más información, consulta Creación de una aplicación basada en eventos con AWS Lambda y la API de datos de Amazon Redshift.

OFICIAL DE AWSActualizada hace 6 meses