Utilizzo dei dati di Amazon Redshift API - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo dei dati di Amazon Redshift API

Amazon Redshift Data API semplifica l'accesso al tuo data warehouse Amazon Redshift eliminando la necessità di gestire driver di database, connessioni, configurazioni di rete, buffering dei dati, credenziali e altro ancora. Puoi eseguire SQL istruzioni utilizzando le operazioni Data con. API AWS SDK Per ulteriori informazioni sulle API operazioni relative ai dati, consulta Amazon Redshift Data API Reference.

I dati API non richiedono una connessione persistente al database. Fornisce invece un HTTP endpoint sicuro e un'integrazione con AWS SDKs. È possibile utilizzare l'endpoint per eseguire SQL istruzioni senza gestire le connessioni. Le chiamate ai dati API sono asincrone. I dati API utilizzano credenziali archiviate nel database o credenziali temporanee del AWS Secrets Manager database. Non è necessario passare le password nelle API chiamate con nessuno dei due metodi di autorizzazione. Per ulteriori informazioni su AWS Secrets Manager, consulta What Is? AWS Secrets Manager nella Guida AWS Secrets Manager per l'utente.

Con The DataAPI, puoi accedere in modo programmatico ai dati di Amazon Redshift con applicazioni basate su servizi Web, AWS Lambda tra cui notebook Amazon e. SageMaker AWS Cloud9 Per ulteriori informazioni su queste applicazioni AWS Lambda, consulta Amazon SageMaker e AWS Cloud9.

Per ulteriori informazioni sui datiAPI, consulta la sezione Introduzione ai dati di Amazon Redshift API nel blog sui AWS Big Data.

Lavorare con i dati di Amazon Redshift API

Prima di utilizzare Amazon Redshift DataAPI, esamina i seguenti passaggi:

  1. Stabilisci se, in qualità di chiamante dei datiAPI, sei autorizzato. Per ulteriori informazioni sull'autorizzazione , consultare Autorizzazione dell'accesso ai dati di Amazon Redshift API.

  2. Determina se intendi chiamare i Dati API con credenziali di autenticazione da Secrets Manager o credenziali temporanee. Per ulteriori informazioni, consulta Scelta delle credenziali di autenticazione del database quando si chiama Amazon Redshift Data API.

  3. Se si utilizza Secrets Manager impostare un segreto per le credenziali di autenticazione. Per ulteriori informazioni, consulta Memorizzazione delle credenziali del database in AWS Secrets Manager.

  4. Esamina le considerazioni e le limitazioni quando chiami i Data. API Per ulteriori informazioni, consulta Considerazioni sulla chiamata di Amazon Redshift Data API.

  5. Chiama i dati API da AWS Command Line Interface (AWS CLI), dal tuo codice o utilizzando l'editor di query nella console Amazon Redshift. Per esempi di chiamata dalla AWS CLI, consultare Chiamata dei dati API.

Considerazioni sulla chiamata di Amazon Redshift Data API

