Parquet Dosyalarında Uzmanlaşmak: Yapı, Kullanım Durumları ve Temel Avantajlar

Bir Parquet dosyası, verileri satır yerine sütun bazında depolar. Apache Parquet projesi bunu "verimli veri depolama ve erişim için tasarlanmış, açık kaynaklı, sütun yönelimli bir veri dosyası biçimi" olarak tanımlar. Bu tek tasarım tercihi, neden daha küçük olduğunu, neden daha hızlı sorgulandığını ve çift tıklayarak açılmasının neden daha zor olduğunu açıklar.
Parquet dosyası nedir?
Parquet, Apache projesi olarak sürdürülen, tablosal veriler için bir dosya biçimidir. Resmi belgeler, bunun "karmaşık verileri toplu olarak işlemek için yüksek performanslı sıkıştırma ve kodlama şemaları sağladığını" belirtir. Ayrıca bu biçimin "birçok programlama dili ve analitik aracı tarafından desteklendiğini" ekler.
Tanımlayıcı özellik yönelimdir. Bir CSV her seferinde bir satır yazar: önce birinci kaydın her alanı, ardından ikinci kaydın her alanı. Parquet ise her seferinde bir sütun yazar: önce ilk sütunun her değeri, ardından ikincinin her değeri.
Bu kulağa teknik bir ayrıntı gibi gelebilir. Ancak iki büyük sonucu vardır. Tek bir sütundaki değerler birbirine benzeme eğilimindedir, bu da onların karışık bir satıra göre çok daha iyi sıkıştırılmasını sağlar. Ayrıca doksan sütundan sadece üçüne ihtiyaç duyan bir sorgu, satırların çoğunu elemek için her satırı taramak yerine yalnızca bu üç sütunu okuyabilir.
Biçim resmi olarak tanımlanmıştır. Apache belgeleri, "parquet-format deposunun, verilerin nasıl yapılandırıldığını ve depolandığını tanımlayan resmi Parquet dosya biçimi spesifikasyonuna ev sahipliği yaptığını" belirtir.
Bir Parquet dosyası nasıl yapılandırılır
Zarf
Her Parquet dosyası aynı dört bayt ile açılır ve kapanır. Spesifikasyon, başlangıçta "4 baytlık sihirli sayı 'PAR1'" ve en sonda da aynı sihirli sayıyı gösterir.
Bunların arasında veriler ve sona yakın bir yerde meta veriler bulunur. Kapanış sihirli sayısından hemen önce "dosya meta verilerinin bayt cinsinden 4 baytlık uzunluğu (little endian)" yer alır. Bu değer, okuyucuya meta veri bloğunu bulmak için ne kadar geriye atlaması gerektiğini söyler.
Satır grupları ve sütun yığınları
Zarfın içinde veriler iki kez bölünür. Spesifikasyon, bir dosyayı "bu tablodaki N sütunun, M satır grubuna bölünmesi" şeklinde tanımlar.
Bir satır grubu, yatay bir dilimdir — yani bir satır kümesidir. Her satır grubunda, her sütunun değerleri bir sütun yığını olarak birlikte depolanır. Dolayısıyla, 90 sütunlu ve 10 satır gruplu bir dosya, her biri tek bir sütundan gelen bitişik değerler dizisi olan 900 sütun yığını barındırır.
Seçici okumayı mümkün kılan şey bu ikili bölünmedir. Bir sorgu, eşleşen satırları barındırma ihtimali olmayan tüm satır gruplarını atlayabilir ve ardından geri kalanlardan yalnızca ihtiyaç duyduğu sütun yığınlarını okuyabilir.
Meta veriler neden sonda yer alır?
Bu durum, bir başlık bekleyen insanları şaşırtır. Apache belgeleri bunun nedenini doğrudan açıklar: "tek geçişli yazmaya izin vermek için dosya meta verileri verilerden sonra yazılır."
Büyük bir veri kümesini akış halinde yazan bir sistem, tüm yığınları yazana kadar her birinin nihai bayt konumlarını bilemez. Meta verilerin sona konulması, sistemin asla geriye dönüp bir başlığı yamalamak zorunda kalmaması anlamına gelir.
Okuma düzeni de buna göre şekillenir. Belgelere göre, dosya meta verileri "tüm sütun yığını başlangıç konumlarının yerlerini içerir." Ayrıca "okuyucuların ilgilendikleri tüm sütun yığınlarını bulmak için önce dosya meta verilerini okumalarının beklendiğini" ekler.
Parquet ne için kullanılır?
Bir .parquet dosyasıyla genellikle şu dört durumdan birinde karşılaşırsınız:
Data warehouse exports. Birisi modern bir veri ambarından büyük bir tabloyu dışa aktardığında, dosya yönetilebilir kaldığı için bu genellikle varsayılan seçenektir.
Data lake storage. Bulut nesne depolamasında duran dosyalar, motorların her şeyi indirmeden sütunların bir alt kümesini okuyabilmesi nedeniyle bunu yaygın olarak kullanır.
Handoffs between teams. Size bir yıllık işlem verisi gönderen bir veri mühendisi, birkaç kat daha büyük olacak bir CSV yerine genellikle bu biçimi tercih edecektir.
Analytics tool interchange. Bu biçim birçok dil ve araçta desteklendiği için, arada bir dönüştürme adımına gerek kalmadan sistemler arasında taşınabilir.
Ortak nokta boyuttur. Bir CSV dosyasını taşımanın artık zahmetli hale geldiği noktada, bu biçim bariz bir tercih haline gelir.
Parquet vs CSV
| Parquet | CSV | |
|---|---|---|
| Yönelim | Sütun yönelimli | Satır yönelimli |
| Metin düzenleyicide okunabilir mi | Hayır, ikili biçimdedir | Evet |
| Tipik dosya boyutu | Sütun sıkıştırması sayesinde daha küçük | Aynı veri için daha büyük |
| Birkaç sütun okuma | Yalnızca ilgili sütun yığınlarını okur | Tüm dosyayı okur |
| Veri tipleri | Dosya meta verilerinde taşınır | Açan program tarafından tahmin edilir |
| Çift tıklayarak açılır mı | Genellikle hayır | Genellikle bir e-tablo programında açılır |
| En iyi kullanım alanı | Büyük tablolar, tekrarlanan sorgulamalar | Küçük tablolar, hızlı inceleme, evrensel paylaşım |
Veri tipi davranışı ayrıca değinilmeyi hak ediyor. Bir CSV, 00123 değerinin bir sayı mı yoksa bir metin mi olduğunu bilemez; bu nedenle içe aktarma sırasında baştaki sıfırlar ve tarihler bozulur. Parquet ise veri tiplerini meta verilerinde kaydeder, böylece yazdığınız değer neyse aynen geri okursunuz.
Bu karşılaştırmanın satır yönelimli tarafı için, CSV explainer aynı konuyu diğer açıdan ele almaktadır. TSV breakdown ise sekmeyle ayrılmış varyantı kapsar.
Temel avantajlar
Gerçekten katlanan sıkıştırma. Benzer değerlerin yan yana depolanması, kodlayıcıya üzerinde çalışabileceği çok daha fazla alan sağlar. Apache belgeleri bunu "yüksek performanslı sıkıştırma ve kodlama şemalarına" bağlar.
Sütun budama. Doksan sütundan üçünü okumak, doksan sütun yerine kabaca üç sütunluk bir G/Ç maliyeti getirir.
Satır grubu atlama. Meta veriler her satır grubunda ne olduğunu kaydettiği için, okuyucu daha verilere dokunmadan tüm dilimleri eleyebilir.
Veri tipleri korunur. Şema dosyanın içinde taşındığı için tarihler tarih olarak kalır ve kimlik bilgileri baştaki sıfırlarını kaybetmez.
Tek geçişli yazma. Meta verilerin sonda olması, çok büyük dosyaların bir akış halinde yazılabileceği anlamına gelir.
Geniş destek. Belgeler "birçok programlama dili ve analitik aracında" desteklendiğini belirtir, bu nedenle nadiren çıkmaza girersiniz.
Parquet'nin yetersiz kaldığı durumlar
Parquet depolama ve erişim sorunlarını çözer. Ancak dosyanın içinde gerçekte ne olduğuna dair sorularınızın hiçbirini çözmez.
İkili bir biçim olduğu için göz ucuyla bakamazsınız. Gelir sütununun brüt mü yoksa net mi olduğunu kontrol etmek için bir CSV dosyasını açmak beş saniye sürer. İkili bir dosyada ise herhangi bir şey görebilmek için önce bir araca ihtiyacınız vardır.
Ayrıca küçük veriler için pek uygun değildir. 200 satırlık bir referans tablosu için meta veri yükü ve araç gereksinimi, her türlü sıkıştırma avantajından daha ağır basar. Bu durumda CSV daha iyi bir biçimdir ve bu konuda dürüst olmak Parquet'yi doğru kullanmanın bir parçasıdır.
Üstelik veri kalitesi hakkında hiçbir şey söylemez. Dosya mükemmel şekilde tiplendirilmiş, verimli bir şekilde sıkıştırılmış anlamsız veriler taşıyabilir. Yinelenen kayıtlar, iki farklı para biriminin karıştığı bir para birimi sütunu, Mart ayında şeması değişen bir müşteri kimliği... Bu biçim doğruluğu değil, aslına uygunluğu garanti eder.
Mühendis değilseniz bir Parquet dosyasıyla nasıl çalışırsınız?
Pratik boşluk buradadır. Çoğu iş aracı bir e-tablo varsayar ve bir .parquet dosyası bir CSV gibi kolayca açılmaz.
Pratik yol bir dönüştürme adımıdır. Dosyayı oluşturan kişiden gerçekten ihtiyacınız olan sütunların bir CSV veya Excel çıktısını isteyin ya da Parquet destekleyen herhangi bir araçla kendiniz dönüştürün. Sıkıştırma avantajını kaybedersiniz, ancak veri bilgisayarınıza inip daraltıldıktan sonra bunun bir önemi kalmaz.
Buradan sonrası sıradan bir analiz işidir. Powerdrill Bloom'un fiyatlandırma sayfasında Excel, CSV, PDF ve belgeler için yükleme seçenekleri listelenmiştir, bu nedenle dönüştürülmüş bir çıktı doğrudan içeri aktarılabilir. Sorular, sorgu yazmak yerine doğal dilde sorulur. CSV AI assistant bu süreci kapsarken, data connectors verilerin dışa aktarılmak yerine doğrudan çekilmesinin daha iyi olduğu durumları ele alır.
Unutulmaması gereken fark, Parquet'nin sizden önceki aşamada verilmiş bir depolama kararı olmasıdır. Bir analiz aracı değildir ve dosya masanıza ulaştığında onu başka bir biçime dönüştürmek geçici bir çözüm değil, son derece normal bir süreçtir.
Sonuç
Parquet, şeması ve dizini dosyanın sonunda yer alan sütun yönelimli bir depolama biçimidir. Bu tasarım; sıkıştırma, seçici okuma ve güvenilir veri tipleri sağlar; büyük ölçekli her şey için varsayılan seçenek haline gelmesinin nedeni de budur.
Sağlamadığı şey ise görünürlüktür. Dosya, depolamaya değil de yanıtlara ihtiyacı olan birine ulaştığı an, bir sonraki faydalı adım genellikle kapsamı daraltılmış bir çıktı almak ve soru sormaktır.
Eğer siz de bu durumdaysanız, dönüştürülmüş dosya ile Powerdrill Bloom'u deneyin ve işe onu bir grafiğe dönüştürerek başlayın.
Sıkça sorulan sorular
Parquet dosyası ne için kullanılır?
Parquet, büyük tablosal veri kümelerini verimli bir şekilde depolamak için kullanılır. Veri ambarı dışa aktarımları, veri gölü depolaması, ekipler arası veri aktarımları ve analitik araçları arasındaki veri değişimi için yaygındır. Bunun nedeni, iyi sıkışması ve yalnızca seçilen sütunların okunmasını desteklemesidir.
Parquet, CSV'den daha mı iyidir?
Tekrar tekrar sorgulanan büyük tablolar için evet: daha küçüktür, veri tiplerini taşır ve sütun budamayı destekler. İncelemeniz veya yaygın olarak paylaşmanız gereken küçük tablolar için ise CSV daha kolaydır, çünkü metin tabanlıdır ve her yerde açılır.
Bir Parquet dosyasını Excel'de açabilir miyim?
Parquet metin değil, ikili bir biçim olduğundan çift tıklayarak açamazsınız. Yaygın yaklaşım, önce CSV veya Excel biçimine dönüştürmek ya da doğrudan Parquet okuyan bir araç kullanmaktır.
Parquet meta verileri neden dosyanın sonunda depolanır?
Apache belgeleri, meta verilerin "tek geçişli yazmaya izin vermek için" verilerden sonra yazıldığını açıklar. Büyük bir veri kümesini akış halinde yazan bir sistem, nihai yığın konumlarını önceden bilemez; bu nedenle meta verilerin en son yazılması, bir başlığa tekrar dönme ihtiyacını ortadan kaldırır.
Parquet'de satır grupları nedir?
Bir satır grubu, tablonun yatay bir dilimidir. Spesifikasyon, bir dosyanın sütunlarını "M satır grubuna bölünmüş" olarak tanımlar ve her sütun, her grubun içinde ayrı bir yığın olarak depolanır. Bu düzen, okuyucuların ihtiyaç duymadıkları hem grupları hem de sütunları atlamasını sağlar.