Opanowanie plików Parquet: struktura, zastosowania i kluczowe zalety

Plik Parquet przechowuje dane kolumnowo, a nie wierszowo. Projekt Apache Parquet opisuje go jako „otwarty, zorientowany kolumnowo format plików danych zaprojektowany z myślą o wydajnym przechowywaniu i pobieraniu danych”. Ta jedna decyzja projektowa wyjaśnia, dlaczego jest on mniejszy, szybszy w odpytywaniu i trudniejszy do otwarcia przez dwukrotne kliknięcie.
Co to jest plik Parquet?
Parquet to format plików dla danych tabelarycznych, rozwijany jako projekt Apache. Oficjalna dokumentacja stwierdza, że „zapewnia on wysokowydajne schematy kompresji i kodowania do obsługi złożonych danych masowych”. Dodaje również, że format ten „jest obsługiwany w wielu językach programowania i narzędziach analitycznych”.
Cechą definiującą jest orientacja. Plik CSV zapisuje dane wiersz po wierszu: każde pole pierwszego rekordu, a następnie każde pole drugiego rekordu. Parquet zapisuje dane kolumna po kolumnie: każdą wartość pierwszej kolumny, a następnie każdą wartość drugiej.
Brzmi to jak szczegół techniczny. Ma to jednak dwie istotne konsekwencje. Wartości w pojedynczej kolumnie są zazwyczaj do siebie podobne, co sprawia, że kompresują się znacznie lepiej niż zróżnicowany wiersz. Ponadto zapytanie, które potrzebuje trzech kolumn z dziewięćdziesięciu, może odczytać tylko te trzy, zamiast skanować każdy wiersz i odrzucać większość z nich.
Format ten jest formalnie określony. Dokumentacja Apache zauważa, że „repozytorium parquet-format zawiera oficjalną specyfikację formatu plików Parquet, definiującą strukturę i sposób przechowywania danych”.
Jak zbudowany jest plik Parquet
Koperta
Każdy plik Parquet otwiera się i zamyka tymi samymi czterema bajtami. Specyfikacja wskazuje na „4-bajtową magiczną liczbę 'PAR1'” na początku oraz tę samą magiczną liczbę na samym końcu.
Pomiędzy nimi znajdują się dane, a pod koniec – metadane. Tuż przed końcową magiczną liczbą znajduje się „4-bajtowa długość metadanych pliku w bajtach (little endian)”. Wartość ta wskazuje czytnikowi, jak daleko wstecz musi się cofnąć, aby znaleźć blok metadanych.
Grupy wierszy i fragmenty kolumn
Wewnątrz koperty dane są dzielone dwukrotnie. Specyfikacja opisuje plik zawierający „N kolumn w tej tabeli, podzielonych na M grup wierszy”.
Grupa wierszy to poziomy wycinek — partia wierszy. W ramach każdej grupy wierszy wartości każdej kolumny są przechowywane razem jako fragment kolumny. Zatem plik z 90 kolumnami i 10 grupami wierszy zawiera 900 fragmentów kolumn, z których każdy stanowi ciągły ciąg wartości z pojedynczej kolumny.
Ten podwójny podział umożliwia selektywny odczyt. Zapytanie może pominąć całe grupy wierszy, które nie mogą zawierać pasujących wierszy, a następnie odczytać tylko potrzebne fragmenty kolumn z tych, które pozostały.
Dlaczego metadane znajdują się na końcu
Zaskakuje to osoby, które spodziewają się nagłówka. Dokumentacja Apache wyjaśnia powód bezpośrednio: „metadane pliku są zapisywane po danych, aby umożliwić zapis w jednym przebiegu”.
Program zapisujący, który przesyła strumieniowo duży zestaw danych, nie zna ostatecznych pozycji bajtowych każdego fragmentu, dopóki ich nie zapisze. Umieszczenie metadanych na końcu oznacza, że nigdy nie musi wracać i modyfikować nagłówka.
Wynika z tego schemat odczytu. Zgodnie z dokumentacją metadane pliku „zawierają lokalizacje wszystkich pozycji początkowych fragmentów kolumn”. Dodaje ona, że „oczekuje się, iż czytniki najpierw odczytają metadane pliku, aby znaleźć wszystkie fragmenty kolumn, którymi są zainteresowane”.
Do czego służy Parquet
Z plikiem .parquet najczęściej spotkasz się w jednej z czterech sytuacji.
Eksporty z hurtowni danych. Gdy ktoś eksportuje dużą tabelę z nowoczesnej hurtowni danych, często jest to format domyślny, ponieważ rozmiar pliku pozostaje łatwy do opanowania.
Przechowywanie w data lake. Pliki znajdujące się w chmurowych magazynach obiektowych powszechnie korzystają z tego formatu właśnie dlatego, że silniki mogą odczytywać podzbiór kolumn bez konieczności pobierania całości.
Przekazywanie danych między zespołami. Inżynier danych przesyłający roczną historię transakcji często wybierze ten format zamiast pliku CSV, który byłby kilkukrotnie większy.
Wymiana danych między narzędziami analitycznymi. Ponieważ format ten jest obsługiwany przez wiele języków i narzędzi, przesyła się go między systemami bez konieczności przeprowadzania konwersji po drodze.
Wspólnym mianownikiem jest rozmiar. Staje się on oczywistym wyborem w momencie, gdy przesyłanie pliku CSV przestaje być wygodne.
Parquet vs CSV
| Parquet | CSV | |
|---|---|---|
| Orientacja | Kolumnowa | Wierszowa |
| Czytelny w edytorze tekstu | Nie, jest to plik binarny | Tak |
| Typowy rozmiar pliku | Mniejszy, dzięki kompresji kolumnowej | Większy dla tych samych danych |
| Odczyt kilku kolumn | Odczytuje tylko te fragmenty kolumn | Odczytuje cały plik |
| Typy danych | Przenoszone w metadanych pliku | Wywnioskowane przez program, który go otwiera |
| Otwieranie przez dwukrotne kliknięcie | Zazwyczaj nie | Zwykle otwiera się w arkuszu kalkulacyjnym |
| Najlepszy do | Dużych tabel, wielokrotnego odpytywania | Małych tabel, szybkiego podglądu, uniwersalnego udostępniania |
Zachowanie typów zasługuje na uwagę. Plik CSV nie wie, czy 00123 to liczba, czy ciąg znaków, dlatego wiodące zera i daty ulegają uszkodzeniu podczas importu. Parquet zapisuje typy w swoich metadanych, więc odczytana wartość jest dokładnie tą samą, którą zapisano.
Jeśli chodzi o wierszową stronę tego porównania, przewodnik po CSV omawia te same kwestie z drugiej perspektywy. Analiza TSV opisuje wariant z wartościami rozdzielanymi tabulatorami.
Główne zalety
Kompresja, która naprawdę się kumuluje. Przechowywanie podobnych wartości obok siebie daje koderowi znacznie większe możliwości. Dokumentacja Apache przypisuje to „wysokowydajnym schematom kompresji i kodowania”.
Ograniczanie kolumn (column pruning). Odczytanie trzech z dziewięćdziesięciu kolumn kosztuje mniej więcej tyle samo operacji wejścia/wyjścia co odczyt trzech kolumn, a nie dziewięćdziesięciu.
Pomijanie grup wierszy. Ponieważ metadane rejestrują zawartość każdej grupy wierszy, czytnik może odrzucić całe sekcje przed ich odczytaniem.
Typy danych nie ulegają zmianie. Daty pozostają datami, a identyfikatory zachowują swoje wiodące zera, ponieważ schemat jest przesyłany wewnątrz pliku.
Zapis w jednym przebiegu. Metadane na końcu oznaczają, że bardzo duże pliki mogą być zapisywane strumieniowo.
Szerokie wsparcie. Dokumentacja wspomina o obsłudze w „wielu językach programowania i narzędziach analitycznych”, więc rzadko kiedy jest to ślepy zaułek.
Gdzie Parquet przestaje pomagać
Parquet rozwiązuje kwestie przechowywania i pobierania danych. Nie odpowiada jednak na żadne pytania dotyczące tego, co faktycznie znajduje się w pliku.
Jest to format binarny, więc nie można do niego po prostu zajrzeć. Otwarcie pliku CSV w celu sprawdzenia, czy kolumna z przychodami zawiera wartości brutto czy netto, zajmuje pięć sekund. Plik binarny wymaga odpowiedniego narzędzia, zanim w ogóle cokolwiek zobaczysz.
Słabo sprawdza się również w przypadku małych zbiorów danych. Dla 200-wierszowej tabeli referencyjnej narzut związany z metadanymi i wymaganiami dotyczącymi narzędzi przewyższa wszelkie korzyści z kompresji. W takim przypadku lepszym formatem jest CSV, a szczere przyznanie tego jest elementem właściwego korzystania z formatu Parquet.
Nie mówi też nic o jakości danych. Plik może zawierać idealnie otypowane, wydajnie skompresowane bzdury. Zduplikowane rekordy, kolumnę walutową łączącą dwie różne waluty, identyfikator klienta, który zmienił schemat w marcu. Format gwarantuje wierność odwzorowania, a nie poprawność merytoryczną.
Jak pracować z plikiem Parquet, jeśli nie jesteś inżynierem
To jest ta praktyczna luka. Większość narzędzi biznesowych zakłada użycie arkusza kalkulacyjnego, a plik .parquet nie otworzy się tak łatwo jak CSV.
Pragmatycznym rozwiązaniem jest etap konwersji. Poproś osobę, która wygenerowała plik, o wyeksportowanie potrzebnych kolumn do formatu CSV lub Excel, albo skonwertuj go samodzielnie za pomocą dowolnego narzędzia obsługującego Parquet. Tracisz wtedy korzyści płynące z kompresji, co jednak nie ma znaczenia, gdy dane znajdują się już na Twoim komputerze i zostały ograniczone do niezbędnego zakresu.
Od tego momentu praca polega na zwykłej analizie. Strona z cennikiem Powerdrill Bloom wymienia przesyłanie plików Excel, CSV, PDF i dokumentów, więc skonwertowany wyciąg trafia bezpośrednio tam. Pytania zadaje się w języku naturalnym, a nie w formie zapytań. Asystent AI do plików CSV obsługuje tę ścieżkę, a konektory danych sprawdzają się w przypadkach, gdy dane lepiej jest pobrać bezpośrednio niż eksportować.
Warto pamiętać o rozróżnieniu, że wybór formatu Parquet to decyzja dotycząca przechowywania danych podjęta na wcześniejszym etapie. Nie jest to narzędzie analityczne, a konwersja na inny format, gdy plik trafi na Twoje biurko, jest normalną procedurą, a nie obejściem problemu.
Podsumowanie
Parquet to zorientowany kolumnowo format przechowywania danych ze schematem i indeksem umieszczonymi na końcu pliku. Taka konstrukcja zapewnia doskonałą kompresję, selektywny odczyt i wiarygodne typy danych, dlatego stał się on domyślnym wyborem dla wszelkich dużych zbiorów danych.
To, czego nie zapewnia, to bezpośrednia widoczność danych. W momencie, gdy plik trafia do kogoś, kto potrzebuje odpowiedzi, a nie tylko miejsca do przechowywania, kolejnym przydatnym krokiem jest zazwyczaj wyodrębnienie potrzebnego zakresu danych i zadanie pytania.
Jeśli właśnie na tym etapie się znajdujesz, wypróbuj Powerdrill Bloom ze skonwertowanym plikiem i zacznij od przekształcenia go w wykres.
Najczęściej zadawane pytania
Do czego służy plik Parquet?
Parquet służy do wydajnego przechowywania dużych tabelarycznych zbiorów danych. Jest powszechnie stosowany do eksportu z hurtowni danych, przechowywania w data lake, przekazywania danych między zespołami oraz wymiany informacji między narzędziami analitycznymi. Powodem jest to, że dobrze się kompresuje i umożliwia odczyt tylko wybranych kolumn.
Czy Parquet jest lepszy niż CSV?
W przypadku dużych tabel, które są wielokrotnie odpytywane – tak: jest mniejszy, zachowuje typy danych i obsługuje ograniczanie kolumn (column pruning). W przypadku małych tabel, które musisz szybko przejrzeć lub szeroko udostępnić, łatwiejszy w użyciu jest format CSV, ponieważ jest to plik tekstowy i można go otworzyć wszędzie.
Czy mogę otworzyć plik Parquet w programie Excel?
Nie poprzez dwukrotne kliknięcie, ponieważ Parquet to format binarny, a nie tekstowy. Typowym podejściem jest najpierw przekonwertowanie go do formatu CSV lub Excel bądź użycie narzędzia, które bezpośrednio odczytuje pliki Parquet.
Dlaczego metadane Parquet są przechowywane na końcu pliku?
Dokumentacja Apache wyjaśnia, że metadane są zapisywane po danych, „aby umożliwić zapis w jednym przebiegu”. Program zapisujący, który przesyła strumieniowo duży zestaw danych, nie zna z góry ostatecznych pozycji fragmentów, więc zapisanie metadanych na końcu pozwala uniknąć konieczności ponownego modyfikowania nagłówka.
Czym są grupy wierszy w formacie Parquet?
Grupa wierszy to poziomy wycinek tabeli. Specyfikacja opisuje kolumny pliku jako „podzielone na M grup wierszy”, przy czym każda kolumna jest przechowywana jako osobny fragment wewnątrz każdej grupy. Taki układ pozwala czytnikom pomijać zarówno grupy, jak i kolumny, których nie potrzebują.