Le Blog Amazon Web Services
Comment effectuer des analyses avancées et visualiser vos données Amazon DynamoDB à l’aide d’Amazon Athena
Vous pouvez tirer énormément de valeur des milliards d’éléments contenu par votre base de donnée Amazon DynamoDB en en exécutant des millions de requêtes par seconde. Cependant, afin d’obtenir des informations riches, il être préférable mettre en place un pipeline Analytics qui sépare les traitements transactionnels effectués sur la base de donnée et l’analyse. Cet article vous montre comment créer un pipeline Analytics qui transfère les données de votre table DynamoDB vers Amazon S3. Vous pourrez ainsi effectuer des analyses avancées à l’aide d’Amazon Athena, un service de requête entièrement managé basé sur Presto, ainsi que des tableaux de bord et des analyses ad hoc à l’aide d’ Amazon QuickSight.
Afin de tirer parti des nouvelles technologies de calcul à mesure qu’elles arrivent, la plupart des applications Big Data ont un pipeline conçue pour séparer les fonctionnalités de stockage et de calcul. Ce découplage permet d’adapter le provisionnement des ressources de calcul en fonction des besoins d’analyse sans affecter le stockage et la durabilité des données. Vous pouvez également concevoir votre pipeline de sorte que les étapes de stockage et de traitement se répètent afin de façonner les données dans un format que les applications peuvent ensuite consommer rapidement.
Trois caractéristiques principales influencent la conception d’un pipeline Analytics :
- Latence du pipeline global – Combien de temps avez-vous depuis l’ingestion des données à la production des indicateurs? Millisecondes, minutes ou jours ?
- Volume des données – Quelle quantité de données doit être ingérée et traitée ? S’agit-il de gigaoctets, de téraoctets ou de pétaoctets ?
- Coût – Quel est le budget cible de votre application ? L’option la plus économique dans AWS est souvent le bon choix.
D’autres éléments clés sont à prendre en compte lors de la conception de votre pipeline Big Data, notamment, la structure des données, les modalités d’accès, la température des données, la disponibilité et la durabilité, ainsi que l’utilisation d’un service entièrement managé. L’utilisation du bon outil au bon endroit est la clé d’un pipeline de Big Data bien architecturé.
Création d’un Pipeline Big Data
Avant de créer un pipeline Big Data, passons en revue les principaux services et fonctionnalités utilisés par cette solution.
Fonctionnalités de DynamoDB dans votre pipeline
Dans DynamoDB, les tables, les éléments et les attributs sont les composants principaux avec lesquels vous travaillez. Une table est une collection d’éléments et chaque élément est une collection d’attributs. DynamoDB utilise des clés primaires pour identifier chaque élément d’une table. Les index secondaires offrent une plus grande flexibilité d’interrogation. Pour plus d’informations, consultez Amazon DynamoDB: Comment ça marche dans Amazon DynamoDB – Guide du développeur.
Le paramètres Time To Live (TTL) de DynamoDB permet de supprimer automatiquement les éléments qui ne sont plus pertinents afin de réduire les coûts de stockage. Dans la suite de cet article de blog, vous activez TTL sur la table et utilisez l’attribut TTL pour définir la date et l’heure de suppression d’éléments. Pour plus d’informations sur la durée de vie, consultez Time to Live: Comment cela fonctionne ?
Vous utiliserez ensuite DynamoDB Streams pour capturer une séquence ordonnée dans le temps de toutes les modifications effectuées au niveau des éléments. Ces modification seront ensuite enregistrées dans Amazon S3. Pour plus d’informations sur DynamoDB Stream, voir Capturer l’activité des tables avec DynamoDB Streams.
Fonctionnalités d’AWS Lambda dans votre pipeline
AWS Lambda est un service de calcul qui vous permet d’exécuter du code sans provisionner ni gérer de serveurs. Lambda exécute votre code uniquement lorsque cela est nécessaire et s’adapte automatiquement pour répondre à des milliers de requêtes par seconde. Lambda s’occupe de la haute disponibilité, de la maintenance des serveurs, du système d’exploitation et des correctifs. Avec Lambda, vous ne payez que le temps de calcul consommé lorsque votre code est en cours d’exécution.
Lambda offre la possibilité d’appeler votre code en réponse à des événements, par exemple lorsqu’un objet est placé dans un compartiment S3. Dans notre cas, Lambda s’execute lors de la mises à jour d’un élément de la table DynamoDB. Dans cet article, vous créez une fonction Lambda qui sera déclenchée par DynamoDB Streams pour copier des éléments vers Amazon S3 à l’aide d’Amazon Kinesis Data Firehose.
Vous pouvez copier tous les éléments vers Amazon S3 si, par exemple, vous souhaitez effectuer des analyses sur l’intégralité des données. Vous pouvez également copier uniquement les éléments supprimés en raison de leurs TTL. Ces éléments contiennent dans leurs métadonnées un attribut supplémentaire pour les distinguer des éléments supprimés par un utilisateur. Il s’agit du champ userIdentity (illustré dans l’exemple suivant) qui indique que DynamoDB a effectué la suppression dans le cadre du traitement du TTL.
Pour transférer uniquement les données qui ont expirées en raison de leur TTL, modifiez la fonction Lambda pour copier uniquement les enregistrements où eventName
est REMOVE
et userIdentity
contient PrincipalID
égal à dynamodb.amazonaws.com
.
L’intégration de Lambda dans le pipeline offre la possibilité supplémentaire d’effectuer de légères transformation sur les données avant de les stocker dans Amazon S3. La fonction Lambda de cette solution permet de “flatten” certaines des données imbriquées dans les objects JSON , ce qui peut potentiellement faciliter les jointures avec d’autres ensembles de données.
Fonctionnalités d’Amazon Athena dans votre pipeline
Athena est un service de requête interactif qui facilite l’analyse des données directement dans Amazon S3 à l’aide du standard SQL . Athena est serverless, il n’y a donc aucune infrastructure à configurer ou à gérer, et vous ne payez que pour les requêtes que vous exécutez. Athena s’adapte automatiquement, en exécutant des requêtes en parallèle, pour que les résultats soient rapides, même avec des ensembles de données volumineux et des requêtes complexes. Pour plus d’informations sur la configuration d’Athena, consultez Configuration dans Amazon Athena – Guide de l’utilisateur
Les données de DynamoDB sont importées dans Amazon S3 au format JSON. Habituellement, nous avons besoin d’un processus d’extraction, de transformation et de chargement (ETL) pour convertir les données dans un format plus adapté aux requêtes SQL. Athena utilise une autre approche connue sous le nom de “schéma en lecture”. Les définitions de table s’appliquent dynamiquement au moment de l’exécution des requêtes. Cela élimine le besoin d’un ETL pour le chargement des données. Dans cet article, nous utilisons un sérialiseur/désérialiseur JSON (SerDe) pour analyser les enregistrements JSON bruts et HIVE, un language de définition des données, pour créer une table externe. Une fois le schéma créé, vous pouvez commencer à interroger les données.
Solution d’ensemble
Après toutes ces explications, passons en revue le pipeline de bout en bout. Le schéma suivant illustre le fonctionnement de la solution.
- Votre application écrit des données dans une table DynamoDB. Pour les besoins de cet article, nous fournissons un exemple de fonction Python pour remplir la table DynamoDB à l’aide d’un jeu de données.
- La configuration du TTL de la table DynamoDB implique l’expiration et la suppression des éléments en fonction de leur l’attribut d’horodatage.
- DynamoDB stream capture une séquence chronologique des modifications au niveau des l’éléments de la table.
- Une fonction Lambda écoute DynamoDB stream et écrit les éléments dans un flux de diffusion Kinesis Data Firehose. La fonction fournie place tous les nouveaux éléments dans le flux de diffusion Kinesis Data Firehose. Vous pouvez modifier la fonction pour placer uniquement les enregistrements des éléments supprimés après l’expiration du TTL en inspectant le champ
userIdentity
des métadonnées.
- Kinesis Data Firehose envoie les données à Amazon S3.
- Une fois les données dans Amazon S3, utilisez Athena pour créer une table externe, configurer des partitions et commencer à interroger les données.
- Vous pouvez également configurer Amazon QuickSight pour visualiser les données et effectuer des requêtes ad hoc grace a Athena ou directement dans Amazon S3.
- Votre application peut interroger des données chaudes directement dans DynamoDB mais également accéder à des données analytiques par les API d’Athena ou grace à des tableau de bord d’Amazon QuickSight.
Déploiement de la solution
Le modèle AWS CloudFormation fourni déploie la table DynamoDB, le Stream DynamoDB, le bucket S3, le flux de diffusion Kinesis Data Firehose et la fonction Lambda. Vous devez configurer manuellement Athena et Amazon QuickSight comme décrit dans la section suivante, « Validation de la solution et interrogation des données ».
Pour déployer la solution :
- Téléchargez le code de la fonction Lambda ddb-to-firehose.py et chargez-le dans un bucket S3 de votre choix. Assurez-vous que le compartiment S3 se trouve dans la même région AWS où vous prévoyez de déployer la solution. Notez le nom du compartiment.
- Téléchargez le modèle CloudFormation template depuis GitHub sur votre bureau.
- Accédez à la console CloudFormation console et choisissez Crée une Stack.
- Choisissez Charger un fichier de modèle et sélectionné le modèle
ddbathenablog_cf.yaml
que vous venez de télécharger. Choisissez Suivant.
- Spécifiez un nom de pile et un nom de table DynamoDB (tel que
Films
). Spécifiez également le nom du compartiment dans lequel vous avez chargé le code de la fonction Lambda à l’étape 1. Choisissez Suivant.
- Choisissez Suivant dans les Options
- Sur la dernières page, cochez la case Je sais qu’AWS CloudFormation peut créer des ressources IAM et choisissez Soumettre.
- Attendez quelques minutes jusqu’à ce que la pile AWS CloudFormation (une collection de ressources AWS) soit entièrement déployée et que l’état
CREATE_COMPLETE
s’affiche avant de passer à la section suivante.
Validation de la solution et interrogation des données
Afin de valider la solution et de remplir rapidement la table DynamoDB, téléchargez le fichier de données et la fonction Python liés à cet article. Le script Python permet de charger le fichier de données exemple contenant des informations sur quelques milliers de films présent dans l’Internet Movie Database (IMDb). Pour chaque film, le fichier contient une année, un titre et un JSON nommé info. L’exemple de code suivant montre à quoi ressemblent les données.
Pour valider la solution et remplir la table DynamoDB :
- Téléchargez le script LoadMovieData.py et le moviedata.zip. Extrayez le fichier
moviedata.json
de l’archivemoviedata.zip
. - Modifiez le script LoadMovieData.py et mettez à jour les valeurs de
region_name
etdynamodb
.Table
correspondant à votre région AWS et au nom de la table.
- Ouvrez une fenêtre de commande et exécutez le script Python suivant pour télécharger les données.
Dès que les enregistrements sont chargés dans la table DynamoDB vous devriez voir le message suivant :
- Ouvrez la console DynamoDB console, choisissez Tables, puis la table Films et enfin Items. Vous devriez voir les 100 premiers éléments, comme illustré dans la capture d’écran suivante.
- Ouvrir la console Amazon S3 console et allez dans le bucket créé par la solution. Vous pouvez trouver le nom de ce bucket en vous rendant dans la console AWS Clouformation, selectionant la stack pour l’onglet Resources. Le contenu du Bucket S3 doit etre de la forme ci-dessous
Chaque objet dans Amazon S3 contient plusieurs enregistrements de film. Leur nombre dépend des paramètres du buffer de Data Firehose.
- Ouvrez la console Athena console. Choisissez la base de données de votre choix et collez l’instruction DDL Hive suivante, en remplaçant
LOCATION
par votre compartiment S3 contenant les données de films. Si c’est la première fois que vous utilisez Athena, consultez Démarrer dans Athena – Guide de l’utilisateur et créez d’abord une de base de données d’exemple.
Vous pouvez maintenant interroger les données à partir de la console Athena. Par exemple, exécutez la requête suivante pour obtenir une note moyenne par genre1
.
ps: L’utilisation du format parquet (format colonne) pour les fichier contenu dans le bucket s3 pourrait être un axe d’optisation afin d’améliroer les performances de ces requêttes
- Ouvrez la console Amazon QuickSight. Si c’est la première fois que vous consultez Démarrer dans Amazon QuickSight – Guide de l’utilisateur. Choisissez Dataset puis New Dataset. Sur la page Create Dataset, choisissez Athena et fournissez un nom de source de données de votre choix (comme films par exemple) et choisissez Create Data Source. Vous pouvez en voir un exemple dans la capture d’écran suivante.
- Sur la page Choose your table, illustrée ici, choisissez votre base de données et la table des films, puis choisissez Select.
- Sur la page Finish dataset creation choisissez Directly query your data puis choisissez Visualize.
- Vous créez maintenant une visualisation simple. Mettez le
genre1
etactor1
sur l’axe Y et larating
(moyenne) sur l’axe X comme montré sur la capture d’écran suivante.
- Vous pouvez maintenant voir les notes moyennes par
genre1
. Pour afficher les notes paractor1
, choisissez Drama, puis choisissez Explorer vers actor1.
Le résultat montre la note moyenne par actor1
dans le genre1
.
Conclusion
L’exemple de solution d’analyse et de visualisation de cet article montre comment exploiter les informations contenues dans les données de votre table DynamoDB. Dans cet article, vous avez créé un pipeline Big Data qui vous a permis de transférer rapidement les données de votre table DynamoDB vers un compartiment S3. Ensuite, vous effectuez des analyses avancées avec Athena et une visualisation avec Amazon QuickSight. Cette solution permet de copier toutes vos données DynamoDB vers Amazon S3. Néanmoins, vous pouvez également déplacer uniquement les enregistrements arrivés à expiration à l’aide de DynamoDB TTL. Ce type de solution découplée vous permet d’utiliser le service d’analyse optimal pour chaque étape du pipeline en fonction de considérations clés : latence, débit et coût.
Article original écrit par Roger Dahlstrom, Solutions Architect et Ilya Epshteyn, Principal Solutions Architect pour AWS et adapté en français par Thierry Valbusa, Senior Solutions Architect dans les équipes AWS France.