Considera quanto segue quando chiami i datiAPI:

  • Amazon Redshift Data API può accedere ai database nei cluster con provisioning di Amazon Redshift e nei gruppi di lavoro Serverless Redshift. Per un elenco delle aree Regioni AWS in cui sono disponibili i dati API Redshift, consulta gli endpoint elencati per Redshift Data nel. API Riferimenti generali di Amazon Web Services

  • La durata massima di una query è di 24 ore.

  • Il numero massimo di query (STARTEDe SUBMITTED query) attive per cluster Amazon Redshift è 500.

  • La dimensione massima dei risultati della query è 100 MB (dopo la compressione gzip). Se la chiamata restituisce più di 100 MB di dati di risposta, verrà terminata.

  • Il tempo massimo di conservazione dei risultati delle query è 24 ore.

  • La dimensione massima dell'istruzione della query è 100 KB.

  • I dati API sono disponibili per interrogare cluster a nodo singolo e multiplo dei seguenti tipi di nodi:

    • dc2.large

    • dc2.8xlarge

    • ra3. Large

    • ra3.xlplus

    • ra3.4xlarge

    • ra3.16xlarge

  • Il cluster deve trovarsi in un cloud privato virtuale (VPC) basato sul VPC servizio Amazon.

  • Per impostazione predefinita, gli utenti con lo stesso IAM ruolo o le stesse IAM autorizzazioni dell'esecutore di un'BatchExecuteStatementAPIoperazione ExecuteStatement or possono agire sulla stessa istruzione con CancelStatement DescribeStatementGetStatementResult, e ListStatements API operations. Per agire sulla stessa SQL istruzione di un altro utente, l'utente deve essere in grado di assumere il IAM ruolo dell'utente che ha eseguito l'SQListruzione. Per ulteriori informazioni su come assumere un ruolo, consulta Autorizzazione dell'accesso ai dati di Amazon Redshift API.

  • Le SQL istruzioni nel Sqls parametro di BatchExecuteStatement API operazione vengono eseguite come un'unica transazione. Vengono eseguiti in serie nell'ordine dell'array. SQLLe istruzioni successive non iniziano fino al completamento dell'istruzione precedente nell'array. Se un'SQListruzione ha esito negativo, poiché vengono eseguite come un'unica transazione, tutto il lavoro viene annullato.

  • Il tempo massimo di conservazione per un token client utilizzato nella ExecuteStatement nostra BatchExecuteStatement API operazione è di 8 ore.

  • Ciascuno API dei dati di Redshift API ha una quota di transazioni al secondo prima della limitazione delle richieste. Per la quota, consulta Quote per i dati di Amazon Redshift API. Se la frequenza delle richieste supera la quota, viene restituito un valore ThrottlingException con HTTP Status Code: 400. Per rispondere alle limitazioni, utilizzate una strategia di ripetizione dei tentativi, come descritto nella sezione Comportamento dei tentativi nella Guida di riferimento degli strumenti e degli AWS SDKs strumenti. In alcuni casi, questa strategia viene implementata automaticamente per correggere gli errori di limitazione. AWS SDKs

    Nota

    Per impostazione predefinita AWS Step Functions, i nuovi tentativi non sono abilitati. Se devi chiamare un Redshift Data API in una macchina a stati Step Functions, includi il ClientToken parametro idempotency nella chiamata Redshift Data. API Il valore di ClientToken deve persistere tra un tentativo e l'altro. Nel seguente esempio, un frammento di richiesta a ExecuteStatementAPI, l'espressione States.ArrayGetItem(States.StringSplit($$.Execution.Id, ':'), 7) utilizza una funzione intrinseca per estrarre la UUID parte di$$.Execution.Id, che è unica per ogni esecuzione della macchina a stati. Per ulteriori informazioni, consulta Intrinsic functions nella Guida per sviluppatori di AWS Step Functions .

    { "Database": "dev", "Sql": "select 1;", "ClusterIdentifier": "MyCluster", "ClientToken.$": "States.ArrayGetItem(States.StringSplit($$.Execution.Id, ':'), 7)" }

Scelta delle credenziali di autenticazione del database quando si chiama Amazon Redshift Data API

Quando chiami i DataAPI, usi uno dei seguenti metodi di autenticazione per alcune API operazioni. Ogni metodo richiede una diversa combinazione di parametri.

AWS Secrets Manager

Con questo metodo, fornisci un segreto memorizzato in AWS Secrets Manager cui ha username epassword. secret-arn Il segreto specificato contiene le credenziali per la connessione al database specificato. Quando ci si connette a un cluster, si forniscono anche il nome del database; se si fornisce un identificatore del cluster (dbClusterIdentifier), questo deve corrispondere all'identificatore del cluster archiviato nel segreto. Quando ci si connette a un gruppo di lavoro serverless, si fornisce anche il nome del database. Per ulteriori informazioni, consulta Memorizzazione delle credenziali del database in AWS Secrets Manager.

Credenziali temporanee

