

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Accédez aux tables Amazon DynamoDB, interrogez-les et joignez-les à l'aide d'Athena
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena"></a>

*Moinul Al-Mamun, Amazon Web Services*

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

Ce modèle explique comment configurer une connexion entre Amazon Athena et Amazon DynamoDB à l'aide du connecteur Amazon Athena DynamoDB. Le connecteur utilise une fonction AWS Lambda pour interroger les données dans DynamoDB. Vous n'avez pas besoin d'écrire de code pour configurer la connexion. Une fois la connexion établie, vous pouvez accéder rapidement aux tables DynamoDB et les analyser en utilisant [Athena Federated Query pour exécuter des commandes SQL depuis Athena](https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-source.html). Vous pouvez également joindre une ou plusieurs tables DynamoDB entre elles ou à d'autres sources de données, telles qu'Amazon Redshift ou Amazon Aurora.

## Conditions préalables et limitations
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif autorisé à gérer les tables DynamoDB, les sources de données Athena, Lambda et les rôles AWS Identity and Access Management (IAM)
+ Un bucket Amazon Simple Storage Service (Amazon S3) dans lequel Athena peut stocker les résultats des requêtes
+ Un compartiment S3 dans lequel le connecteur Athena DynamoDB peut enregistrer les données à court terme
+ Une région AWS qui prend en charge la version 2 [du moteur Athena](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference-0002.html)
+ Autorisations IAM pour accéder à Athena et aux compartiments S3 requis
+ [Connecteur Amazon Athena DynamoDB](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb), installé

**Limites**

L'interrogation des tables DynamoDB entraîne un coût. Les tailles de table supérieures à quelques gigaoctets (GBs) peuvent entraîner des coûts élevés. Nous vous recommandons de tenir compte des coûts avant d'effectuer une opération de numérisation complète de la table. Pour plus d’informations, consultez [Tarification Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/). Pour réduire les coûts et atteindre des performances élevées, nous vous recommandons de toujours utiliser LIMIT dans votre requête (par exemple,`SELECT * FROM table1 LIMIT 10`). Par ailleurs, avant d'exécuter une requête JOIN ou GROUP BY dans un environnement de production, tenez compte de la taille de vos tables. Si vos tables sont trop volumineuses, envisagez d'autres options, telles que [la migration de la table vers Amazon S3](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/).

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

Le schéma suivant montre comment un utilisateur peut exécuter une requête SQL sur une table DynamoDB à partir d'Athena.

![\[Flux de travail permettant de connecter Athena et DynamoDB pour exécuter une requête SQL.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e6ff94af-d208-40c7-94e4-af257755a603/images/bc8e0132-b578-463b-bf55-3c39ce359c17.png)


Le schéma suivant illustre le flux de travail suivant :

1. Pour interroger une table DynamoDB, un utilisateur exécute une requête SQL depuis Athena.

1. Athena lance une fonction Lambda.

1. La fonction Lambda interroge les données demandées dans la table DynamoDB.

1. DynamoDB renvoie les données demandées à la fonction Lambda. Ensuite, la fonction transfère les résultats de la requête à l'utilisateur via Athena.

1. La fonction Lambda stocke les données dans le compartiment S3.

**Pile technologique**
+ Amazon Athena
+ Amazon DynamoDB
+ Amazon S3
+ AWS Lambda

## Outils
<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) est un service de requête interactif qui vous permet d'analyser les données directement dans Amazon S3 à l'aide du SQL standard.
+ Le [connecteur Amazon Athena DynamoDB est un outil AWS qui permet à Athena de se connecter à DynamoDB](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb) et d'accéder à vos tables à l'aide de requêtes SQL.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous permet d'exécuter du code sans avoir à provisionner ou à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.

## Épopées
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-epics"></a>

### Création d'exemples de tables DynamoDB
<a name="create-sample-dynamodb-tables"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le premier exemple de table.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Insérez des exemples de données dans le premier tableau. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/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 | 
| Créez le deuxième exemple de table.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Insérez des exemples de données dans le deuxième tableau. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/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 | 

### Création d'une source de données dans Athena pour DynamoDB
<a name="create-a-data-source-in-athena-for-dynamodb"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le connecteur de source de données. | Créez une source de données pour DynamoDB, puis créez une fonction Lambda pour vous connecter à cette source de données.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Vérifiez que la fonction Lambda peut accéder au compartiment de déversement S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)Si vous rencontrez des erreurs, consultez la section *Informations supplémentaires* de ce modèle pour obtenir des conseils. | Developer | 

### Accédez aux tables DynamoDB depuis Athena
<a name="access-dynamodb-tables-from-athena"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Interrogez les tables DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Joignez les deux tables DynamoDB. | DynamoDB est un magasin de données NoSQL qui ne prend pas en charge l'opération de jointure SQL. Par conséquent, vous devez effectuer une opération de jointure sur deux tables DynamoDB :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/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 | 

## Ressources connexes
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-resources"></a>
+ [Connecteur Amazon Athena DynamoDB (AWS Labs)](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb)
+ [Interrogez n'importe quelle source de données avec la nouvelle requête fédérée d'Amazon Athena](https://aws.amazon.com/blogs/big-data/query-any-data-source-with-amazon-athenas-new-federated-query/) (blog AWS Big Data)
+ [Référence de version du moteur Athena](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference.html) (Guide de l'utilisateur Athena)
+ [Simplifiez l'extraction et l'analyse des données Amazon DynamoDB en utilisant AWS Glue et Amazon Athena](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/) (blog de base de données AWS)

## Informations supplémentaires
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-additional"></a>

Si vous exécutez une requête dans Athena `spill_bucket` au `{bucket_name}/folder_name/` format, le message d'erreur suivant peut s'afficher :

```
"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]"
```

Pour résoudre cette erreur, mettez à jour la variable d'environnement de la fonction Lambda `spill_bucket` vers`{bucket_name_only}`, puis mettez à jour la politique Lambda IAM suivante pour l'accès en écriture au bucket :

```
{
             "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"
        }
```

Vous pouvez également supprimer le connecteur de source de données Athena que vous avez créé précédemment et le recréer en utilisant uniquement pour. `{bucket_name}` `spill_bucket`