Salta al contenuto

Come posso identificare gli errori di una query con l'API Data in Amazon Redshift?

4 minuti di lettura
0

Desidero determinare il motivo per cui la mia query con l'API Data di Amazon Redshift ha avuto esito negativo.

Risoluzione

L'API Data di Amazon Redshift è asincrona. Non serve che tu attenda il completamento per eseguire query di lunga durata.

Quando una query ha esito negativo, lo stato della query non viene visualizzato immediatamente. Utilizza l'azione API DescribeStatement per determinare i motivi dell'errore di una o più query.

Query singole

Identifica l'ID dell'istruzione

Per eseguire una singola query su un cluster Amazon Redshift, devi prima ottenere l'ID dell'istruzione.

Per ottenere l'ID di un'istruzione, esegui l'azione API ExecuteStatement. Il seguente esempio di comando esegue l'autenticazione tramite AWS Secrets Manager ed esegue l'istruzione SQL su un 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

Esempio di output:

{
    "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 sezione Id nell'output mostra l'ID dell'istruzione.

Verifica lo stato

Per verificare lo stato della query, utilizza DescribeStatement e inserisci l'ID dell'istruzione.

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

Esempio di output:

{
    "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 sezione Error nell'output mostra l'errore: "ERROR: relation "test_table" does not exist".

Query multiple

Identifica l'ID dell'istruzione

Per eseguire più query su un cluster Amazon Redshift, devi prima ottenere l'ID dell'istruzione.

Per ottenere l'ID di un'istruzione, utilizza l'azione API BatchExecuteStatement. Vedi l'esempio seguente:

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

Esempio di output:

{
    "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 sezione Id nell'output mostra l'ID dell'istruzione.

Verifica lo stato

Per verificare lo stato della query, utilizza DescribeStatement e inserisci l'ID dell'istruzione:

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

Esempio di output:

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

L'output mostra lo stato di ogni singola istruzione SQL all'interno di una query con più istruzioni. La sezione Error nell'output mostra l'errore per ogni istruzione.

Per risolvere i problemi con l'API Data, consulta Risoluzione dei problemi relativi all'API Data di Amazon Redshift.

Nota: gli utenti con lo stesso ruolo AWS Identity and Access Management (AWS IAM) o le stesse autorizzazioni IAM dell'esecutore di un'azione API ExecuteStatement or BatchExecuteStatement possono agire sulla stessa istruzione con DescribeStatement. Se un altro utente desidera agire sulla stessa istruzione SQL, deve assumere il ruolo IAM dell'utente che ha eseguito l'istruzione SQL.

Per ulteriori informazioni, consulta Considerazioni da fare durante la chiamata all'API Data di Amazon Redshift.

Monitoraggio degli eventi dell'API Data

Amazon EventBridge monitora gli eventi dell'API Data. Se invii queste informazioni a una funzione AWS Lambda, la funzione si connette ad Amazon Simple Notification Service (Amazon SNS) per inviare notifiche.

Per ulteriori informazioni, consulta Building an event-driven application with AWS Lambda and the Amazon Redshift Data API (Creazione di un'applicazione basata sugli eventi con AWS Lambda e l'API Data di Amazon Redshift).

AWS UFFICIALEAggiornata 9 mesi fa