Mit Athena auf Amazon DynamoDB-Tabellen zugreifen, diese abfragen und verbinden - AWS Prescriptive Guidance

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.

Mit Athena auf Amazon DynamoDB-Tabellen zugreifen, diese abfragen und verbinden

Erstellt von Moinul Al-Mamun () AWS

Umwelt: Produktion

Technologien: Analytik; Datenbanken; Serverlos

AWSDienste: Amazon Athena; Amazon DynamoDB; AWS Lambda; Amazon S3

Übersicht

Dieses Muster zeigt Ihnen, wie Sie mithilfe des Amazon Athena DynamoDB-Connectors eine Verbindung zwischen Amazon Athena und Amazon DynamoDB einrichten. Der Konnektor verwendet eine AWS Lambda-Funktion, um die Daten in DynamoDB abzufragen. Sie müssen keinen Code schreiben, um die Verbindung einzurichten. Nachdem die Verbindung hergestellt wurde, können Sie schnell auf DynamoDB-Tabellen zugreifen und diese analysieren, indem Sie Athena Federated Query verwenden, um Befehle von Athena auszuführenSQL. Sie können auch eine oder mehrere DynamoDB-Tabellen miteinander oder mit anderen Datenquellen wie Amazon Redshift oder Amazon Aurora verbinden.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktives AWS Konto mit Berechtigungen zur Verwaltung von DynamoDB-Tabellen, Athena-Datenquellen, Lambda und AWS Identity and Access Management () -Rollen IAM

  • Ein Amazon Simple Storage Service (Amazon S3) -Bucket, in dem Athena Abfrageergebnisse speichern kann

  • Ein S3-Bucket, in dem der Athena DynamoDB Connector die Daten kurzfristig speichern kann

  • Eine AWS Region, die Athena-Engine-Version 2 unterstützt

  • IAMBerechtigungen für den Zugriff auf Athena und die erforderlichen S3-Buckets

  • Amazon Athena DynamoDB Connector, installiert

Einschränkungen

Das Abfragen von DynamoDB-Tabellen ist kostenpflichtig. Tabellengrößen, die einige Gigabyte (GBs) überschreiten, können hohe Kosten verursachen. Wir empfehlen, dass Sie die Kosten berücksichtigen, bevor Sie eine vollständige Tabellenoperation durchführen. SCAN Weitere Informationen finden Sie unter Amazon DynamoDB – Preise. Um die Kosten zu senken und eine hohe Leistung zu erzielen, empfehlen wir, LIMIT in Ihrer Abfrage immer zu verwenden (z. B.SELECT * FROM table1 LIMIT 10). Bevor Sie eine JOIN oder GROUP BY-Abfrage in einer Produktionsumgebung ausführen, sollten Sie außerdem die Größe Ihrer Tabellen berücksichtigen. Wenn Ihre Tabellen zu groß sind, ziehen Sie alternative Optionen in Betracht, z. B. die Migration der Tabelle zu Amazon S3.

Architektur

Das folgende Diagramm zeigt, wie ein Benutzer eine SQL Abfrage für eine DynamoDB-Tabelle von Athena aus ausführen kann.

Workflow für die Verbindung von Athena und DynamoDB zur Ausführung einer Abfrage. SQL

Das Diagramm zeigt den folgenden Workflow:

  1. Um eine DynamoDB-Tabelle abzufragen, führt ein Benutzer eine SQL Abfrage von Athena aus.

  2. Athena initiiert eine Lambda-Funktion.

  3. Die Lambda-Funktion fragt die angeforderten Daten in der DynamoDB-Tabelle ab.

  4. DynamoDB gibt die angeforderten Daten an die Lambda-Funktion zurück. Anschließend überträgt die Funktion die Abfrageergebnisse über Athena an den Benutzer.

  5. Die Lambda-Funktion speichert Daten im S3-Bucket.

Technologie-Stack

  • Amazon Athena

  • Amazon-DynamoDB

  • Amazon S3

  • AWSLambda

