Ich möchte S3 Select verwenden, um S3-Dateien mit einer SQL-Abfrage zu durchsuchen, um die erforderlichen Datensätze zu erhalten.
Dieses Mal platzieren wir eine Beispieldatei im folgenden Format in S3 und überprüfen sie.
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
Wählen Sie die Zieldatei auf dem S3-Konsolenbildschirm aus und wählen Sie die Registerkarte S3-Auswahl.
Dateiformat: CSV Trennzeichen: Tab Komprimierung: Keine "Nächster"
Geben Sie die SQL ein, die Sie ausführen möchten. Ich möchte eine Aufzeichnung erhalten, deren erste Spalte "weiblich" ist.
SQL
select * from s3object s where s._1 = 'female'
Ich konnte es richtig bekommen. Sie können es als CSV-Datei herunterladen, indem Sie auf "Download" klicken.
Es gibt einige Beispiel-SQLs. Probieren Sie sie aus.
Wir werden auch versuchen, SQL-Abfragen in Python von einer EC2-Instanz aus auszuführen. Installieren Sie zunächst das erforderliche Python.
#Installieren Sie Python 3
$ sudo yum update -y
$ sudo yum install python3 -y
#Virtuelle Umgebung aktivieren
$ python3 -m venv ~/s3select_example/env
$ source ~/s3select_example/env/bin/activate
#installiere boto3
$ pip install pip --upgrade
$ pip install boto3
Erstellen Sie als Nächstes eine Python-Datei.
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)
Ordnen Sie Bucket und Key der Datei zu, die von S3 gelesen werden soll. Da die Zieldatei diesmal durch Tabulatoren getrennt ist, wird für den Feldtrenner der Eingabeserialisierung "'\ t'" angegeben.
Lass es uns laufen.
$ python S3Select.py
female,26,employee
female,11,student
female,57,unemployed
Der gleiche Datensatz wie das Ergebnis der Ausführung über den Konsolenbildschirm wurde ausgegeben!
Dieses Mal habe ich die S3-Datei direkt mit einer SQL-Abfrage durchsucht und den Zieldatensatz abgerufen. Ich untersuche manchmal S3-Dateien, daher würde ich sie gerne verwenden, wenn ich die Gelegenheit dazu habe.
Referenz: https://aws.amazon.com/jp/blogs/news/querying-data-without-servers-or-databases-using-amazon-s3-select/
Recommended Posts