Con questo metodo, scegli una delle seguenti opzioni:

  • Quando ti connetti a un gruppo di lavoro serverless, specifica il nome del gruppo di lavoro e del database. Il nome utente del database deriva dall'IAMidentità. Ad esempio, arn:iam::123456789012:user:foo ha il nome utente di database IAM:foo. Inoltre, è richiesta l'autorizzazione a richiamare l'operazione redshift-serverless:GetCredentials.

  • Quando ti connetti a un cluster come IAM identità, specifica l'identificatore del cluster e il nome del database. Il nome utente del database deriva dall'IAMidentità. Ad esempio, arn:iam::123456789012:user:foo ha il nome utente di database IAM:foo. Inoltre, è richiesta l'autorizzazione a richiamare l'operazione redshift:GetClusterCredentialsWithIAM.

  • Quando ti connetti a un cluster come utente del database, specifica l'identificatore del cluster, il nome del database e il nome utente del database. Inoltre, è richiesta l'autorizzazione a richiamare l'operazione redshift:GetClusterCredentials. Per informazioni su come unirsi a gruppi di database durante la connessione con questo metodo, vedere Unirsi a gruppi di database durante la connessione a un cluster.

Con questi metodi, puoi anche fornire un region valore che specifica Regione AWS dove si trovano i tuoi dati.

Mappatura JDBC dei tipi di dati quando si richiama Amazon Redshift Data API

La tabella seguente mappa i tipi di dati Java Database Connectivity (JDBC) ai tipi di dati specificati nelle API chiamate di dati.

JDBCtipo di dati

tipo API di dati

INTEGER, SMALLINT, BIGINT

LONG

FLOAT, REAL, DOUBLE

DOUBLE

DECIMAL

STRING

BOOLEAN, BIT

BOOLEAN

BLOB, BINARY, LONGVARBINARY

BLOB

VARBINARY

STRING

CLOB

STRING

Altri tipi (inclusi i tipi correlati a data e ora)

STRING

I valori stringa vengono passati al database Amazon Redshift e convertiti implicitamente in un tipo di dati del database.

Nota

Attualmente, i dati API non supportano matrici di identificatori univoci universali ()UUIDs.

Esecuzione di SQL istruzioni con parametri durante la chiamata ad Amazon Redshift Data API

È possibile controllare il SQL testo inviato al motore di database chiamando l'APIoperazione Data utilizzando i parametri relativi a parti dell'SQListruzione. I parametri denominati forniscono un modo flessibile per passare i parametri senza codificarli nel SQL testo. Ti aiutano a riutilizzare il SQL testo ed evitare problemi SQL di iniezione.

L'esempio seguente mostra i parametri denominati di un parameters campo di un execute-statement AWS CLI comando.

--parameters "[{\"name\": \"id\", \"value\": \"1\"},{\"name\": \"address\", \"value\": \"Seattle\"}]"