Tools

  • Amazon Athena ist ein interaktiver Abfrageservice, mit dem Sie Daten mithilfe von Standards SQL direkt in Amazon S3 analysieren können.

  • Amazon Athena DynamoDB Connector ist ein AWS Tool, das es Athena ermöglicht, sich mit DynamoDB zu verbinden und mithilfe von Abfragen auf Ihre Tabellen zuzugreifen. SQL

  • Amazon DynamoDB ist ein vollständig verwalteter Service ohne SQL Datenbank, der eine schnelle, vorhersehbare und skalierbare Leistung bietet.

  • AWSLambda ist ein Rechendienst, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Er führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie die erste Beispieltabelle.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die DynamoDB-Konsole.

  2. Wählen Sie Create table (Tabelle erstellen) aus.

  3. Geben Sie als Tabellenname dydbtable1 ein.

  4. Geben Sie als Partitionsschlüssel ein. PK1

  5. Geben Sie als Sortierschlüssel ein SK1.

  6. Wählen Sie im Bereich Tabelleneinstellungen die Option Einstellungen anpassen aus.

  7. Wählen Sie im Abschnitt Tabellenklasse die Option DynamoDB Standard aus.

  8. Wählen Sie im Abschnitt Lese-/Schreibkapazitätseinstellungen für den Kapazitätsmodus die Option On-Demand aus.

  9. Wählen Sie im Abschnitt Verschlüsselung im Ruhezustand die Option Owned by Amazon DynamoDB aus.

  10. Wählen Sie Create table (Tabelle erstellen) aus.

Developer

Fügen Sie Beispieldaten in die erste Tabelle ein.

  1. Öffnen Sie die DynamoDB-Konsole.

  2. Wählen Sie im Navigationsbereich Tabelle und dann Ihre Tabelle in der Spalte Name aus.

  3. Wählen Sie Aktionen und dann Element erstellen aus.

  4. Wählen Sie „JSONAnsicht“.

  5. Deaktivieren Sie in der Titelleiste des Attributs-Editors View DynamoDB JSON.

  6. Geben Sie im Attribut-Editor nacheinander die folgenden Beispieldaten ein:

{ "PK1": "1234", "SK1": "info", "Salary": "5000" }
{ "PK1": "1235", "SK1": "info", "Salary": "5200" }
Developer

Erstellen Sie die zweite Beispieltabelle.

  1. Öffnen Sie die DynamoDB-Konsole.

  2. Wählen Sie Create table aus.

  3. Geben Sie als Tabellenname dydbtable2 ein.

  4. Geben Sie für Partition key (Partitionsschlüssel) den Wert PK2 ein.

  5. Geben Sie als Sortierschlüssel ein. SK2

  6. Wählen Sie im Bereich Tabelleneinstellungen die Option Einstellungen anpassen aus.

  7. Wählen Sie im Abschnitt Tabellenklasse die Option DynamoDB Standard aus.

  8. Wählen Sie im Abschnitt Lese-/Schreibkapazitätseinstellungen für den Kapazitätsmodus die Option On-Demand aus.

  9. Wählen Sie im Abschnitt Verschlüsselung im Ruhezustand die Option Owned by Amazon DynamoDB aus.

  10. Wählen Sie Create table (Tabelle erstellen) aus.

Developer

Fügen Sie Beispieldaten in die zweite Tabelle ein.

  1. Öffnen Sie die DynamoDB-Konsole.

  2. Wählen Sie im Navigationsbereich Tabelle und dann Ihre Tabelle in der Spalte Name aus.

  3. Wählen Sie Aktionen und dann Element erstellen aus.

  4. Deaktivieren Sie in der Titelleiste des Attributs-Editors View DynamoDB JSON.

  5. Geben Sie im Attribut-Editor nacheinander die folgenden Beispieldaten ein:

{ "PK2": "1234", "SK2": "bonus", "Bonus": "500" }
{ "PK2": "1235", "SK2": "bonus", "Bonus": "1000" }
Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Richten Sie den Datenquellenkonnektor ein.

Erstellen Sie eine Datenquelle für DynamoDB und anschließend eine Lambda-Funktion, um eine Verbindung zu dieser Datenquelle herzustellen.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Athena-Konsole.

  2. Wählen Sie im Navigationsbereich Datenquellen und dann Datenquelle erstellen aus.

  3. Wählen Sie die Amazon DynamoDB DynamoDB-Datenquelle aus und klicken Sie dann auf Weiter.

  4. Geben testDynamo Sie im Abschnitt Datenquellendetails als Datenquellenname DB ein.

  5. Wählen Sie im Abschnitt Verbindungsdetails eine Lambda-Funktion aus, die bereits bereitgestellt wurde, oder wählen Sie Lambda-Funktion erstellen, wenn Sie keine Lambda-Funktion für dieses Muster verwenden können. Hinweis: Weitere Informationen zum Erstellen einer Lambda-Funktion finden Sie unter Getting started with Lambda im Lambda Developer Guide.

  6. (Optional) Wenn Sie Lambda-Funktion erstellen wählen, müssen Sie die AWS CloudFormation Vorlage konfigurieren, die in der Java-Anwendung enthalten ist, bevor Sie diesen Stack bereitstellen. Die Vorlage enthält ApplicationName, SpillBucket AthenaCatalogName, und andere Anwendungseinstellungen. Hinweis: Nachdem Sie diese Java-basierte Anwendung bereitgestellt haben, erstellt der Stack eine Lambda-Funktion, die es Athena ermöglicht, mit DynamoDB zu kommunizieren. Dadurch können Sie über Befehle auf Ihre Tabellen zugreifen. SQL

  7. Stellen Sie Ihre Lambda-Funktion bereit.

  8. Wählen Sie Weiter.

