Prawdopodobnie najlepsza alternatywa dla przechowywania plików CSV: dane parkietu

Apache Parquet zapewnia szereg korzyści w zakresie przechowywania i wyszukiwania danych w porównaniu z tradycyjnymi metodami, takimi jak CSV.

Format parkietu jest przeznaczony do szybszego przetwarzania danych złożonych typów. W tym artykule mówimy o tym, jak format Parquet jest odpowiedni dla dzisiejszych, stale rosnących potrzeb w zakresie danych.

Zanim zagłębimy się w szczegóły formatu Parquet, zrozummy, czym są dane CSV i jakie wyzwania stawiają przed przechowywaniem danych.

Co to jest przechowywanie plików CSV?

Wszyscy dużo słyszeliśmy o CSV (wartości oddzielone przecinkami) – jednym z najczęstszych sposobów organizowania i formatowania danych. Przechowywanie danych CSV jest oparte na wierszach. Pliki CSV są przechowywane z rozszerzeniem .csv. Możemy przechowywać i otwierać dane CSV za pomocą Excela, Arkuszy Google lub dowolnego edytora tekstu. Dane są łatwo widoczne po otwarciu pliku.

Cóż, to nie jest dobre – zdecydowanie nie dla formatu bazy danych.

Co więcej, wraz ze wzrostem ilości danych, wykonywanie zapytań, zarządzanie i pobieranie staje się trudne.

Oto przykład danych przechowywanych 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

Jeśli spojrzymy na to w Excelu, możemy zobaczyć strukturę wiersz-kolumna, jak poniżej:

Wyzwania związane z przechowywaniem plików CSV

Magazyny oparte na wierszach, takie jak CSV, nadają się do operacji tworzenia, aktualizacji i usuwania.

A co z Read w CRUD?

Wyobraź sobie milion wierszy w powyższym pliku .csv. Otwarcie pliku i wyszukanie danych, których szukasz, zajęłoby rozsądną ilość czasu. Nie tak fajnie. Większość dostawców usług w chmurze, takich jak AWS, pobiera opłaty od firm na podstawie ilości skanowanych lub przechowywanych danych – ponownie pliki CSV zajmują dużo miejsca.

Magazyn CSV nie ma wyłącznej opcji przechowywania metadanych, co sprawia, że ​​skanowanie danych jest żmudnym zadaniem.

Więc jakie jest opłacalne i optymalne rozwiązanie do wykonywania wszystkich operacji CRUD? Zbadajmy.

Co to jest przechowywanie danych Parkiet?

Parkiet to format pamięci masowej typu open source do przechowywania danych. Jest szeroko stosowany w ekosystemach Hadoop i Spark. Pliki parkietów są przechowywane z rozszerzeniem .parquet.

Parkiet to format o wysokiej strukturze. Może być również używany do optymalizacji złożonych surowych danych obecnych w dużych ilościach w jeziorach danych. Może to znacznie skrócić czas zapytania.

Parquet sprawia, że ​​przechowywanie danych jest wydajne i szybsze, dzięki połączeniu formatów przechowywania opartych na wierszach i kolumnach (hybrydowych). W tym formacie dane są podzielone na partycje zarówno poziomo, jak i pionowo. Format parkietu w dużym stopniu eliminuje również narzuty związane z analizowaniem.

Format ogranicza ogólną liczbę operacji we/wy i ostatecznie koszt.

Parquet przechowuje również metadane, które przechowują 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 , przyspieszając dostęp do danych.

W dostępie opartym na wierszach, takim jak CSV, pobieranie danych zajmuje trochę czasu, ponieważ zapytanie musi przejść przez każdy wiersz i uzyskać określone wartości kolumn. Dzięki schowkowi na parkiet wszystkie wymagane kolumny są dostępne od razu.

W podsumowaniu,

  • Parkiet oparty jest na konstrukcji kolumnowej do przechowywania danych
  • Jest to zoptymalizowany format danych do zbiorczego przechowywania złożonych danych w systemach pamięci masowej
  • Format parkietu obejmuje różne metody kompresji i kodowania danych
  • Znacznie skraca czas skanowania danych i czas wykonywania zapytań oraz zajmuje mniej miejsca na dysku w porównaniu z innymi formatami przechowywania, takimi jak CSV
  • Minimalizuje liczbę operacji IO, obniżając koszt przechowywania i wykonywania zapytań
  • Zawiera metadane, które ułatwiają wyszukiwanie danych
  • Zapewnia wsparcie open source

