Przeskocz do zawartości głównej Przejdź do treści uzupełniającej

Praca z plikami Apache Parquet

Apache Parquet to kolumnowy format pamięci masowej, wykazujący się wysoką wydajnością podczas przechowywania i wysyłania zapytań do dużych zestawów danych. W Qlik Sense można odczytywać dane z plików Parquet i przechowywać tabele jako pliki Parquet.

Parquet umożliwia efektywne odpytywanie określonych kolumn zamiast czytania całej tabeli. Dzięki temu doskonale nadaje się do użytku podczas przetwarzania zbiorów big data. Ponadto Parquet obsługuje wydajną kompresję i kodowanie danych. Może to jeszcze bardziej zmniejszyć zajmowane miejsce w pamięci i poprawić wydajność zapytań.

Tworzenie plików Parquet

Pliki Parquet można tworzyć za pomocą polecenia Store w skrypcie. W skrypcie należy określić, że wcześniej wczytana tabela lub część takiej tabeli ma zostać eksportowana do pliku o podanej nazwie i lokalizacji. Zapisywane dane możesz zagnieżdżać w danych w plikach Parquet.

Więcej informacji można znaleźć w temacie Store.

Odczyt danych z plików Parquet

Dane z pliku Parquet można odczytywać tak jak z każdego innego pliku danych obsługiwanego przez Qlik Sense. Dotyczy to Menedżera danych, Edytora ładowania danych lub dodawania danych do nowej aplikacji.

Więcej informacji można znaleźć w temacie Ładowanie danych z plików.

Możesz także załadować dane z pliku Parquet w skrypcie ładowania danych za pomocą polecenia LOAD. Na przykład:

LOAD * from [lib://DataFiles/xyz.parquet] (parquet);

Więcej informacji można znaleźć w temacie Load.

Ładowanie danych z zagnieżdżonych plików Parquet

Jeśli plik Parquet zawiera zagnieżdżone dane, należy go załadować w wielu instrukcjach Load, z których każda określa, który podzestaw powinien zostać załadowany do każdej z tabel. Specyfikator Table is służy do sprawdzenia ścieżki do węzła grupy w schemacie, który ma zostać załadowany.

Możesz użyć specyfikatora Delimiter is, aby określić, jak powinny być łączone węzły. Instrukcja LOAD ładująca plik z zagnieżdżonymi danymi, które nie zawierają ogranicznika, wykorzystuje wartość określoną w zmiennej skryptu FieldNameDelimiter. Jeśli nie podano żadnego ogranicznika i nie ustawiono FieldNameDelimiter, domyślnym ogranicznikiem będzie '.'.

Ładowane są tylko węzły pasujące do ścieżki Table is.

Węzły danych są ładowane do pliku bez zagnieżdżania.

Węzły grup będą grupować pola w grupie, dodając ich nazwę do nazwy pola. Na przykład grupy z field1 i field2 są ładowane jako group.field1 i group.field2.

Węzły list wygenerują pola klucza używane do łączenia tabel. Na przykład %Key_group.list. Każda grupa lub węzeł danych na liście muszą zostać załadowane w osobnej instrukcji Load. Do listy nadrzędnej zostanie też dodane pole klucza.

Poniższe przykłady pokazują ten sam zagnieżdżony plik Parquet utworzony w przykładzie w Przechowywanie zagnieżdżonych danych w plikach Parquet, załadowany do aplikacji przy użyciu narzędzi Menedżer danych i Edytor ładowania danych (z domyślnym skryptem z kreatora Wybierz dane i skryptem niestandardowym).

Przykład: Menedżer danych

Jeśli załadujesz customer.parquet w narzędziu Menedżer danych i zastosujesz wszystkie zalecane asocjacje, otrzymasz następujący model danych:

Model danych do ładowania company.parquet za pomocą narzędzia Menedżer danych

Model danych przedstawiający tabele company:salesrep.salesrep, company, company:headquarter.headquarter i company:headquarter.headquarter.city:region.region

Przykład: Edytor ładowania danych (Wybierz dane)

Jeśli załadujesz dane za pomocą kreatora Wybierz dane w narzędziu Edytor ładowania danych, otrzymasz następujący skrypt:

LOAD company, contact, "%Key_company:headquarter", "%Key_company:salesrep" FROM [lib://DataFiles/company.parquet] (parquet); LOAD country, city, "%Key_city:region", "%Key_company:headquarter" FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter]); LOAD region, "%Key_city:region" FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter.city:region.region]); LOAD salesrep, "%Key_company:salesrep" FROM [lib://DataFiles/company.parquet] (parquet, table is [company:salesrep.salesrep]);

Model danych wygląda teraz następująco w narzędziu Przeglądarka modelu danych.

Model danych do ładowania company.parquet za pomocą kreatora Wybierz dane w narzędziu Edytor ładowania danych

Model danych przedstawiający tabele salesrep, company, headquarter i region.

Przykład: Edytor ładowania danych (Niestandardowy skrypt ładowania)

Jeśli używasz niestandardowego skryptu ładowania, masz większą kontrolę nad sposobem ładowania pól i tabel z pliku customer.parquet. Poniższy skrypt ładowania ładuje tabele i pola z pliku company.parquet:

LOAD * FROM [lib://DataFiles/company.parquet] (parquet); LOAD *, Lookup('company', '%Key_company:salesrepo', [%Key_company:salesrep], 'company') as company; LOAD * FROM [lib://DataFiles/company.parquet] (parquet, table is [company:salesrep.salesrep]); DROP FIELD [%Key_company:salesrep]; LOAD *, Lookup('company', '%Key_company:headquarter', [%Key_company:headquarter], 'company') as company; LOAD * FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter]); DROP FIELD [%Key_company:headquarter]; LOAD *, Lookup('city', '%Key_city:region', [%Key_city:region], 'headquarter') as city; LOAD * FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter.city:region.region]); DROP FIELD [%Key_city:region];

W rezultacie otrzymujemy następujący model danych, który jest identyczny z oryginalnym modelem danych, zanim dane zostały zapisane w pliku Parquet.

Model danych do ładowania pliku company.parquet za pomocą niestandardowego skryptu Edytor ładowania danych

Model danych zawierający tabele headquarter, region, salesrep i company, odzwierciedlające dokładny model danych z aplikacji źródłowej.

Ograniczenia

Pliki Parquet mają następujące ograniczenia:

  • Pliki Parquet, które zawierają pole znacznika czasu int96, mogą nie być ładowane poprawnie.

    Int96 to przestarzały typ danych, który zawiera sygnaturę czasową bez informacji o strefie czasowej. Zostanie podjęta próba odczytania pola jako wartości w strefie czasowej UTC, ale ponieważ istnieją różne implementacje producentów, nie ma gwarancji powodzenia.

    Sprawdź załadowane dane i w razie potrzeby dostosuj je do prawidłowej strefy czasowej, używając przesunięcia.

Czy ta strona była pomocna?

Jeżeli natkniesz się na problemy z tą stroną lub jej zawartością — literówkę, brakujący krok lub błąd techniczny — daj nam znać, co możemy poprawić!