Developer

Stellen Sie sicher, dass die Lambda-Funktion auf den S3-Spill-Bucket zugreifen kann.

  1. Öffnen Sie die Lambda-Konsole.

  2. Wählen Sie im Navigationsbereich Funktionen und dann die Funktion aus, die Sie zuvor erstellt haben.

  3. Wählen Sie die Registerkarte Konfiguration aus.

  4. Wählen Sie im linken Bereich die Option Umgebungsvariablen aus, und vergewissern Sie sich dann, dass der Wert für den Schlüssel lautetspill_bucket.

  5. Wählen Sie im linken Bereich Berechtigungen und dann im Abschnitt Ausführungsrolle die zugeordnete IAM Rolle aus. Hinweis: Sie werden zu der IAM Rolle weitergeleitet, die Ihrer Lambda-Funktion in der IAM Konsole zugewiesen ist.

  6. Vergewissern Sie sich, dass Sie Schreibberechtigungen für den spill_bucket Bucket haben.

Wenn Sie auf Fehler stoßen, finden Sie im Abschnitt Zusätzliche Informationen in diesem Muster eine Anleitung.

Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Fragen Sie die DynamoDB-Tabellen ab.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Athena-Konsole.

  2. Wählen Sie im Navigationsbereich Datenquellen und dann Datenquelle erstellen aus.

  3. Wählen Sie im Navigationsbereich die Option Query Editor (Abfrage-Editor) aus.

  4. Wählen Sie auf der Registerkarte Editor im Bereich Daten für Datenquelle Ihre Datenquelle aus.

  5. Als Datenbank wählen Sie Ihre Datenbank aus.

  6. Geben Sie für Abfrage 1 die folgende Abfrage ein: SELECT * FROM dydbtable1 t1;

  7. Wählen Sie Ausführen aus, und überprüfen Sie dann die Ausgabe in der Tabelle.

  8. Geben Sie für Abfrage 2 die folgende Abfrage ein: SELECT * FROM dydbtable2 t2;

  9. Wählen Sie Ausführen aus, und überprüfen Sie dann die Ausgabe in der Tabelle.

Developer

Verbinden Sie die beiden DynamoDB-Tabellen.

DynamoDB ist ein SQL Datenspeicher ohne Daten und unterstützt den SQL Join-Vorgang nicht. Folglich müssen Sie einen Join-Vorgang für zwei DynamoDB-Tabellen ausführen:

  1. Wählen Sie das Plussymbol, um eine weitere Abfrage zu erstellen.

  2. Geben Sie für Abfrage 3 die folgende Abfrage ein:

SELECT pk1, salary, bonus FROM dydbtable1 t1 JOIN dydbtable2 t2 ON t1.pk1 = t2.pk2;
Developer

Zugehörige Ressourcen

Zusätzliche Informationen

Wenn Sie in Athena eine Abfrage mit spill_bucket im {bucket_name}/folder_name/ Format ausführen, erhalten Sie möglicherweise die folgende Fehlermeldung:

"GENERIC_USER_ERROR: Encountered an exception[java.lang.RuntimeException] from your LambdaFunction[arn:aws:lambda:us-east-1:xxxxxx:function:testdynamodb] executed in context[retrieving meta-data] with message[You do NOT own the spill bucket with the name: s3://amzn-s3-demo-bucket/athena_dynamodb_spill_data/] This query ran against the "default" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: [query-id]"

Um diesen Fehler zu beheben, aktualisieren Sie die Umgebungsvariable der Lambda-Funktion spill_bucket auf {bucket_name_only} und aktualisieren Sie dann die folgende IAM Lambda-Richtlinie für den Bucket-Schreibzugriff:

{ "Action": [ "s3:GetObject", "s3:ListBucket", "s3:GetBucketLocation", "s3:GetObjectVersion", "s3:PutObject", "s3:PutObjectAcl", "s3:GetLifecycleConfiguration", "s3:PutLifecycleConfiguration", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::spill_bucket", "arn:aws:s3:::spill_bucket/*" ], "Effect": "Allow" }

Alternativ können Sie den Athena-Datenquellenconnector, den Sie zuvor erstellt haben, entfernen und ihn neu erstellen, indem Sie nur {bucket_name} für verwenden. spill_bucket