Azure Storage Containerdaki Parquet Dosyasının Synapse’de Pyspark ile Partitionlanarak ve Gruplanarak Sqlpool’a Tabloya Yazılması.

Kerem NOGAY
4 min readFeb 6, 2023

--

Bu çalışmada Postgresql, Oracle gibi kaynaklardan Azure — Container’a yapılan aktarımlarla yüksek boyutlu tabloların Parquet dosyası olarak yazdırılması ve sonraki süreçlerde Parquet dosyaları üzerinde Partition gibi işlemlerin yapılması ve Sql Pool’a yazdırılması üzerinden uygulamalar yapacağım.

Elimde yüksek boyutlu Tabloları içeren bir Database yapısı olmadığı için projeyi Container üzerindeki Parquet dosyalarından ilerleteceğim.

Kullanabileceğim bir Database olsaydı basitçe burada Azure — Data Factory ile Copy Data Activity gibi Activityler ile yazdırabilirdim.

Microsoft kaynaklı bu dökümanda detaylı anlatım bulunmaktadır.

Bu çalışmada Opensea NFT Satışlarını içeren Csv dosyasını kullanacağım.

Bunu bu çalışma için şimdilik Container’a yüklemeden önce Pandas ile bazı alanları seçerek Pyarrow ile Parquet formatına çeviriyorum.

Öncelikle Azure üzerinde bir deneme hesabı açarak Resource Group oluşturuyorum.

Daha sonra Synapse için kullanacağım Storage Account’u oluşturuyorum

Şimdi projeyi uygulamak üzere bir Synapse Workspace açacağım. Burada Workspace oluştururken Storage Account File System’i otomatik oluşturuyorum. Oluşturduğum File System’i Storage Account içerisinde Container olarak görebilirim.

Parquet dosyasını Container altında bir klasör açarak yüklüyorum dosyaya sürekli erişim olacağını varsayarak Access Tier Hot olarak seçiyorum.

Synapse Workspace ile çalışmaya başlamadan önce kullanıcıma Owner ve Contributor yetkilerini tanımladım.

https://web.azuresynapse.net/en/workspaces adresinden Workspace seçerek login oluyorum.

Synapse Workspace üzerinde sol taraftaki Data sekmesinden linkli sunucuları ve yüklediğim Parquet dosyasını görebiliyorum.

Şimdi sol taraftaki Develop sekmesinde bir Notebook oluşturarak Blob üzerindeki Parquet dosyasının üzerinde işlemler yapacağım

Burada Spark ile Partition yapılabildiğini de göstermek için bu adımı ekliyorum.

a

Partitionlara ayırdığım Parquet dosyasını Container içerisinde görebiliyorum.

Partition yaptıktan sonra 5milyon satırlı Parquet dosyasını tekrar ilgili klasörü tanıtarak içeri alacağım.

Oluşturduğum Dataframe’i artık Synapse üzerindeki Sql Pool’a yazabilirim.

Öncelikle DB ‘de bir Schema oluşturuyorum ardından Spark ile yazdırma işlemine devam ediyorum.

Burada herhangi bir Distribution ile önceden Sql Pool üzerinde tablo oluşturmadım.

Eğer bir Distribution ile Sql Pool üzerinde tablo oluşturarak Dataframe’i yazdırsaydım bu tablodaki tanımladığım Distribution geçerli olacaktı.

Artık yazdırdığım tabloyu Sql Pool üzerinde görebilir ve kullanmaya başlayabilirim. 5 milyon satırlık bir tabloyu çok kısa bir süre içerisinde Container’dan alarak gruplayarak yazdırmış olduk.

--

--