Verwenden der Amazon Redshift Redshift-Daten API - Amazon Redshift

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 Lambdaunter Amazon SageMaker und AWS Cloud9.

Weitere Informationen zu den Daten API finden Sie unter Erste Schritte mit Amazon Redshift Data API im AWS Big Data-Blog.

Arbeiten mit den Amazon Redshift Redshift-Daten API

Bevor Sie die Amazon Redshift Redshift-Daten verwendenAPI, überprüfen Sie die folgenden Schritte:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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 (STARTEDund SUBMITTED 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, DescribeStatementGetStatementResult, und ListStatements 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 verwendetes ExecuteStatement 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 SDKs

    Anmerkung

    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ür ClientToken muss auch bei Wiederholungsversuchen beibehalten werden. Im folgenden Beispielausschnitt einer Anfrage an die States.ArrayGetItem(States.StringSplit($$.Execution.Id, ':'), 7) verwendet der Ausdruck eine systemeigene Funktion ExecuteStatementAPI, 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 dem username und gespeichert istpassword. Das angegebene Secret enthält Anmeldeinformationen zum Verbinden mit der von Ihnen angegebenen database. 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 beispielsweise IAM:foo. Auch die Berechtigung zum Aufruf der redshift-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 beispielsweise IAM:foo. Auch die Berechtigung zum Aufruf der redshift: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

INTEGER, SMALLINT, BIGINT

LONG

FLOAT, REAL, DOUBLE

DOUBLE

DECIMAL

STRING

BOOLEAN, BIT

BOOLEAN

BLOB, BINARY, LONGVARBINARY

BLOB

VARBINARY

STRING

CLOB

STRING

Andere Typen (einschließlich datums- und zeitbezogener Typen)

STRING

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 und Seattle werden in die Tabellenspalten id und address 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 und HAVING COUNT(attr) > :val.

    • Sie können in einer SQL Anweisung keine Spaltennamen ersetzen, z. B. SELECT column-nameORDER 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-statementOperation), ersetzt die QueryString 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) oder SUM(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 wird id durch die Literalzeichenfolge null 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 JDBCPreparedStatement.

  • 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:

  • Sie enthält einen Parameter oder eine Parameterkombination, der/die nicht gültig ist.

  • Sie verwendet eine Aktion oder Ressource, für die Sie keine Berechtigungen haben.

  • Sie verwendet eine Ressource, deren Status sich gerade ändert.

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