Gå till huvudinnehåll Gå till ytterligare innehåll

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.

Anteckning om informationI vissa fall med data som inte är väl utformad kommer fälten att omges med dubbla citattecken för att säkerställa att data tolkas korrekt. Detta kan exempelvis hända om fältet innehåller tecken som citattecken, kommatecken, mellanslag eller radbrytningar.

Du kan specificera om du vill lagra filen i ditt personliga utrymme eller i ett delat utrymme där du har skrivbehörighet. Om du lagrar den i ett delat utrymme kan medlemmar använda dessa data när de skapar appar i utrymmet. Se: Hantera behörigheter i delade utrymmen.

Argument:  

Argument för kommandot Store
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:  

  • Personligt utrymme: [lib://DataFiles/xyz.qvd]

    "/"-avgränsade sökvägshierarkier kan användas i filnamn. Dock stöder Data Load Editor och Data Manager UI för närvarande inte visning av sökvägar på ett hierarkiskt sätt. Om ett "/"-avgränsat filnamn används kommer det att visas i sin helhet i filnamnskolumnen.

  • Delat utrymme: [lib://TeamSharedSpace:DataFiles/xyz.qvd]
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.

  • txt för CSV och TXT-filer.

  • qvd för QVD-filer.

  • parquet för Parquet-filer.

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:

  • uncompressed

  • snappy

  • gzip

  • lz4

  • brotli

  • zstd

  • lz4_hadoop

Exempel:

Store mytable into [lib://DataFiles/myfile.parquet] (parquet, compression is lz4);

Anteckning om informationFiltillägget för DataFiles-kopplingar är skiftlägeskänsligt. Till exempel: .qvd.

Exempel:  

Store mytable into [lib://DataFiles/xyz.qvd];

Store * from mytable into [lib://DataFiles/myfile.qvd];

Store Name, RegNo from mytable into [lib://DataFiles/xyz.qvd];

Store Name as a, RegNo as b from mytable into [lib://DataFiles/myfile.qvd];

Store mytable into [lib://DataFiles/myfile.txt] (txt);

Store mytable into [lib://DataFiles/myfile.parquet] (parquet);

Store * from mytable into [lib://DataFiles/myfile.csv] (txt);

Store * from mytable into [lib://TeamSharedSpace:DataFiles/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.

Data: LOAD * INLINE [ num, text, mixed 123.321, abc, 123 456.654, def, xyz 789.987, ghi, 321 ]; Format:
NoConcatenate LOAD num, text, Text(mixed) as mixed RESIDENT Data; STORE Format INTO [lib://DataFiles/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.

Parquet-kontrolltaggar
KontrolltaggDualFysisk typLogisk typKonverterad typ
$parquet-booleanTalBOOLEANNONENONE
$parquet-int32TalINT32NONENONE
$parquet-int64TalINT64NONENONE
$parquet-floatTalFLOATNONENONE
$parquet-doubleTalDOUBLENONENONE
$parquet-bytearraySträngBYTE_ARRAYNONEUTF8
$parquet-bytearrayfixTalFIXED_LEN_BYTE_ARRAYNONEDECIMAL
$parquet-decimalTalINT64DECIMALDECIMAL
$parquet-dateTalINT32DatumDatum
$parquet-timeTalINT64TidTIME_MICROS
$parquet-timestampTalINT64TIMESTAMPTIMESTAMP_MICROS
$parquet-stringSträngBYTE_ARRAYsträngUTF8
$parquet-enumSträngBYTE_ARRAYENUMENUM
$parquet-intervalTalFIXED_LEN_BYTE_ARRAYINTERVALINTERVAL
$parquet-jsonSträngBYTE_ARRAYJSONJSON
$parquet-bsonSträngBYTE_ARRAYBSONBSON
$parquet-uuidSträngFIXED_LEN_BYTE_ARRAYUUIDNONE

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.

Data: LOAD * INLINE [ num, text, 123.321, abc 456.654, def 789.987, ghi ]; TAG num WITH '$parquet-int32'; STORE Format INTO [lib://DataFiles/Tmp.parquet] (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.

Anteckning om informationGrupper och fält kanske inte har samma namn i en nod i schemat. Exempelvis kanske STORE Address, Address.Street INTO [nested.parquet] (parquet, delimiter is '.''); inte fungerar eftersom Address är tvetydigt och är både ett datafält och en grupp.

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

company: LOAD * INLINE [ company, contact A&G, Amanda Honda Cabro, Cary Frank Fenwick, Dennis Fisher Camros, Molly McKenzie ]; salesrep: LOAD * INLINE [ company, salesrep A&G, Bob Park Cabro, Cezar Sandu Fenwick, Ken Roberts Camros, Max Smith ]; headquarter: LOAD * INLINE [ company, country, city A&G, USA, Los Angeles Cabro, USA, Albuquerque Fenwick, USA, Baltimore Camros, USA, Omaha ]; region: LOAD * INLINE [ region, city West, Los Angeles Southwest, Albuquerque East, Baltimore Central, Omaha ]; STORE company, salesrep, headquarter, region INTO [lib://DataFiles/company.parquet] (parquet); DROP TABLES company, salesrep, headquarter, region;

Den resulterande Parquet-filen har följande schema:

company (String) contact (String) company:salesrep (List) salesrep (Group) salesrep (String) company:headquarter (List) headquarter (Group) country (String) city (String) city:region (List) region (Group) region (String)

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.

Var den här sidan till hjälp för dig?

Om du hittar några fel på denna sida eller i innehållet – ett stavfel, ett steg som saknas eller ett tekniskt fel – berätta för oss så att vi kan blir bättre!