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

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.

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

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'
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.

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