Come posso identificare gli errori relativi alle API dati in Amazon Redshift?

4 minuti di lettura
0

Come posso identificare il motivo per cui una query delle API dati in Amazon Redshift non è riuscita?

Risoluzione

L'API dati di Amazon Redshift è asincrona, il che significa che puoi eseguire query di lunga durata senza doverne attendere il completamento. Quando una query delle API dati non va a buon fine, lo stato della query non viene visualizzato immediatamente. Per determinare i motivi dell'errore, utilizza l'azione DescribeStatement per una o più query. Per eseguire DescribeStatement, devi disporre dell'ID dell'istruzione.

Query singola

Per eseguire un’unica query sul cluster, utilizza l'azione ExecuteStatement per restituire un ID dell’istruzione:

Nota: il seguente comando di esempio utilizza il metodo di autenticazione della Gestione dei segreti AWS. Il comando esegue un'istruzione SQL su un cluster e restituisce un identificatore per recuperare i risultati.

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: se ricevi un messaggio di errore durante l'esecuzione dei comandi di AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

Si dovrebbe visualizzare un output simile al seguente:

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

L'istruzione SQL precedente restituisce ExecuteStatementOutput, che include l'istruzione Id. È possibile verificare lo stato della query utilizzando DescribeStatement e immettendo l'ID dell’istruzione:

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

L'output per DescribeStatement fornisce i seguenti dettagli aggiuntivi:

  • RedshiftPid
  • Durata query
  • Numero di righe in
  • Dimensione del set di risultati
  • RedshiftQueryID

Si dovrebbe visualizzare un output simile al seguente:

{
    "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 "Errore": nella risposta precedente mostra l'errore esatto. Che nell'esempio precedente è "ERRORE: relazione "test_table" non esiste".

Query multiple

Per eseguire più query sul cluster, utilizzare l'azione BatchExecuteStatement per restituire un ID di istruzione:

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

Si dovrebbe visualizzare un output simile al seguente:

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

Per ottenere lo stato delle query, utilizza DescribeStatement con l'ID dell'istruzione della risposta precedente:

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

Si dovrebbe visualizzare un output simile al seguente:

{
    "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 precedente visualizza lo stato di tutte le sottoistruzioni di una query con più istruzioni. La sezione “Errore”: nella risposta precedente visualizza l'errore esatto per ogni sotto-istruzione.

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

Monitoraggio degli eventi dell’API dati

Gli eventi delle API dati possono essere monitorati utilizzando Amazon EventBridge. Queste informazioni possono essere inviate a una funzione AWS Lambda integrata con il Servizio di notifica semplice Amazon (Amazon SNS) per inviare notifiche. Per ulteriori informazioni, consulta Building an event-driven application with AWS Lambda and the Amazon Redshift Data API (Sviluppo di un’applicazione basata su eventi con AWS Lambda e l’API dati di Amazon Redshift).


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa