Store
Store-satsen skapar en QVD-, Parquet-,CSV- eller TXT-fil.
Syntax:
Store [ fieldlist from] table into filename [ format-spec ];
Satsen skapar en explicit namngiven QVD-, Parquet- eller textfil.
Satsen kan endast exportera fält från en datatabell, såvida du inte lagrar till Parquet. Om fält från flera tabeller ska exporteras till en QVD-, CSV- eller TXT-fil måste du först göra en explicit join i skriptet för att skapa den datatabell som ska exporteras. Du kan lagra flera tabeller i en enda Parquet genom att nästla data i Parquet-filerna.
Textvärdena exporteras till CSV-filen i UTF-8-format. En avgränsare kan anges, se LOAD. Om store sparar till en CSV-fil stöds inte BIFF-export.
Argument:
Argument | Beskrivning |
---|---|
fieldlist::= ( * | field) { , field } ) |
En lista över de fält som ska väljas. Genom att använda * som fältlista anger man alla fält. field::= fieldname [as aliasname ] fieldname är en text som är identisk med fältnamnet i table. (Observera att fältnamnet måste omslutas av raka, dubbla citationstecken eller av hakparenteser om det innehåller exempelvis mellanslag eller andra tecken som inte är standard.) aliasname är ett alternativt namn för det fält som ska användas i den färdiga QVD- eller CSV-filen. |
table | En skriptetikett för en redan inläst tabell som ska användas som datakälla. |
filename |
Namnet på målfilen inkluderar en giltig sökväg till en befintlig mappdatakoppling. Exempel: 'lib://Table Files/target.qvd' I det bakåtkompatibla skriptläget stöds även följande sökvägsformat:
|
format-spec ::=( ( txt | qvd | parquet), komprimering är codec) |
Du kan ställa in formatspecifikationen till något av dessa filformat. Om formatspecifikationen utelämnas antas qvd.
Om du använder parquet kan du också ställa in vilken komprimeringskodek som ska användas med komprimering är. Om du inte anger komprimeringskodeken med komprimering är så används snappy. Följande komprimeringsinställningar är tillgängliga:
Exempel: Store mytable into [lib://AttachedFiles/myfile.parquet] (parquet, compression is lz4); |
Exempel:
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 myfile.parquet (parquet);
Store * from mytable into 'lib://FolderConnection/myfile.qvd';
Lagra i parquet-filer
Parquet är ett starkt typiserat filformat där varje fält innehåller en enda specifik typ av data (t.ex. int32, double, timestamp eller text). Qlik Sense lagrar interna data som en löst typiserad dual, där data från olika källor kan blandas i samma fält. Eftersom bara en part av dualen kan lagras i varje fält i Parquet är det viktigt att veta vad varje fält innehåller. Som standard använder Qlik Sense fälttypen för att avgöra hur fältet ska lagras. När data lagras i Parquet-filer i ett specifikt format måste du ange vilken typ av data dina fält är när de laddas. Om du försöker lagra data i inkompatibla fält i en Parquet-fil, till exempel tal i ett textfält eller text i ett tidsmarkörfält kommer du att erhålla nullvärden.
När data laddas som du tänker lagra i Parquet är det möjligt att ändra standardbeteendet. Du kan antingen formatera det så att din datatyp ändras eller tagga det för att tvinga fram specifika kolumntyper i Parquet.
Formatera data för lagring i Parquet
Du kan använda Qlik Sense formateringsfunktioner för att klassificera dina data. Text(), Num(), Interval() eller Timestamp() kan exempelvis tvinga fram dataformat när data lagras i Parquet. Qlik Sense kan lagra data i nästan 20 datatyper beroende på fältattribut och automatiska fälttaggar. Mer information finns i Tolkningsfunktioner
Exempel: Formatera data med Num() och Text()
I följande exempel presenteras dataförberedelse för lagring i Parquet. Num() tillämpas på num-fältet. Text() tillämpas på både text och blandade. Vid blandade förhindrar Text() det från att behandlas från som ett nummerfält i Parquet och att textvärdena ändras till nullvärden.
NoConcatenate LOAD num, text, Text(mixed) as mixed RESIDENT Data; STORE Format INTO [lib://AttachedFiles/Tmp.parquet] (parquet);
Tagga data för lagring i Parquet
Du taggar dina data med $parquet-taggar för att tvinga specifika kolumntyper när data lagras i Parquet. Varje datatyp kan tvingas fram genom att man lägger till motsvarande kontrolltagg. För att exempelvis lagra ett fält som INT32 i Parquet, taggar du det med $parquet-int32 i laddningsskriptet. Beroende på datatypen kommer antingen strängen eller den numeriska representationen av de duala data att lagras.
Följande Parquet-kontrolltaggar kan användas för att tagga fält för att lagra dem i Parquet-filer.
Kontrolltagg | Dual | Fysisk typ | Logisk typ | Konverterad typ |
---|---|---|---|---|
$parquet-boolean | Tal | BOOLEAN | NONE | NONE |
$parquet-int32 | Tal | INT32 | NONE | NONE |
$parquet-int64 | Tal | INT64 | NONE | NONE |
$parquet-float | Tal | FLOAT | NONE | NONE |
$parquet-double | Tal | DOUBLE | NONE | NONE |
$parquet-bytearray | Sträng | BYTE_ARRAY | NONE | UTF8 |
$parquet-bytearrayfix | Tal | FIXED_LEN_BYTE_ARRAY | NONE | DECIMAL |
$parquet-decimal | Tal | INT64 | DECIMAL | DECIMAL |
$parquet-date | Tal | INT32 | Datum | Datum |
$parquet-time | Tal | INT64 | Tid | TIME_MICROS |
$parquet-timestamp | Tal | INT64 | TIMESTAMP | TIMESTAMP_MICROS |
$parquet-string | Sträng | BYTE_ARRAY | sträng | UTF8 |
$parquet-enum | Sträng | BYTE_ARRAY | ENUM | ENUM |
$parquet-interval | Tal | FIXED_LEN_BYTE_ARRAY | INTERVAL | INTERVAL |
$parquet-json | Sträng | BYTE_ARRAY | JSON | JSON |
$parquet-bson | Sträng | BYTE_ARRAY | BSON | BSON |
$parquet-uuid | Sträng | FIXED_LEN_BYTE_ARRAY | UUID | NONE |
Exempel: Tagga data för lagring i Parquet
I det här exemplet används två taggar för att definiera data för Parquet. Fältet num taggas med $parquet-int32 för att definiera det som ett talfält som kommer att ställas in som INT32 i Parquet.
Lagra nästlade data i Parquet-filer
Du kan lagra flera tabeller i Parquet-filer genom att nästla dem till strukturerade data. Store har stöd för strukturerade noder och listar noder i ett star-schema. Enstaka tabeller kan också lagras i nästlat läge genom att använda Begränsare är-specifikatorn.
När du lagrar tabeller ska du ange de tabeller du vill inkludera separerat med komman. Till exempel: STORE Table1, Table2, Table3 INTO [lib://<file location>/<file name>.parquet] (parquet);. Du kan styra vilka fält som lagras genom att använda en fältlista i Store-satsen. Till exempel STORE Field1, Field2, FROM Table1, Table2 INTO [lib://<file location>/<file name>.parquet] (parquet);. Alla fält i fältlistan måste finna i en eller flera av de angivna tabellerna. Den första tabellen i Store-satsen används som faktatabell i star-schemat.
Fältnamn används för att styra hur grupper skapas och nästlas. Som standar delas fältnamn upp i noder med en punkt (.). Avgränsaren kan ändras genom att ställa in systemvariabeln FieldNameDelimiter eller genom att använda specificeraren Avgränsare är. Specificeraren åsidosätter systemvariabeln. Mer information finns i Arbeta med variabler i Skriptredigeraren.
Fältnamn delas upp efter avgränsare och delarna används för att skapa schemat med nästlade grupper. STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); kommer exempelvis att skapa två grupper (Group1 och Group) med Fields1, Fields2 och Field3, Field4.
När nästlade data lagras i Parquet omvandlas nycklar mellan tabeller till länknoder i schemat. Tabeller omvandlas till strukturerade noder i schemat. Du kan åsidosätta standardomvandlingen med fältnamn.
Exempel: Lagra nästlade data i en Parquet-fil
Den resulterande Parquet-filen har följande schema:
Begränsningar
Att lagra nästlade data i Parquet har följande begränsningar:
Lagring har inte stöd för mappningsnoder.
Lagring inkluderar inte nyckelfält som genererats från laddning av nästlade parquet-filer.
Du kan inte lagra data från tabeller tillsammans om de inte är länkade med nyckelfält.
Den nästlade filen avnormaliserar datamodellen. Icke-refererade värden kommer inte att sparas och värden som refererats flera gånger kommer att kopieras.