Apache Parquet oferuje znaczące usprawnienia w zakresie składowania i wyszukiwania danych w porównaniu z tradycyjnymi rozwiązaniami, takimi jak pliki CSV.
Format Parquet został opracowany z myślą o przyspieszeniu przetwarzania danych o skomplikowanej strukturze. W niniejszym artykule omówimy, dlaczego format Parquet jest odpowiedni dla współczesnych, stale rosnących potrzeb w obszarze danych.
Zanim przejdziemy do analizy szczegółów formatu Parquet, warto zrozumieć, czym są dane CSV i jakie problemy stwarzają w kontekście przechowywania danych.
Czym jest składowanie danych w plikach CSV?
Z pewnością wielu z nas słyszało o CSV (ang. Comma Separated Values), czyli o wartościach oddzielonych przecinkami. Jest to jeden z najbardziej rozpowszechnionych sposobów organizowania i formatowania danych. Przechowywanie danych CSV opiera się na strukturze wierszowej. Pliki CSV mają rozszerzenie .csv. Możemy je przeglądać i edytować za pomocą programów takich jak Excel, Arkusze Google lub dowolnego edytora tekstu. Po otwarciu pliku dane są łatwo widoczne w formie tabelarycznej.
Jednakże, to rozwiązanie nie jest idealne – szczególnie w kontekście baz danych.
Co więcej, wraz z powiększaniem się zbiorów danych, wykonywanie zapytań, zarządzanie nimi oraz ich pobieranie staje się coraz bardziej problematyczne.
Oto przykład danych zapisanych w pliku .CSV:
EmpId,First name,Last name, Division 2012011,Sam,Butcher,IT 2013031,Mike,Johnson,Human Resource 2010052,Bill,Matthew,Architect 2010079,Jose,Brian,IT 2012120,Adam,James,Solutions
W programie Excel struktura danych jest widoczna w formie tabeli, gdzie wiersze i kolumny są wyraźnie rozdzielone:
Problemy związane z przechowywaniem danych w plikach CSV
Systemy składowania oparte na wierszach, takie jak CSV, dobrze sprawdzają się w operacjach tworzenia, aktualizacji i usuwania.
A jak wygląda sytuacja z operacją odczytu?
Wyobraźmy sobie plik .csv z milionem wierszy. Otwarcie takiego pliku i wyszukanie w nim konkretnych danych zajęłoby sporo czasu. Nie jest to komfortowe rozwiązanie. Ponadto, większość dostawców usług chmurowych, na przykład AWS, nalicza opłaty za ilość skanowanych lub przechowywanych danych – a pliki CSV zazwyczaj zajmują dużo miejsca.
System składowania CSV nie oferuje dedykowanej opcji przechowywania metadanych, co sprawia, że przeszukiwanie danych jest czasochłonne.
Jakie jest więc efektywne i optymalne rozwiązanie dla wszystkich operacji CRUD? Przyjrzyjmy się temu.
Czym jest składowanie danych w formacie Parquet?
Parquet to format open source służący do przechowywania danych. Jest on szeroko stosowany w środowiskach Hadoop i Spark. Pliki Parquet mają rozszerzenie .parquet.
Parquet jest formatem o wysokiej strukturze. Może być również wykorzystywany do optymalizacji złożonych surowych danych, które występują w dużych ilościach w jeziorach danych. Pozwala to znacznie skrócić czas wykonywania zapytań.
Parquet umożliwia wydajne i szybkie przechowywanie danych dzięki połączeniu formatów opartych na wierszach i kolumnach (format hybrydowy). W tym formacie dane są dzielone na partycje zarówno poziomo, jak i pionowo. Format Parquet w znacznym stopniu eliminuje też obciążenia związane z procesem parsowania.
Format ten redukuje całkowitą liczbę operacji we/wy, co w rezultacie obniża koszty.
Parquet przechowuje również metadane zawierające informacje o danych, takie jak schemat danych, liczba wartości, lokalizacja kolumn, wartość minimalna, maksymalna liczba grup wierszy, rodzaj kodowania itp. Metadane są przechowywane na różnych poziomach w pliku, co przyspiesza dostęp do danych.
W dostępie opartym na wierszach, typowym dla CSV, pobieranie danych zajmuje więcej czasu, ponieważ zapytanie musi przejść przez każdy wiersz, aby uzyskać określone wartości kolumn. W przypadku formatu Parquet, wszystkie wymagane kolumny są dostępne od razu.
Podsumowując:
- Parquet opiera się na kolumnowej strukturze przechowywania danych.
- Jest to zoptymalizowany format danych do masowego przechowywania złożonych danych w systemach pamięci masowej.
- Format Parquet wykorzystuje różne metody kompresji i kodowania danych.
- Znacznie skraca czas skanowania danych i wykonywania zapytań oraz zajmuje mniej miejsca na dysku w porównaniu z innymi formatami składowania, takimi jak CSV.
- Minimalizuje liczbę operacji we/wy, co obniża koszty przechowywania i wykonywania zapytań.
- Zawiera metadane, które ułatwiają wyszukiwanie danych.
- Jest formatem typu open source.
Struktura danych w formacie Parquet
Zanim przejdziemy do przykładów, przyjrzyjmy się szczegółowo, w jaki sposób dane są przechowywane w formacie Parquet:
W obrębie jednego pliku możemy mieć wiele poziomych partycji, które nazywane są grupami wierszy. W każdej grupie wierszy stosowane jest partycjonowanie pionowe. Kolumny są dzielone na segmenty kolumn. Dane są przechowywane jako strony wewnątrz segmentów kolumn. Każda strona zawiera zakodowane wartości danych oraz metadane. Jak już wspomniano, metadane całego pliku są również przechowywane w stopce pliku, na poziomie grupy wierszy.
Ponieważ dane są dzielone na segmenty kolumn, dodawanie nowych danych przez zakodowanie nowych wartości w nowym segmencie i pliku jest również bardzo proste. Metadane są następnie aktualizowane dla plików i grup wierszy, których dotyczy zmiana. Można więc stwierdzić, że Parquet jest formatem elastycznym.
Parquet natywnie obsługuje kompresję danych przy wykorzystaniu technik kompresji stron oraz kodowania słownikowego. Przyjrzyjmy się prostemu przykładowi kompresji słownikowej:
W powyższym przykładzie widać, że dział IT pojawia się 4 razy. Podczas przechowywania w oparciu o słownik, format koduje dane, przypisując im łatwiejsze do zapamiętania wartości (0, 1, 2…), wraz z informacją o liczbie powtórzeń. W ten sposób „IT, IT” zostaje przekształcone w „0, 2”, co oszczędza miejsce. Zapytania o skompresowane dane są realizowane szybciej.
Bezpośrednie porównanie
Teraz, gdy mamy już ogólne pojęcie o formatach CSV i Parquet, warto spojrzeć na statystyki, które pozwolą porównać oba formaty:
CSV
Parquet
Format przechowywania oparty na wierszach.
Hybrydowy format przechowywania, łączący podejście wierszowe i kolumnowe.
Zajmuje dużo miejsca, ponieważ nie ma domyślnej opcji kompresji. Na przykład plik o rozmiarze 1 TB zajmie tyle samo miejsca, niezależnie od tego, czy będzie przechowywany na Amazon S3 czy w innej chmurze.
Kompresuje dane podczas przechowywania, co pozwala zaoszczędzić miejsce. Plik o rozmiarze 1 TB zapisany w formacie Parquet zajmie tylko około 130 GB.
Czas wykonywania zapytań jest wolny, ze względu na przeszukiwanie w oparciu o wiersze. Dla każdej kolumny konieczne jest pobranie każdego wiersza danych.
Czas wykonania zapytania jest około 34 razy szybszy ze względu na przechowywanie oparte na kolumnach i obecność metadanych.
Do wykonania zapytania konieczne jest zeskanowanie większej ilości danych.
Do wykonania zapytania skanowane jest około 99% mniej danych, co znacząco optymalizuje wydajność.
Większość platform do przechowywania danych nalicza opłaty za zajmowaną przestrzeń, co w przypadku formatu CSV oznacza wyższe koszty przechowywania.
Niższe koszty przechowywania, ponieważ dane są składowane w skompresowanym, zakodowanym formacie.
Schemat pliku musi być albo wywnioskowany (co może prowadzić do błędów), albo dostarczony ręcznie (co jest czasochłonne).
Schemat pliku jest zapisywany w metadanych.
Format jest odpowiedni dla prostych typów danych.
Parquet sprawdza się również w przypadku złożonych typów danych, takich jak zagnieżdżone schematy, tablice czy słowniki.
Podsumowanie 👩💻
Jak pokazują przedstawione przykłady, Parquet jest bardziej wydajny od CSV pod względem kosztów, elastyczności i wydajności. Jest to efektywny mechanizm składowania i pobierania danych, zwłaszcza w kontekście rosnącej popularności rozwiązań chmurowych i konieczności optymalizacji wykorzystania przestrzeni dyskowej. Wszystkie główne platformy, takie jak Azure, AWS i BigQuery, obsługują format Parquet.
newsblog.pl