

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
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena"></a>

*Moinul Al-Mamun, Amazon Web Services*

## Zusammenfassung
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-summary"></a>

Dieses Muster zeigt Ihnen, wie Sie mithilfe des Amazon Athena DynamoDB-Connectors eine Verbindung zwischen Amazon Athena und Amazon DynamoDB einrichten. Der Connector 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](https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-source.html) verwenden, um SQL-Befehle von Athena auszuführen. 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
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto mit Berechtigungen zur Verwaltung von DynamoDB-Tabellen, Athena-Datenquellen, Lambda und AWS Identity and Access Management (IAM) -Rollen
+ 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](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference-0002.html) unterstützt
+ IAM-Berechtigungen für den Zugriff auf Athena und die erforderlichen S3-Buckets
+ [Amazon Athena DynamoDB Connector](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb), 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 einen vollständigen Tabellen-SCAN-Vorgang durchführen. Weitere Informationen finden Sie unter [Amazon DynamoDB – Preise](https://aws.amazon.com/dynamodb/pricing/). Um die Kosten zu senken und eine hohe Leistung zu erzielen, empfehlen wir, in Ihrer Abfrage immer LIMIT 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](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/).

## Architektur
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-architecture"></a>

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 SQL-Abfrage.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/e6ff94af-d208-40c7-94e4-af257755a603/images/bc8e0132-b578-463b-bf55-3c39ce359c17.png)


Das Diagramm zeigt den folgenden Workflow:

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

1. Athena initiiert eine Lambda-Funktion.

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

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

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

**Technologie-Stack**
+ Amazon Athena
+ Amazon DynamoDB
+ Amazon S3
+ AWS Lambda

## Tools
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-tools"></a>
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) ist ein interaktiver Abfrageservice, mit dem Sie Daten mithilfe von Standard-SQL direkt in Amazon S3 analysieren können.
+ [Amazon Athena DynamoDB Connector](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb) ist ein AWS-Tool, mit dem Athena mithilfe von SQL-Abfragen eine Verbindung mit DynamoDB herstellen und auf Ihre Tabellen zugreifen kann.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) ist ein vollständig verwalteter NoSQL-Datenbank-Service, der schnelle und planbare Leistung mit nahtloser Skalierbarkeit bereitstellt.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) ist ein Rechenservice, 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
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-epics"></a>

### DynamoDB-Beispieltabellen erstellen
<a name="create-sample-dynamodb-tables"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie die erste Beispieltabelle.  | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Fügen Sie Beispieldaten in die erste Tabelle ein. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>{<br />  "PK1": "1234",<br />  "SK1": "info",<br />  "Salary": "5000"<br /> }</pre><pre>{<br />  "PK1": "1235",<br />  "SK1": "info",<br />  "Salary": "5200"<br /> }</pre> | Developer | 
| Erstellen Sie die zweite Beispieltabelle.  | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Fügen Sie Beispieldaten in die zweite Tabelle ein. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>{<br />  "PK2": "1234",<br /> "SK2": "bonus",<br /> "Bonus": "500"<br />}</pre><pre>{<br />  "PK2": "1235",<br /> "SK2": "bonus",<br /> "Bonus": "1000"<br />}</pre> | Developer | 

### Erstellen Sie eine Datenquelle in Athena für DynamoDB
<a name="create-a-data-source-in-athena-for-dynamodb"></a>


| Aufgabe | Description | Erforderliche 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.[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Stellen Sie sicher, dass die Lambda-Funktion auf den S3-Spill-Bucket zugreifen kann. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)Wenn Sie auf Fehler stoßen, finden Sie im Abschnitt *Zusätzliche Informationen* in diesem Muster eine Anleitung. | Developer | 

### Greifen Sie von Athena aus auf DynamoDB-Tabellen zu
<a name="access-dynamodb-tables-from-athena"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Fragen Sie die DynamoDB-Tabellen ab. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Verbinden Sie die beiden DynamoDB-Tabellen. | DynamoDB ist ein NoSQL-Datenspeicher und unterstützt den SQL-Join-Vorgang nicht. Folglich müssen Sie einen Join-Vorgang für zwei DynamoDB-Tabellen ausführen:[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>SELECT pk1, salary, bonus FROM dydbtable1 t1<br /> JOIN dydbtable2 t2 ON t1.pk1 = t2.pk2;</pre> | Developer | 

## Zugehörige Ressourcen
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-resources"></a>
+ [Amazon Athena DynamoDB-Konnektor (AWS Labs](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb))
+ [Abfragen beliebiger Datenquellen mit der neuen Verbundabfrage von Amazon Athena](https://aws.amazon.com/blogs/big-data/query-any-data-source-with-amazon-athenas-new-federated-query/) (AWS Big Data Blog)
+ [Versionsreferenz der Athena-Engine](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference.html) (Athena-Benutzerhandbuch)
+ [Vereinfachen Sie die Datenextraktion und -analyse mit Amazon DynamoDB mithilfe von AWS Glue und Amazon Athena (AWS-Datenbank-Blog](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/))

## Zusätzliche Informationen
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-additional"></a>

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 Lambda-IAM-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`