Considerare le informazioni seguenti durante l'utilizzo dei parametri specificati:

  • I parametri denominati possono essere utilizzati solo per sostituire i valori nelle SQL istruzioni.

    • È possibile sostituire i valori in un'INSERTistruzione, ad esempioINSERT INTO mytable VALUES(:val1).

      I parametri denominati possono essere in qualsiasi ordine e i parametri possono essere utilizzati più di una volta nel SQL testo. Nell'opzione dei parametri mostrata nell'esempio precedente, i valori 1 e Seattle vengono inseriti nelle colonne della tabella id e address. Nel SQL testo, specificate i parametri denominati come segue:

      --sql "insert into mytable values (:id, :address)"
    • È possibile sostituire i valori in una clausola di condizioni, ad esempio WHERE attr >= :val1, WHERE attr BETWEEN :val1 AND :val2 e HAVING COUNT(attr) > :val.

    • Non è possibile sostituire i nomi delle colonne in un'SQListruzione, ad esempio SELECT column-nameORDER BY column-name, oGROUP BY column-name.

      Ad esempio, l'SELECTistruzione seguente non riesce con una sintassi non valida.

      --sql "SELECT :colname, FROM event" --parameters "[{\"name\": \"colname\", \"value\": \"eventname\"}]"

      Se descrivete (describe-statementoperazione) l'istruzione con l'errore di sintassi, il valore QueryString restituito non sostituisce il nome di colonna per il parametro ("QueryString": "SELECT :colname, FROM event") e viene segnalato un errore (ERROR: errore di sintassi in corrispondenza o in prossimità di\»FROM\»\nPosizione: 12).

    • Non è possibile sostituire i nomi delle colonne in una funzione aggregata, ad esempio COUNT(column-name), AVG(column-name) o SUM(column-name).

    • Non è possibile sostituire i nomi delle colonne in una clausola. JOIN

  • Durante l'SQLesecuzione, i dati vengono trasmessi implicitamente a un tipo di dati. Per ulteriori informazioni sul casting del tipo di dati, consultare Tipi di dati nella Guida per gli sviluppatori di database di Amazon Redshift.

  • Non è possibile impostare un valore su. NULL The Data lo API interpreta come una stringa letterale. NULL Nell'esempio seguente id viene sostituito con la stringa letterale null. Non è il valore. SQL NULL

    --parameters "[{\"name\": \"id\", \"value\": \"null\"}]"
  • Non è possibile impostare un valore con lunghezza zero. L'APISQListruzione Data ha esito negativo. L'esempio seguente tenta di impostare id un valore di lunghezza zero e genera un errore dell'SQListruzione.

    --parameters "[{\"name\": \"id\", \"value\": \"\"}]"
  • Non è possibile impostare un nome di tabella nell'SQListruzione con un parametro. I dati API seguono la regola di JDBCPreparedStatement.

  • L'output dell'describe-statementoperazione restituisce i parametri di interrogazione di un'SQListruzione.

  • Solo l'execute-statementoperazione supporta SQL istruzioni con parametri.

Esecuzione di SQL istruzioni con un token di idempotenza durante la chiamata ad Amazon Redshift Data API

Quando si effettua una richiesta mutante, la API richiesta restituisce in genere un risultato prima del completamento dei flussi di lavoro asincroni dell'operazione. Le operazioni potrebbero inoltre scadere o riscontrare altri problemi relativi al server prima del completamento, anche se la richiesta ha già restituito un risultato. Ciò potrebbe rendere difficile determinare l'esito della richiesta e potrebbe comportare più tentativi per garantire che l'operazione venga completata correttamente. Tuttavia, se la richiesta originale e i tentativi successivi hanno esito positivo, l'operazione viene completata più volte, il che significa che potresti aggiornare più risorse del previsto.

L'idempotenza garantisce che una richiesta venga completata non più di una voltaAPI. Quando si utilizza una richiesta idempotente, se la richiesta originale viene completata correttamente, tutti i tentativi successivi vengono completati correttamente senza alcuna azione aggiuntiva. I dati API ExecuteStatement e le BatchExecuteStatement operazioni hanno un parametro idempotente opzionale. ClientToken Il ClientToken scade dopo 8 ore.

Importante

Se chiami ExecuteStatement e BatchExecuteStatement operi da un AWS SDK, genera automaticamente un token client da utilizzare in caso di nuovo tentativo. In questo caso, non è consigliabile utilizzare il parametro client-token con le operazioni ExecuteStatement e BatchExecuteStatement. Visualizza il CloudTrail registro per vedere ilClientToken. Per un esempio di CloudTrail registro, vedereEsempi di dati di Amazon Redshift API.

Il execute-statement AWS CLI comando seguente illustra il client-token parametro opzionale per l'idempotenza.

aws redshift-data execute-statement --region us-west-2 --secret arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn --cluster-identifier mycluster-test --sql "select * from stl_query limit 1" --database dev --client-token b855dced-259b-444c-bc7b-d3e8e33f94g1

