Interroger des données S3 comme une base de données avec AWS Athena
Athena est un service AWS qui peut analyser les données stockées dans S3 et renvoyer des résultats basés sur des requêtes, à l'aide d'instructions SQL standard que vous utiliseriez pour une base de données traditionnelle. Il est particulièrement utile pour extraire des données de CSV et de fichiers texte volumineux.
Combien coûte Athena?
Athena n'a qu'une seule charge: Go de données traitées. Le tarif en vigueur est de 5 USD par To, soit environ 0,005 USD par Go. C'est déjà assez bon marché à moins que vous ne traitiez des fichiers gigantesques (ce qu'Athena peut certainement), mais il existe plusieurs façons de réduire encore plus ce coût.
Tout d'abord, Athena soutient gzip
compression, dont vous devriez profiter. Les fichiers texte se compressent étonnamment bien, et il n'est pas rare de voir des gains de compression 3: 1 ou même 4: 1. Si Athena doit analyser l'intégralité du fichier, vous obtiendrez des économies de 70 à 80% s'il est compressé avec un gzip.
Athena prend également en charge un format en colonnes avec Apache Parquet. Si vous utilisez Parquet sur CSV, Athena peut limiter la recherche à des colonnes spécifiques, ce qui vous permet d'économiser beaucoup d'argent dans le processus.
Vraiment, Athena est assez bon marché, mais le coût est là pour inciter les gens à utiliser Parquet et gzipping. Si vous souhaitez apprendre à convertir automatiquement vos fichiers CSV au format Parquet, vous pouvez le faire avec AWS Glue.
Comment commencer
Rendez-vous sur la console Athena et choisissez «Commencer». Vous serez redirigé vers l'éditeur de requêtes, où il existe déjà un exemple de base de données et de table créés pour vous. Vous pouvez jouer avec cela si vous le souhaitez, mais une fois que vous avez terminé, allez-y et créez une nouvelle base de données:
CREATE DATABASE PRIMARY
Sélectionnez la base de données dans la barre latérale une fois qu'elle est créée. Cliquez sur "Créer une table" et sélectionnez "à partir des données du compartiment S3":
Téléchargez vos données sur S3 et sélectionnez «Copier le chemin» pour obtenir un lien vers celui-ci. Vous souhaiterez créer un nouveau dossier dans lequel stocker le fichier, même si vous n'avez qu'un seul fichier, car Athena s'attend à ce qu'il se trouve dans au moins un dossier.
De retour dans la console Athena, entrez le chemin du dossier contenant vos données (pas un chemin de fichier direct), et donnez un nom à votre table. Assurez-vous qu'il est importé dans la même base de données que vous avez créée auparavant.
Ensuite, sélectionnez votre type de données. Athena prend en charge un certain nombre d'options, telles que les journaux de serveur Web standard, CSV et TSV, JSON et les délimiteurs personnalisés.
Ensuite, vous indiquerez à Athena comment vos données sont structurées, en ajoutant des noms pour chaque colonne. Vous pouvez ajouter des colonnes manuellement ou en bloc (l'option la plus simple).
Pour ajouter des colonnes de manière groupée, vous devez générer des paires clé-valeur avec le nom de la colonne et le type de données, comme suit:
emailaddress string
Si votre fichier CSV comporte des en-têtes de colonne, vous pouvez diriger le fichier vers head
pour saisir l'en-tête, et pour sed
pour ajouter une valeur. Le script suivant définit chaque colonne sur le type "Chaîne":
cat search.csv | head -n1 | sed 's/((^,)*)/1 string/g'
Vous pouvez le changer pour le type correct dans la console Athena, mais il doit être formaté comme ceci pour qu'Athena l'accepte du tout.
Une fois que vous avez terminé de configurer les colonnes, créez la table, et vous serez ramené à l'éditeur de requête et affiché la requête utilisée pour créer la table. Vous verrez également le tableau nouvellement créé dans la barre latérale.
Si tout fonctionnait correctement, vous devriez maintenant pouvoir accéder aux données de votre table depuis Athena.
Athena utilise la syntaxe SQL standard, vous pouvez donc interroger cette base de données virtuelle et cette table exactement comme vous le feriez pour n'importe quelle autre base de données:
SELECT * FROM mtg WHERE cmc > 4
Vous pouvez ajouter plusieurs tables qui extraient des données de différents dossiers S3 et les interroger de la même manière.