[PYTHON] [AWS] Recherchez et acquérez les données nécessaires à partir des fichiers S3 avec S3 Select

Chose que tu veux faire

Je souhaite utiliser S3 Sélectionnez pour rechercher des fichiers S3 avec une requête SQL pour obtenir les enregistrements requis. Qiita logo

Un heureux événement

Points de sélection S3

Essayez de fonctionner à partir de l'écran de la console de S3

Cette fois, nous placerons un exemple de fichier au format suivant sur S3 et le vérifierons.

sample.tsv


male	14	student
female	26	employee
male	32	selfemployed
male	45	unemployed
female	11	student
male	24	employee
male	33	selfemployed
male	49	unemployed
female	57	unemployed

Sélectionnez le fichier cible sur l'écran de la console S3 et sélectionnez l'onglet Sélection S3. 1.png

Format de fichier: CSV Délimiteur: Tabulation Compression: aucune "prochain" 2.png

Entrez le SQL que vous souhaitez exécuter. Je voudrais obtenir un disque dont la première colonne est "femme".

SQL


select * from s3object s where s._1 = 'female'

3.png J'ai pu l'obtenir correctement. Vous pouvez le télécharger sous forme de fichier CSV en cliquant sur "Télécharger".

Il existe des exemples de SQL, alors essayez-les. 5.png

Exécuter une requête SQL en Python à partir d'une instance EC2

Nous allons également essayer le modèle d'exécution de requêtes SQL en Python à partir d'une instance EC2. Tout d'abord, installez le Python requis.

#Installez Python 3
$ sudo yum update -y
$ sudo yum install python3 -y

#Activer l'environnement virtuel
$ python3 -m venv ~/s3select_example/env
$ source ~/s3select_example/env/bin/activate

#installer boto3
$ pip install pip --upgrade
$ pip install boto3

Ensuite, créez un fichier Python.

S3Select.py


import boto3

s3 = boto3.client('s3')

resp = s3.select_object_content(
    Bucket='my-bucket.01',
    Key='sample/sample.tsv',
    ExpressionType='SQL',
    Expression="SELECT * FROM s3object s where s._1 = 'female'",
    InputSerialization = {'CSV': {"FileHeaderInfo": "NONE", 'FieldDelimiter': '\t'}, 'CompressionType': 'NONE'},
    OutputSerialization = {'CSV': {}},
)

for event in resp['Payload']:
    if 'Records' in event:
        records = event['Records']['Payload'].decode('utf-8')
        print(records)

Faites correspondre Bucket et Key au fichier à lire par S3. De plus, puisque le fichier cible est cette fois délimité par des tabulations, "'\ t'" est spécifié pour le délimiteur de champ de sérialisation d'entrée.

Lançons-le.

$ python S3Select.py

female,26,employee
female,11,student
female,57,unemployed

Le même enregistrement que le résultat de l'exécution à partir de l'écran de la console a été produit!

Cette fois, j'ai recherché le fichier S3 directement avec une requête SQL et j'ai récupéré l'enregistrement cible. J'enquête parfois sur les fichiers S3, j'aimerais donc les utiliser si j'en ai l'occasion.

Référence: https://aws.amazon.com/jp/blogs/news/querying-data-without-servers-or-databases-using-amazon-s3-select/

Recommended Posts

[AWS] Recherchez et acquérez les données nécessaires à partir des fichiers S3 avec S3 Select
[AWS] Associez Lambda et S3 à boto3
Paramètres de lecture de fichiers S3 avec des pandas depuis Jupyter Notebook sur AWS
Extraction de données depuis S3
Agréger les données AWS S3
Premiers pas avec le dessin avec matplotlib: création de diagrammes à partir de fichiers de données
Répétez avec While. Script pour tweeter ou rechercher depuis le terminal
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Manipulation des données Kintone avec le pilote ODBC Python & C Data d'AWS Lambda
Mettez à jour les données en les téléchargeant sur s3 d'aws avec une commande, et supprimez les données utilisées (en chemin)
Téléchargeons des fichiers S3 avec CLI
Lire et utiliser des fichiers Python à partir de Python
Installez le fichier de données avec setup.py
Enregistrer et récupérer des fichiers avec Pepper
Tests faciles d'AWS S3 avec MinIO
Gérez vos données avec AWS RDS
Accédez à l'API Web avec Python et enregistrez / acquérez des données IoT (dweet.io, Requests, HTTPie)
Détection de visage à partir de plusieurs fichiers image avec openCV, découpez et enregistrez
Depuis pandas1.0.0, vous pouvez spécifier l'URL S3 / GCS avec read_pickle () et to_pickle ()!
Copier des données d'Amazon S3 vers Google Cloud Storage avec Python (boto)
Créez un arbre de décision à partir de 0 avec Python et comprenez-le (4. Structure des données)