Format danych parkietu

Zanim przejdziemy do przykładu, przyjrzyjmy się bardziej szczegółowo, jak dane są przechowywane w formacie Parquet:

W jednym pliku możemy mieć wiele partycji poziomych zwanych grupami wierszy. W każdej grupie wierszy stosowane jest partycjonowanie pionowe. Kolumny są podzielone na kilka fragmentów kolumn. Dane są przechowywane jako strony wewnątrz fragmentów kolumn. Każda strona zawiera zakodowane wartości danych i metadane. Jak wspomnieliśmy wcześniej, metadane całego pliku są również przechowywane w stopce pliku na poziomie grupy wierszy.

Ponieważ dane są dzielone na porcje kolumn, dodawanie nowych danych przez zakodowanie nowych wartości w nowej porcji i pliku jest również łatwe. Metadane są następnie aktualizowane dla plików i grup wierszy, których dotyczy problem. Można więc powiedzieć, że Parkiet jest formatem elastycznym.

Parquet natywnie obsługuje kompresję danych przy użyciu technik kompresji stron i kodowania słownika. Zobaczmy prosty przykład kompresji słownika:

Zauważ, że w powyższym przykładzie widzimy podział IT 4 razy. Tak więc podczas przechowywania w słowniku format koduje dane z inną łatwą do przechowywania wartością (0,1,2…) wraz z liczbą powtórzeń w sposób ciągły – IT, IT zmienia się na 0,2, aby zapisać więcej przestrzeni. Zapytanie o dane skompresowane zajmuje mniej czasu.

Bezpośrednie porównanie

Teraz, gdy mamy już dobre wyobrażenie o tym, jak wyglądają formaty CSV i Parquet, czas na statystyki, aby porównać oba formaty:

CSV
Parkiet
Format przechowywania oparty na wierszach.
Hybryda formatów przechowywania opartych na wierszach i kolumnach.
Zużywa dużo miejsca, ponieważ nie jest dostępna domyślna opcja kompresji. Na przykład plik o pojemności 1 TB zajmie to samo miejsce, gdy jest przechowywany w Amazon S3 lub dowolnej innej chmurze.
Kompresuje dane podczas przechowywania, dzięki czemu zajmuje mniej miejsca. Plik o pojemności 1 TB zapisany w formacie Parquet zajmie tylko 130 GB miejsca.
Czas wykonywania zapytania jest powolny z powodu wyszukiwania opartego na wierszach. Dla każdej kolumny należy pobrać każdy wiersz danych.
Czas zapytania jest około 34 razy szybszy ze względu na przechowywanie oparte na kolumnach i obecność metadanych.
Więcej danych musi zostać zeskanowanych na zapytanie.
Około 99% mniej danych jest skanowanych w celu wykonania zapytania, optymalizując w ten sposób wydajność.
Większość urządzeń pamięci masowej pobiera opłaty na podstawie dostępnej przestrzeni, więc format CSV oznacza wysoki koszt przechowywania.
Mniejsze koszty przechowywania, ponieważ dane są przechowywane w skompresowanym, zakodowanym formacie.
Schemat pliku musi być albo wywnioskowany (prowadzący do błędów) albo dostarczony (nudny).
Schemat pliku jest przechowywany w metadanych.
Format jest odpowiedni dla prostych typów danych.
Parkiet nadaje się nawet do złożonych typów, takich jak zagnieżdżone schematy, tablice, słowniki.

Wniosek 👩‍💻

Widzieliśmy na przykładach, że Parquet jest bardziej wydajny niż CSV pod względem kosztów, elastyczności i wydajności. Jest to skuteczny mechanizm przechowywania i pobierania danych, zwłaszcza gdy cały świat zmierza w kierunku przechowywania w chmurze i optymalizacji przestrzeni. Wszystkie główne platformy, takie jak Azure, AWS i BigQuery, obsługują format Parquet.