Wie kann ich Abfragen für einen Amazon-Redshift-Cluster planen?

Lesedauer: 5 Minute
0

Ich versuche, eine Abfrage so zu planen, dass sie in einem Amazon-Redshift-Cluster ausgeführt wird. Wie gehe ich vor?

Kurzbeschreibung

Sie können den Abfrage-Editor verwenden, um SQL-Abfragen für Ihre bereitgestellten Amazon-Redshift-Cluster auszuführen, anzuzeigen, zu speichern und zu planen. Geplante Abfragen werden von Amazon EventBridge initiiert.

Lösung

Hinweis: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhalten, stellen Sie sicher, dass Sie die aktuelle AWS-CLI-Version verwenden.

Berechtigungen für den Abfrage-Editor

Um den Abfrage-Editor verwenden zu können, müssen Benutzer über ein Minimum an Berechtigungen für Amazon Redshift verfügen. Wenn Ihr Cluster andere AWS-Services verwendet, müssen Benutzer auch über Berechtigungen für diese Services verfügen. zum Beispiel Geheimnisse von AWS Secrets Manager und Schlüssel von AWS Key Management Service (AWS KMS). Weitere Informationen finden Sie unter Erforderliche Berechtigungen zur Verwendung des Abfrage-Editors der Amazon-Redshift-Konsole.

Sie können verwaltete Richtlinien von AWS Identity and Access Management (IAM) verwenden, um Berechtigungen auf der Grundlage von IAM-Rollen zu verwalten. Weitere Informationen finden Sie unter Von AWS verwaltete (vordefinierte) Richtlinien für Amazon Redshift.

Um Abfragen planen zu können, müssen der IAM-Benutzer und die der Abfrage zugeordnete Rolle über die Berechtigung verfügen, den Abfrage-Editor zu verwalten. Eine Anleitung finden Sie unter Einrichten von Berechtigungen zum Planen einer Abfrage in der Amazon-Redshift-Konsole.

Planen von Abfragen mithilfe der AWS-Managementkonsole

Führen Sie die folgenden Schritte aus, um die Abfrage mithilfe der AWS-Managementkonsole zu planen:

Hinweis:

  • Sie müssen den Abfrage-Editor v1 verwenden, um Abfragen zu planen.
  • Sie können diesen Abfrage-Editor nur mit bereitgestellten Clustern verwenden.

1.    Öffnen Sie die Amazon-Redshift-Konsole.

2.    Wählen Sie im Navigationsbereich Query editor (Abfrage-Editor) aus.

3.    Folgen Sie den Anweisungen zum Herstellen einer Verbindung zu einer Datenbank in Ihrem Cluster.

4.    Folgen Sie den Anweisungen zum Erstellen eines Zeitplans für die Ausführung einer SQL-Anweisung.

5.    Wenn Sie AWS Secrets Manager mit Amazon Redshift verwenden, wählen Sie Ihr Secret aus.

6.    Wenn Sie temporäre IAM-Benutzeranmeldeinformationen verwenden, wählen Sie Ihren Cluster aus und geben Sie die Datenbank und die Benutzernamen an. Hinweis: Die Berechtigung GetClusterCredentials muss vorhanden sein, damit der IAM-Benutzer die temporären Anmeldeinformationen verwenden kann.

7.    Wählen Sie Save (Speichern) aus.

Hinweis: Wenn Sie Simple Notification Service (Amazon SNS) aktiviert haben, stellen Sie sicher, dass die API-Aktion „sns:Publish“ für „events.amazonaws.com“ vorhanden ist. Fügen Sie zur Bestätigung die folgende Anweisung hinzu:

{
  "Sid": "Allow_Publish_Events",
  "Effect": "Allow",
  "Principal": {
    "Service": "events.amazonaws.com"
  },
  "Action": "sns:Publish",
  "Resource": "arn:aws:sns:us-east-1:{ACCOUNT_ID}:{SNS_TOPIC_NAME}"
}

Planen von Abfragen mithilfe einer SQL-Anweisung mit EventBridge

