AWS S3 – 2 (Select Query w/ Parquet)

AWS S3 hizmetini kullanırken genel kabul gören dosya formatlarından biri olan Parquet formatı ne sağlar? Ve depolanan dosyalar SQL sorgusu ile sorgulanabilir mi?  

 

Parquet Dosya Formatı
Parquet; CSV, JSON, XML dosya formatları gibi içeriğinde belirli standartlarda veri tutulmasını sağlayan bir dosya formatıdır. CSV’den farklı olarak veriyi kolon bazında saklar;
Parquet dosya formatının (CSV‘ye göre) avantajları ise;
  • Dosya boyutu daha küçüktür. Her veri sütun bazlı saklandığı ve sütun veri tipide tüm dosya içindeki ilgili sütunda aynı olduğundan veri sıkıştırma performansı çok daha iyidir. Örneğin; 1 TB’lık bir CSV dosyası, yaklaşık 100 GB’lık (orijinal boyutun %10’u) bir Parquet dosyasına dönüştürülür.
  • Sorgu performansı çok daha hızlıdır. Sütun bazlı tutulan veri seti çok daha hızlı taranıp çıkarılabilir. Örneğin, sütun alt kümesi üzerinde yapılan aggregate işlemler SQL sorgusunun diğer sütunlarını taramasına gerek kalmadan gerçekleşir. Bu da, I/O maliyetini azaltır ve daha hızlı sorgulama sağlar.
  • Bulut sistemlerde depolanma maliyeti daha düşüktür. AWS S3 veya Google Cloud Storage gibi hizmetler veri boyutuna veya taranan veri miktarına göre sizden ücret alır. Parke dosyaları daha hafiftir ve taranması daha hızlıdır, bu da aynı verileri maliyetin çok altında depolayabileceğiniz anlamına gelir.

Python Boto3 ile S3’ye Dosya Upload

Boto3 kütüphanesi ile localde bulunan bir dosyayı S3 bucket konumuna upload aşağıdaki şekilde sağlanabilir.

 S3 Upload File
import boto3
def s3_upload_file():
    LOCAL_FILENAME = 'D:/dev_python/aws_s3/userdata1.parquet'

    session = boto3.session.Session(
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key
    )
    s3 = session.client("s3", region_name=region_name)

    with open(LOCAL_FILENAME, 'rb') as data:
        s3.upload_fileobj(
            Fileobj=data,
            Bucket='boto-samples',
            Key='userdata1.parquet'
        )

if __name__ == '__main__':
    s3_upload_file()

OUTPUT:
D:\dev_python\aws_s3\venv\Scripts\python.exe D:\dev_python\aws_s3\main.py 
Process finished with exit code 0

S3’de Tutulan Parquet Dosyası Üzerinde SQL Sorgusu

Bucket altında yer alan userdata1.parquet dosyası seçilir. Ardından Actions kısmından Query with S3 Select seçilir.

Açılan ekranda sorgu atılacak dosya formatı olarak Apache Parquet seçilir. Sorgudan dönen sonucun görünüm formatının tablo formatında olması içinde Output settings kısmındaki Format: CSV ve CSV Delimiter: Tab  seçenekleri işaretlenir.

Son olarak sorgu ekranından en temel sorgu örneği aşağıdaki şekilde gerçekleştirilebilir. 🙂

Kaynaklar:

__________________________________________________________________________

Ali Mesut Karadeniz

Yorum bırakın