La tabella seguente mostra alcune risposte comuni che è possibile ottenere per richieste idempotenti e fornisce consigli API per riprovare.

Risposta Raccomandazione Commenti

200 (OK)

Non riprovare

La richiesta originale è stata completata con successo. Qualsiasi tentativo successivo ottiene esito positivo.

Codici di risposta serie 400

Non riprovare

La richiesta presenta uno dei problemi seguenti:

  • Include un parametro o una combinazione di parametri non validi.

  • Utilizza un'azione o una risorsa per la quale non si dispone delle autorizzazioni.

  • Utilizza una risorsa che sta cambiando stato.

Se la richiesta riguarda una risorsa che sta cambiando stato, un nuovo tentativo potrebbe avere esito positivo.

Codici di risposta serie 500

Riprova

L'errore è causato da un problema AWS sul lato server ed è generalmente temporaneo. Ripeti la richiesta con una strategia di backoff appropriata.

Per informazioni sui codici di risposta di Amazon Redshift, consulta Errori comuni in Amazon API Redshift Reference.

Esecuzione di SQL istruzioni con riutilizzo della sessione quando si richiama Amazon Redshift Data API

Quando si effettua una API richiesta per eseguire un'SQListruzione, la sessione in cui SQL viene eseguita viene in genere terminata al termine dellaSQL. Per mantenere attiva la sessione per un determinato numero di secondi, i dati API ExecuteStatement e BatchExecuteStatement le operazioni dispongono di un SessionKeepAliveSeconds parametro opzionale. Un campo di SessionId risposta contiene l'identità della sessione che può quindi essere utilizzata nelle BatchExecuteStatement operazioni ExecuteStatement e nelle operazioni successive. Nelle chiamate successive è possibile specificarne un'altra SessionKeepAliveSeconds per modificare il tempo di timeout di inattività. Se il non SessionKeepAliveSeconds viene modificato, l'impostazione iniziale del timeout di inattività rimane. Quando utilizzate il riutilizzo della sessione, tenete presente quanto segue:

  • Il valore massimo di SessionKeepAliveSeconds è 24 ore.

  • La sessione può durare al massimo 24 ore. Dopo 24 ore la sessione viene chiusa forzatamente e le interrogazioni in corso vengono terminate.

  • Il numero massimo di sessioni per cluster Amazon Redshift o gruppo di lavoro Redshift Serverless è 500.

  • Puoi eseguire solo una query alla volta in una sessione. È necessario attendere il completamento della query per eseguire la query successiva nella stessa sessione. In altre parole, non è possibile eseguire query in parallelo in una sessione specifica.

  • The Data non API può mettere in coda le query per una determinata sessione.

Per recuperare SessionId ciò che viene utilizzato dalle chiamate e dalle BatchExecuteStatement operazioni, dalle chiamate ExecuteStatement e dalle operazioni. DescribeStatement ListStatements

L'esempio seguente dimostra l'utilizzo dei SessionId parametri SessionKeepAliveSeconds and per mantenere attiva e riutilizzata una sessione. Innanzitutto, chiamate il execute-statement AWS CLI comando con il session-keep-alive-seconds parametro opzionale impostato su. 2

aws redshift-data execute-statement --session-keep-alive-seconds 2 --sql "select 1" --database dev --workgroup-name mywg

La risposta contiene l'identificatore di sessione.

{ "WorkgroupName": "mywg", "CreatedAt": 1703022996.436, "Database": "dev", "DbUser": "awsuser", "Id": "07c5ffea-76d6-4786-b62c-4fe3ef529680", "SessionId": "5a254dc6-4fc2-4203-87a8-551155432ee4" }

Quindi, chiama il execute-statement AWS CLI comando con il SessionId risultato della prima chiamata. E, facoltativamente, specifica il session-keep-alive-seconds parametro impostato su 10 per modificare il valore del timeout di inattività.

aws redshift-data execute-statement --sql "select 1" --session-id 5a254dc6-4fc2-4203-87a8-551155432ee4 --session-keep-alive-seconds 10