Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwenden der Amazon Redshift Redshift-Daten API
Amazon Redshift Data API vereinfacht den Zugriff auf Ihr Amazon Redshift Data Warehouse, da Datenbanktreiber, Verbindungen, Netzwerkkonfigurationen, Datenpufferung, Anmeldeinformationen und mehr nicht mehr verwaltet werden müssen. Sie können SQL Anweisungen mithilfe der API Datenoperationen mit dem ausführen. AWS SDK Weitere Informationen zu den API Datenoperationen finden Sie in der Amazon Redshift API Redshift-Datenreferenz.
Für die Daten API ist keine dauerhafte Verbindung zu Ihrer Datenbank erforderlich. Stattdessen bietet es einen sicheren HTTP Endpunkt und eine sichere Integration mit AWS SDKs. Sie können den Endpunkt verwenden, um SQL Anweisungen auszuführen, ohne Verbindungen zu verwalten. Aufrufe der Daten API sind asynchron. Die Daten API verwenden entweder in gespeicherten Anmeldeinformationen AWS Secrets Manager oder temporäre Datenbankanmeldeinformationen. Bei beiden Autorisierungsmethoden müssen Sie bei den API Aufrufen keine Passwörter übergeben. Weitere Informationen zu AWS Secrets Manager finden Sie unter Was ist AWS Secrets Manager? im AWS Secrets Manager Benutzerhandbuch.
Mit den Daten können Sie mit Webservice-basierten AnwendungenAPI, einschließlich AWS Lambda Amazon-Notebooks und, programmgesteuert auf Amazon Redshift-Daten zugreifen. SageMaker AWS Cloud9 Weitere Informationen zu diesen Anwendungen finden Sie AWS Lambda
Weitere Informationen zu den Daten API finden Sie unter Erste Schritte mit Amazon Redshift Data API
Arbeiten mit den Amazon Redshift Redshift-Daten API
Bevor Sie die Amazon Redshift Redshift-Daten verwendenAPI, überprüfen Sie die folgenden Schritte:
-
Stellen Sie fest, ob Sie als Aufrufer der Daten autorisiert API sind. Weitere Informationen zur -Autorisierung finden Sie unter Autorisieren des Zugriffs auf die Amazon Redshift Redshift-Daten API.
-
Stellen Sie fest, ob Sie die Daten API mit Authentifizierungsdaten von Secrets Manager oder temporären Anmeldeinformationen aufrufen möchten. Weitere Informationen finden Sie unter Auswahl der Anmeldeinformationen für die Datenbankauthentifizierung beim Aufrufen der Amazon Redshift Redshift-Daten API.
-
Richten Sie ein Secret ein, wenn Sie Secrets Manager für die Authentifizierungsanmeldeinformationen verwenden. Weitere Informationen finden Sie unter Speichern von Datenbankanmeldedaten in AWS Secrets Manager.
-
Lesen Sie sich die Überlegungen und Einschränkungen beim Aufrufen der Daten durchAPI. Weitere Informationen finden Sie unter Überlegungen beim Aufrufen der Amazon Redshift Redshift-Daten API.
-
Rufen Sie die Daten API aus AWS Command Line Interface (AWS CLI), aus Ihrem eigenen Code oder mit dem Abfrage-Editor in der Amazon Redshift Redshift-Konsole auf. Beispiele für den Aufruf über die AWS CLI finden Sie unter Aufrufen der Daten API.
Überlegungen beim Aufrufen der Amazon Redshift Redshift-Daten API
Beachten Sie beim Aufrufen der Daten FolgendesAPI:
-
Die Amazon Redshift-Daten API können auf Datenbanken in von Amazon Redshift bereitgestellten Clustern und Redshift Serverless-Arbeitsgruppen zugreifen. Eine Liste, AWS-Regionen wo die Redshift-Daten API verfügbar sind, finden Sie unter den für Redshift Data API aufgelisteten Endpunkten in der. Allgemeine Amazon Web Services-Referenz
-
Die maximale Dauer einer Abfrage beträgt 24 Stunden.
-
Die maximale Anzahl aktiver Abfragen (
STARTED
undSUBMITTED
Abfragen) pro Amazon Redshift Redshift-Cluster beträgt 500. -
Die maximale Größe der Abfrageergebnisse beträgt 100 MB (nach der Gzip-Komprimierung). Wenn ein Aufruf mehr als 100 MB an Antwortdaten zurückgibt, wird der Aufruf beendet.
-
Die maximale Aufbewahrungszeit für Abfrageergebnisse beträgt 24 Stunden.
-
Die maximale Größe von Abfrageanweisungen beträgt 100 KB.
-
Die Daten API sind für die Abfrage von Clustern mit einem und mehreren Knoten der folgenden Knotentypen verfügbar:
-
dc2.large
-
dc2.8xlarge
ra3.large
ra3.xlplus
ra3.4xlarge
ra3.16xlarge
-
Der Cluster muss sich in einer virtuellen privaten Cloud (VPC) befinden, die auf dem VPC Amazon-Service basiert.
Standardmäßig können Benutzer mit derselben IAM Rolle oder denselben IAM Berechtigungen wie der Ausführende einer
ExecuteStatement
BatchExecuteStatement
API OR-Operation mitCancelStatement
,DescribeStatement
GetStatementResult
, undListStatements
API Operationen auf dieselbe Anweisung reagieren. Um auf dieselbe SQL Anweisung eines anderen Benutzers reagieren zu können, muss der Benutzer in der Lage sein, die IAM Rolle des Benutzers zu übernehmen, der die SQL Anweisung ausgeführt hat. Weitere Informationen zum Übernehmen einer Rolle finden Sie unter Autorisieren des Zugriffs auf die Amazon Redshift Redshift-Daten API.-
Die SQL Anweisungen im
Sqls
BatchExecuteStatement
API Operationsparameter werden als eine einzelne Transaktion ausgeführt. Sie werden seriell in der Reihenfolge des Arrays ausgeführt. Nachfolgende SQL Anweisungen beginnen erst, wenn die vorherige Anweisung im Array abgeschlossen ist. Wenn eine SQL Anweisung fehlschlägt, wird die gesamte Arbeit rückgängig gemacht, da sie als eine Transaktion ausgeführt wird. -
Die maximale Aufbewahrungszeit für ein in unserem
BatchExecuteStatement
API Betrieb verwendetesExecuteStatement
Client-Token beträgt 8 Stunden. -
Jeder API in den Redshift-Daten API hat ein Kontingent für Transaktionen pro Sekunde, bevor Anfragen gedrosselt werden. Informationen zu dem Kontingent finden Sie unter Kontingente für Amazon Redshift Redshift-Daten API. Wenn die Anforderungsrate das Kontingent überschreitet, wird a
ThrottlingException
mit dem HTTP Statuscode: 400 zurückgegeben. Um auf die Drosselung zu reagieren, verwenden Sie eine Wiederholungsstrategie, wie sie unter Wiederholungsverhalten im Referenzhandbuch AWS SDKsund im Tools-Referenzhandbuch beschrieben ist. In einigen Fällen wird diese Strategie bei Drosselungsfehlern automatisch implementiert. AWS SDKsAnmerkung
Standardmäßig sind AWS Step Functions Wiederholungsversuche nicht aktiviert. Wenn Sie eine Redshift-Data-Zustandsmaschine API in einer Step Functions Functions-Zustandsmaschine aufrufen müssen, fügen Sie den
ClientToken
Idempotenz-Parameter in Ihren Redshift-Datenaufruf ein. API Der Wert fürClientToken
muss auch bei Wiederholungsversuchen beibehalten werden. Im folgenden Beispielausschnitt einer Anfrage an dieStates.ArrayGetItem(States.StringSplit($$.Execution.Id, ':'), 7)
verwendet der Ausdruck eine systemeigene FunktionExecuteStatement
API, um den UUID Teil von zu extrahieren$$.Execution.Id
, der für jede Ausführung der Zustandsmaschine eindeutig ist. Weitere Informationen finden Sie unter Intrinsische Funktionen im AWS Step Functions -Entwicklerhandbuch.{ "Database": "dev", "Sql": "select 1;", "ClusterIdentifier": "MyCluster", "ClientToken.$": "States.ArrayGetItem(States.StringSplit($$.Execution.Id, ':'), 7)" }
Auswahl der Anmeldeinformationen für die Datenbankauthentifizierung beim Aufrufen der Amazon Redshift Redshift-Daten API
Wenn Sie die Daten aufrufenAPI, verwenden Sie für einige API Operationen eine der folgenden Authentifizierungsmethoden. Jede Methode erfordert eine andere Kombination von Parametern.
- AWS Secrets Manager
-
Geben Sie bei dieser Methode den Wert
secret-arn
eines Geheimnisses an AWS Secrets Manager , in demusername
und gespeichert istpassword
. Das angegebene Secret enthält Anmeldeinformationen zum Verbinden mit der von Ihnen angegebenendatabase
. Wenn Sie eine Verbindung zu einem Cluster herstellen, geben Sie auch den Datenbanknamen an. Wenn Sie eine Clusterkennung (dbClusterIdentifier
) angeben, muss diese mit der in dem Secret gespeicherten Clusterkennung übereinstimmen. Wenn Sie eine Verbindung zu einer Serverless-Arbeitsgruppe herstellen, geben Sie auch den Datenbanknamen an. Weitere Informationen finden Sie unter Speichern von Datenbankanmeldedaten in AWS Secrets Manager. - Temporäre Anmeldeinformationen
-
Wählen Sie bei dieser Methode eine der folgenden Optionen aus:
-
Wenn Sie eine Verbindung zu einer Serverless-Arbeitsgruppe herstellen, geben Sie den Arbeitsgruppennamen und den Datenbanknamen an. Der Datenbankbenutzername wird aus der IAM Identität abgeleitet. Für
arn:iam::123456789012:user:foo
lautet der Datenbankbenutzername beispielsweiseIAM:foo
. Auch die Berechtigung zum Aufruf derredshift-serverless:GetCredentials
-Operation ist erforderlich. -
Wenn Sie eine Verbindung zu einem Cluster als IAM Identität herstellen, geben Sie die Cluster-ID und den Datenbanknamen an. Der Datenbankbenutzername wird von der IAM Identität abgeleitet. Für
arn:iam::123456789012:user:foo
lautet der Datenbankbenutzername beispielsweiseIAM:foo
. Auch die Berechtigung zum Aufruf derredshift:GetClusterCredentialsWithIAM
-Operation ist erforderlich. -
Geben Sie die Clusterkennung, den Datenbanknamen und den Namen des Datenbankbenutzers an, wenn Sie eine Verbindung zu einem Cluster als Datenbankbenutzer herstellen. Auch die Berechtigung zum Aufruf der
redshift:GetClusterCredentials
-Operation ist erforderlich. Hinweise dazu, wie Sie Datenbankgruppen beitreten, wenn Sie mit dieser Methode eine Verbindung herstellen, finden Sie unter Beitreten zu Datenbankgruppen beim Herstellen einer Verbindung mit einem Cluster.
-
Mit diesen Methoden können Sie auch einen region
Wert angeben, der angibt, AWS-Region wo sich Ihre Daten befinden.
Zuordnen von JDBC Datentypen beim Aufrufen der Amazon Redshift Redshift-Daten API
In der folgenden Tabelle werden die Datentypen von Java Database Connectivity (JDBC) den Datentypen zugeordnet, die Sie in API Datenaufrufen angeben.
JDBCDatentyp |
Datentyp der API Daten |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Andere Typen (einschließlich datums- und zeitbezogener Typen) |
|
Zeichenfolgenwerte werden an die Amazon-Redshift-Datenbank übergeben und implizit in einen Datenbankdatentyp umgewandelt.
Anmerkung
Derzeit unterstützen die Daten API keine Arrays mit universellen eindeutigen Identifikatoren ()UUIDs.
Ausführen von SQL Anweisungen mit Parametern beim Aufrufen der Amazon Redshift Redshift-Daten API
Sie können den SQL Text steuern, der an die Datenbank-Engine gesendet wird, indem Sie die API Operation Data mithilfe von Parametern für Teile der SQL Anweisung aufrufen. Benannte Parameter bieten eine flexible Möglichkeit, Parameter zu übergeben, ohne sie im SQL Text fest zu kodieren. Sie helfen Ihnen, SQL Text wiederzuverwenden und SQL Injektionsprobleme zu vermeiden.
Das folgende Beispiel zeigt die benannten Parameter eines parameters
execute-statement
AWS CLI Befehlsfeldes.
--parameters "[{\"name\": \"id\", \"value\": \"1\"},{\"name\": \"address\", \"value\": \"Seattle\"}]"
Beachten Sie Folgendes, wenn Sie benannte Parameter verwenden:
-
Benannte Parameter können nur verwendet werden, um Werte in SQL Anweisungen zu ersetzen.
-
Sie können die Werte in einer INSERT Anweisung ersetzen, z.
INSERT INTO mytable VALUES(:val1)
B.Die benannten Parameter können in beliebiger Reihenfolge angegeben werden, und Parameter können mehrmals im SQL Text verwendet werden. Die in einem vorherigen Beispiel gezeigte Parameteroption, die Werte
1
undSeattle
werden in die Tabellenspaltenid
undaddress
eingefügt. Im SQL Text geben Sie die benannten Parameter wie folgt an:--sql "insert into mytable values (:id, :address)"
-
Sie können die Werte in einer Bedingungsklausel ersetzen, z. B.
WHERE attr >= :val1
,WHERE attr BETWEEN :val1 AND :val2
undHAVING COUNT(attr) > :val
. -
Sie können in einer SQL Anweisung keine Spaltennamen ersetzen, z. B.
SELECT column-name
ORDER BY column-name
, oderGROUP BY column-name
.Die folgende SELECT Anweisung schlägt beispielsweise mit einer ungültigen Syntax fehl.
--sql "SELECT :colname, FROM event" --parameters "[{\"name\": \"colname\", \"value\": \"eventname\"}]"
Wenn Sie die Anweisung mit dem Syntaxfehler beschreiben (
describe-statement
Operation), ersetzt dieQueryString
zurückgegebene Anweisung den Parameter ("QueryString": "SELECT :colname, FROM event"
) nicht durch den Spaltennamen und es wird ein Fehler gemeldet (ERROR: Syntaxfehler an oder in der Nähe von\“FROM\“\nPosition: 12
). -
Sie können in einer Aggregatfunktion keine Spaltennamen ersetzen, wie z. B.
COUNT(column-name)
,AVG(column-name)
oderSUM(column-name)
. -
Sie können Spaltennamen in einer JOIN Klausel nicht ersetzen.
-
-
Bei der SQL Ausführung werden Daten implizit in einen Datentyp umgewandelt. Weitere Informationen zur Datentypumwandlung finden Sie unter Datentypen im Datenbankentwicklerhandbuch zu Amazon Redshift.
-
Sie können keinen Wert auf NULL festlegen. The Data API interpretiert ihn als Literalzeichenfolge.
NULL
Im folgenden Beispiel wirdid
durch die Literalzeichenfolgenull
ersetzt, Nicht der SQL NULL Wert.--parameters "[{\"name\": \"id\", \"value\": \"null\"}]"
-
Sie können keinen Wert mit Länge null festlegen. Die API SQL Datenanweisung schlägt fehl. Im folgenden Beispiel wird versucht, einen Wert
id
mit einer Länge von Null festzulegen, was dazu führt, dass die SQL Anweisung fehlschlägt.--parameters "[{\"name\": \"id\", \"value\": \"\"}]"
-
Sie können in der SQL Anweisung keinen Tabellennamen mit einem Parameter festlegen. Die Daten API folgen der Regel von JDBC
PreparedStatement
. -
Die Ausgabe der
describe-statement
Operation gibt die Abfrageparameter einer SQL Anweisung zurück. -
Nur die
execute-statement
Operation unterstützt SQL Anweisungen mit Parametern.
Ausführen von SQL Anweisungen mit einem Idempotenz-Token beim Aufrufen der Amazon Redshift Redshift-Daten API
Wenn Sie eine mutierende API Anforderung stellen, gibt die Anforderung in der Regel ein Ergebnis zurück, bevor die asynchronen Workflows des Vorgangs abgeschlossen sind. Es können auch ein Timeout oder andere Serverprobleme auftreten, bevor Operationen abgeschlossen sind, obwohl die Anfrage bereits ein Ergebnis zurückgegeben hat. Dadurch lässt sich möglicherweise nur schwer feststellen, ob die Anfrage erfolgreich war oder nicht, und es werden möglicherweise mehrere Wiederholungsversuche vorgenommen, um sicherzustellen, dass die Operation erfolgreich abgeschlossen wird. Wenn die ursprüngliche Anfrage und die nachfolgenden Wiederholungsversuche jedoch erfolgreich sind, wird die Operation mehrmals abgeschlossen. Das bedeutet, dass Sie möglicherweise mehr Ressourcen aktualisieren als beabsichtigt.
Idempotenz stellt sicher, dass eine API Anfrage nicht öfter als einmal abgeschlossen wird. Wenn bei einer idempotenten Anfrage die ursprüngliche Anfrage erfolgreich abgeschlossen wird, werden alle nachfolgenden Wiederholungen erfolgreich abgeschlossen, ohne dass weitere Aktionen ausgeführt werden. Die Daten API ExecuteStatement
und BatchExecuteStatement
Operationen haben einen optionalen ClientToken
idempotenten Parameter. Das ClientToken
läuft nach 8 Stunden ab.
Wichtig
Wenn Sie BatchExecuteStatement
Operationen von einem aus aufrufen ExecuteStatement
AWS SDK, generiert es automatisch ein Client-Token, das bei einem erneuten Versuch verwendet wird. In diesem Fall empfehlen wir, den Parameter client-token
nicht mit den Operationen ExecuteStatement
und BatchExecuteStatement
zu verwenden. Sehen Sie CloudTrail sich das Protokoll an, um das ClientToken
zu sehen. Ein Beispiel für ein CloudTrail Protokoll finden Sie unterBeispiele für Amazon Redshift Redshift-Daten API.
Der folgende execute-statement
AWS CLI Befehl veranschaulicht den optionalen client-token
Parameter für Idempotenz.
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
Die folgende Tabelle zeigt einige allgemeine Antworten, die Sie möglicherweise auf idempotente API Anfragen erhalten, und enthält Empfehlungen für Wiederholungsversuche.
Antwort | Empfehlung | Kommentare |
---|---|---|
200 (OK) |
Nicht erneut versuchen |
Die ursprüngliche Anfrage wurde erfolgreich abgeschlossen. Alle nachfolgenden Wiederholungsversuche werden als erfolgreich zurückgegeben. |
Antwortcodes der Serie 400 |
Nicht erneut versuchen |
Es liegt eins der folgenden Probleme mit der Anfrage vor:
Wenn die Anfrage eine Ressource umfasst, deren Status sich gerade ändert, könnte ein erneuter Anfrageversuch möglicherweise erfolgreich sein. |
Antwortcodes der Serie 500 |
Erneut versuchen |
Der Fehler wird durch ein AWS serverseitiges Problem verursacht und ist im Allgemeinen vorübergehend. Wiederholen Sie die Anfrage mit einer geeigneten Backoff-Strategie. |
Informationen zu Amazon Redshift Redshift-Antwortcodes finden Sie unter Häufige Fehler in der Amazon Redshift Redshift-Referenz API.
Ausführen von SQL Anweisungen mit Wiederverwendung von Sitzungen beim Aufrufen der Amazon Redshift Redshift-Daten API
Wenn Sie die Ausführung einer SQL Anweisung API anfordern, wird die Sitzung, in der die Anweisung SQL ausgeführt wird, normalerweise beendet, wenn die ausgeführt SQL wird. Um die Sitzung für eine bestimmte Anzahl von Sekunden aktiv zu halten, verfügen die Daten API ExecuteStatement
und BatchExecuteStatement
Operationen über einen optionalen SessionKeepAliveSeconds
Parameter. Ein SessionId
Antwortfeld enthält die Identität der Sitzung, die dann für nachfolgende ExecuteStatement
BatchExecuteStatement
Operationen verwendet werden kann. Bei nachfolgenden Aufrufen können Sie einen anderen angebenSessionKeepAliveSeconds
, um die Leerlaufzeit zu ändern. Wenn das nicht geändert SessionKeepAliveSeconds
wird, bleibt die ursprüngliche Einstellung für das Leerlauf-Timeout bestehen. Beachten Sie Folgendes, wenn Sie die Wiederverwendung von Sitzungen verwenden:
-
Der Höchstwert von
SessionKeepAliveSeconds
ist 24 Stunden. -
Die Sitzung kann höchstens 24 Stunden dauern. Nach 24 Stunden wird die Sitzung gewaltsam geschlossen und laufende Abfragen werden beendet.
-
Die maximale Anzahl von Sitzungen pro Amazon Redshift Redshift-Cluster oder Redshift Serverless-Arbeitsgruppe beträgt 500.
-
In einer Sitzung können Sie jeweils nur eine Abfrage ausführen. Sie müssen warten, bis die Abfrage abgeschlossen ist, um die nächste Abfrage in derselben Sitzung auszuführen. Das heißt, Sie können Abfragen in einer bereitgestellten Sitzung nicht parallel ausführen.
-
Die Daten API können Abfragen für eine bestimmte Sitzung nicht in die Warteschlange stellen.
Um das abzurufenSessionId
, was von Aufrufen ExecuteStatement
und BatchExecuteStatement
Vorgängen verwendet wird, rufen Sie DescribeStatement
und ListStatements
Operationen auf.
Das folgende Beispiel zeigt, wie die SessionId
Parameter SessionKeepAliveSeconds
und verwendet werden, um eine Sitzung aufrechtzuerhalten und wiederzuverwenden. Rufen Sie zunächst den execute-statement
AWS CLI Befehl auf, wobei der optionale session-keep-alive-seconds
Parameter auf 2
gesetzt ist.
aws redshift-data execute-statement
--session-keep-alive-seconds 2
--sql "select 1"
--database dev
--workgroup-name mywg
Die Antwort enthält die Sitzungs-ID.
{
"WorkgroupName": "mywg",
"CreatedAt": 1703022996.436,
"Database": "dev",
"DbUser": "awsuser",
"Id": "07c5ffea-76d6-4786-b62c-4fe3ef529680",
"SessionId": "5a254dc6-4fc2-4203-87a8-551155432ee4"
}
Rufen Sie dann den execute-statement
AWS CLI Befehl mit dem vom ersten Aufruf SessionId
zurückgegebenen Befehl auf. Geben Sie optional den session-keep-alive-seconds
Parameter an, der auf gesetzt ist, 10
um den Wert für das Leerlauf-Timeout zu ändern.
aws redshift-data execute-statement
--sql "select 1"
--session-id 5a254dc6-4fc2-4203-87a8-551155432ee4
--session-keep-alive-seconds 10