Store
Instrukcja Store tworzy plik QVD, Parquet, CSV lub TXT.
Składnia:
Store [ fieldlist from] table into filename [ format-spec ];
Ta instrukcja utworzy plik jawnie nazwany QVD, Parquet lub plik tekstowy.
Instrukcja może eksportować pola tylko z jednej tabeli danych, chyba że zachowuje się dane w formacie Parquet. W przypadku eksportowania pól z kilku tabel do pliku QVD, CSV lub TXT należy wcześniej wykonać w skrypcie jawną instrukcję join, aby utworzyć tabelę danych do wyeksportowania. Można przechowywać wiele tabel w jednym pliku Parquet, zagnieżdżając dane w plikach Parquet.
Wartości tekstowe są eksportowane do pliku CSV w formacie UTF-8 z BOM. Możliwe jest określenie ogranicznika — zobacz opis instrukcji LOAD. Instrukcja store do pliku CSV nie obsługuje eksportu BIFF.
Argumenty:
Argument | Opis |
---|---|
fieldlist::= ( * | field) { , field } ) |
Lista wybieranych pól. Użycie znaku * jako listy pól oznacza wszystkie pola. field::= fieldname [as aliasname ] fieldname jest tekstem identycznym z nazwą pola w tabeli table. (Jeśli nazwa pola zawiera spacje lub inne znaki niestandardowe, musi być ujęta w proste podwójne cudzysłowy lub nawiasy kwadratowe). aliasname jest alternatywną nazwą dla pola, która będzie używana w wynikowym pliku QVD lub CSV. |
table | Etykieta skryptu reprezentująca już załadowaną tabelę do użycia jako źródło danych. |
filename |
Nazwa pliku docelowego wraz z poprawną ścieżką połączenia danych istniejącego folderu. Przykład: 'lib://Table Files/target.qvd' W dotychczasowym trybie tworzenia skryptów obsługiwane są również następujące formaty ścieżek:
|
format-spec ::=( ( txt | qvd | parquet), compression is codec) |
Specyfikację formatu można ustawić na jeden z następujących formatów plików. Jeśli specyfikacja formatu będzie pominięta, wówczas zostanie przyjęty format qvd.
Jeśli używasz parquet, możesz również ustawić, który kodek kompresji ma być używany z compression is. Jeśli nie określisz kodeka z compression is, zostanie użyty kodek snappy. Dostępne są następujące ustawienia kompresji:
Przykład: Store mytable into [lib://AttachedFiles/myfile.parquet] (parquet, compression is lz4); |
Przykłady:
Store mytable into xyz.qvd (qvd);
Store * from mytable into 'lib://FolderConnection/myfile.qvd';
Store Name, RegNo from mytable into xyz.qvd;
Store Name as a, RegNo as b from mytable into 'lib://FolderConnection/myfile.qvd';
Store mytable into myfile.txt (txt);
Store mytable into [lib://FolderConnection/myfile.csv] (txt);
Store mytable into myfile.parquet (parquet);
Store * from mytable into 'lib://FolderConnection/myfile.qvd';
Zapisywanie w plikach parquet
Parquet to format pliku o silnym typowaniu, w którym każde pole zawiera pojedynczy, określony typ danych (np. in32, double, sygnatura czasowa lub tekst). Qlik Sense przechowuje dane wewnętrzne jako słabo typowane wartości typu dual, w których dane z różnych źródeł można mieszać w tych samych polach. Ponieważ w każdym polu w pliku Parquet można przechowywać tylko jedną część wartości typu dual, ważne jest, aby wiedzieć, co zawiera każde pole. Qlik Sense używa domyślnie typu pola do określenia sposobu przechowywania tego pola. W przypadku przechowywania danych w plikach Parquet w określonym formacie należy podczas ich ładowania określić, jakiego rodzaju dane mają być Twoje pola. Jeśli spróbujesz zapisać dane w niezgodnych polach pliku Parquet, na przykład liczby w polu tekstowym lub tekst w polu znacznika czasu, otrzymasz wartości zerowe.
Podczas ładowania danych, które zamierzasz przechowywać w pliku Parquet, można zmienić domyślny sposób działania. Możesz sformatować plik tak, aby zmienić typ danych, lub dodać znacznik, aby wymusić określone typy kolumn w formacie Parquet.
Formatowanie danych do przechowywania w pliku Parquet
Do klasyfikowania danych można używać funkcji formatowania Qlik Sense. Na przykład Text(), Num(), Interval() lub Timestamp() mogą wymuszać formaty danych podczas zapisywania danych w pliku Parquet. Qlik Sense może przechowywać dane w prawie 20 typach danych w zależności od atrybutów pól i automatycznych znaczników pól. Więcej informacji zawiera temat Funkcje interpretacji.
Przykład: Formatowanie danych przy użyciu Num() i Text()
Poniższy przykład ilustruje przygotowanie danych do przechowywania w pliku Parquet. Funkcja Num() jest stosowana do pola liczbowego. Funkcję Text() stosuje się zarówno do tekstu, jak i typu mieszanego. W przypadku typu mieszanego funkcja Text() zapobiega traktowaniu go jak pola liczbowego w Parquet i zmianie wartości tekstowych na wartości null.
NoConcatenate LOAD num, text, Text(mixed) as mixed RESIDENT Data; STORE Format INTO [lib://AttachedFiles/Tmp.parquet] (parquet);
Oznaczanie danych w celu zapisu w pliku Parquet
Dane oznacza się znacznikami $parquet, aby wymusić określone typy kolumn podczas przechowywania danych w pliku Parquet. Każdy typ danych można wymusić, dodając odpowiedni znacznik sterujący. Na przykład, aby zapisać pole jako typ INT32 w pliku Parquet, oznacz je znacznikiem $parquet-int32 w skrypcie ładowania. W zależności od typu danych będzie przechowywany ciąg znaków lub reprezentacja numeryczna danych typu dual.
Poniższych znaczników sterujących Parquet można używać do oznaczania pól do przechowywania w plikach Parquet.
Znacznik sterujący | Dual | Typ fizyczny | Typ logiczny | Przekształcony typ |
---|---|---|---|---|
$parquet-boolean | Liczba | BOOLEAN | NONE | NONE |
$parquet-int32 | Liczba | INT32 | NONE | NONE |
$parquet-int64 | Liczba | INT64 | NONE | NONE |
$parquet-float | Liczba | FLOAT | NONE | NONE |
$parquet-double | Liczba | DOUBLE | NONE | NONE |
$parquet-bytearray | Ciąg znaków | BYTE_ARRAY | NONE | UTF8 |
$parquet-bytearrayfix | Liczba | FIXED_LEN_BYTE_ARRAY | NONE | DECIMAL |
$parquet-decimal | Liczba | INT64 | DECIMAL | DECIMAL |
$parquet-date | Liczba | INT32 | DATE | DATE |
$parquet-time | Liczba | INT64 | TIME | TIME_MICROS |
$parquet-timestamp | Liczba | INT64 | TIMESTAMP | TIMESTAMP_MICROS |
$parquet-string | Ciąg znaków | BYTE_ARRAY | STRING | UTF8 |
$parquet-enum | Ciąg znaków | BYTE_ARRAY | ENUM | ENUM |
$parquet-interval | Liczba | FIXED_LEN_BYTE_ARRAY | INTERVAL | INTERVAL |
$parquet-json | Ciąg znaków | BYTE_ARRAY | JSON | JSON |
$parquet-bson | Ciąg znaków | BYTE_ARRAY | BSON | BSON |
$parquet-uuid | Ciąg znaków | FIXED_LEN_BYTE_ARRAY | UUID | NONE |
Przykład: Oznaczanie danych w celu zapisu w pliku Parquet
W tym przykładzie dwa znaczniki służą do definiowania danych dla formatu Parquet. Pole num jest oznaczone znacznikiem $parquet-int32 w celu zdefiniowania go jako pola liczbowego, które w pliku Parquet zostanie ustawione jako INT32.
Przechowywanie zagnieżdżonych danych w plikach Parquet
Możesz przechowywać wiele tabel w plikach Parquet, zagnieżdżając je w uporządkowanych danych. Store obsługuje ustrukturyzowane węzły i węzły w formie listy w schemacie gwiazdy. Pojedyncze tabele można również przechowywać w trybie zagnieżdżonym, używając określenia Ogranicznikiem jest.
Podczas zapisywania tabel określ tabele, które chcesz uwzględnić, oddzielając je przecinkami. Na przykład: STORE Table1, Table2, Table3 INTO [lib://<file location>/<file name>.parquet] (parquet);. Możesz kontrolować, które pola mają być zachowane, korzystając z listy pól w instrukcji Store. Na przykład STORE Field1, Field2, FROM Table1, Table2 INTO [lib://<file location>/<file name>.parquet] (parquet);. Wszystkie pola na liście pól muszą znajdować się w co najmniej jednej z wymienionych tabel. Pierwsza tabela w instrukcji Store zostanie użyta jako tabela faktów w schemacie gwiaździstym.
Nazwy pól służą do kontrolowania sposobu tworzenia i zagnieżdżania grup. Domyślnie nazwy pól są dzielone na węzły za pomocą kropki (.). Separator można zmienić, ustawiając zmienną systemową FieldNameDelimiter lub używając specyfikatora Delimiter is. Specyfikator spowoduje zastąpienie zmiennej systemowej. Aby uzyskać więcej informacji, zobacz temat Praca ze zmiennymi w edytorze ładowania danych.
Nazwy pól są oddzielane separatorem, a poszczególne części służą do tworzenia schematu z zagnieżdżonymi grupami. Na przykład instrukcja STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); utworzy dwie grupy (Group1 i Group2) z Field1, Field2 i Field3, Field4.
Podczas przechowywania zagnieżdżonych danych w formacie Parquet klucze między tabelami są przekształcane w węzły łączy w schemacie. Tabele są przekształcane w ustrukturyzowane węzły w schemacie. Domyślną transformację można zastąpić za pomocą nazw pól.
Przykład: Przechowywanie zagnieżdżonych danych w pliku Parquet
Wynikowy plik Parquet ma następujący schemat:
Ograniczenia
Przechowywanie zagnieżdżonych danych w formacie Parquet ma następujące ograniczenia:
Operacja Store nie obsługuje węzłów mapy.
Przechowywanie nie obejmuje pól klucza generowanych w wyniku ładowania zagnieżdżonych plików Parquet.
Nie można przechowywać razem danych z tabel, które nie są powiązane z polami klucza.
Zagnieżdżony plik denormalizuje model danych. Wartości, do których nie ma odniesień, nie zostaną zapisane, a wartości, do których istnieje wiele odwołań, zostaną skopiowane.