Sie können SQL-Anweisungen mithilfe von EventBridge und der Daten-API von Amazon Redshift planen. Im folgenden Beispiel wird ein Zeitplan eingerichtet, um aktuelle Ereignisse alle 5 Minuten zu aktualisieren.

1.    Erstellen Sie eine EventBridge-Ereignisregel mit dem Namen „scheduled-refresh-currentEvents“ und planen Sie, dass sie alle 5 Minuten ausgeführt wird. Verwenden Sie dazu Cron- oder Rate-Ausdrücke, die den folgenden ähneln:

aws events put-rule \
--name scheduled-refresh-currentEvents \
--schedule-expression "cron(0/5 * * * ? *)"

2.    Erstellen und speichern Sie eine JSON-Datei mit dem Namen refreshCurrentEvents.json mit Ihrem bevorzugten Texteditor, die den Cluster, die Rolle und den ARN von AWS Secrets Manager enthält:

{
  "Rule": "scheduled-refresh-currentEvents",
  "EventBusName": "default",
  "Targets": [
    {
      "Id": "scheduled-refresh-currentEvents",
      "Arn": "<Clsuter ARN>",
      "RoleArn": "<Role ARN>",
      "RedshiftDataParameters": {
        "SecretManagerArn": "<Secrets Manager ARN>",
        "Database": "<Database Name>",
        "Sql": "REFRESH MATERIALIZED VIEW currentEvents;",
        "StatementName": "scheduled-refresh-currentEvents",
        "WithEvent": true
      }
    }
  ]
}

3.    Erstellen Sie ein Ereignisziel mithilfe der gespeicherten JSON-Datei:

aws events put-targets --cli-input-json file://refreshCurrentEvents.json

4.    Führen Sie die folgenden Befehle aus, um das Ziel und die Regel zu löschen:

aws events remove-targets --rule scheduled-refresh-currentEvents --ids scheduled-refresh-currentEvents
aws events delete-rule --name scheduled-refresh-currentEvents

Anzeigen des SQL-Status und der Ergebnisse

Führen Sie die folgenden Schritte aus, um den Abfragestatus und das Ergebnis anzuzeigen:

1.    Öffnen Sie die Amazon-RedShift-Konsole.

2.    Wählen Sie im Navigationsbereich Query editor (Abfrage-Editor) und dann Schedules queries (Geplante Abfragen) aus.

3.    Wählen Sie Ihren Abfragenamen.

4.    Notieren Sie sich die ID im Planverlauf. Sie benötigen die ID in Schritt 7.

5.    Zum Abrufen der Abfrageergebnisse nehmen Sie die IAM-Rolle an, die zum Planen der Abfrage verwendet wurde. Verwenden Sie dazu den AWS-CLI-Befehl assume-role, der dem folgenden ähnelt:

aws sts assume-role --role-arn "<Role ARN>" --role-session-name AWSCLI-Session

Die Ausgabe gibt die Zugriffsschlüssel-ID, den geheimen Zugriffsschlüssel und das Sitzungstoken zurück.

6.    Konfigurieren Sie Umgebungsvariablen mit den folgenden Exportbefehlen:

export AWS_ACCESS_KEY_ID=<RoleAccessKeyID>
export AWS_SECRET_ACCESS_KEY=<RoleSecretKey>
export AWS_SESSION_TOKEN=<RoleSessionToken>

7.    Rufen Sie die Ergebnisse mit dem AWS-CLI-Befehl redshift-data ab, der dem folgenden ähnelt:

aws redshift-data get-statement-result --id <ID> --region <Region>

Relevante Informationen

Why can't I connect to the Amazon Redshift query editor? (Warum kann ich keine Verbindung mit dem Abfrage-Editor von Amazon Redshift herstellen?)

Using the Amazon Redshift Data API to interact with Amazon Redshift clusters (Verwendung der Daten-API von Amazon Redshift für die Interaktion mit Amazon-Redshift-Clustern)

Creating an Amazon EventBridge rule that runs on a schedule (Erstellen einer Amazon-EventBridge-Regel, die nach einem Zeitplan ausgeführt wird)

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren