Store
De Store-instructie genereert een QVD-, Parquet-, CSV- of TXT-bestand.
Syntaxis:
Store [ fieldlist from] table into filename [ format-spec ];
De opdracht maakt een expliciet genoemd QVD, Parquet of tekstbestand aan.
De opdracht kan alleen velden exporteren uit één gegevenstabel, tenzij u opslaat in Parquet. Als velden uit diverse tabellen moeten worden geëxporteerd in een QVD-, CSV- of TXT-bestand, moet eerst een expliciete join in het script worden opgegeven om de te exporteren gegevenstabel te maken. U kunt meerdere tabellen in één Parquet opslaan door de gegevens in de Parquet-bestanden te nesten.
De tekstwaarden worden in de indeling BOM naar het CSV-bestand in UTF-8geëxporteerd. U kunt een scheidingsteken opgeven, zie LOAD. De store-opdracht voor een CSV-bestand ondersteunt geen BIFF-export.
Argumenten:
Argument | Beschrijving |
---|---|
fieldlist::= ( * | field) { , field } ) |
Een lijst van de te selecteren velden. Met een * als veldlijst worden alle velden aangeduid. field::= fieldname [as aliasname ] fieldname is een tekst die identiek is aan een veldnaam in table. (Houd er rekening mee dat de veldnaam tussen rechte dubbele aanhalingstekens of vierkante haken moet staan als deze spaties of andere niet-standaardtekens bevat.) aliasname is een alternatieve naam voor het veld, te gebruiken in het resulterende QVD- of CSV-bestand. |
table | Een scriptlabel representeert een reeds geladen tabel die als gegevensbron wordt gebruikt. |
filename |
De naam van het doelbestand inclusief een geldig pad naar een bestaande mapgegevensverbinding. Voorbeeld: 'lib://Table Files/target.qvd' In de bestaande scriptmodus, worden tevens de volgende padindelingen ondersteund:
|
format-spec ::=( ( txt | qvd | parquet), compressie is codec) |
U kunt de indelingsspecificatie instellen voor een van deze bestandsindelingen. Als de opmaakspecificatie wordt weggelaten, wordt qvd verondersteld.
Als u parquet gebruikt, kunt u ook instellen welke compressiecodec met compressie is moet worden gebruikt. Als u de compressiecodec met compressie is niet opgeeft, wordt snappy gebruikt. De volgende compressie-instellingen zijn beschikbaar:
Voorbeeld: Store mytable into [lib://AttachedFiles/myfile.parquet] (parquet, compression is lz4); |
Voorbeelden:
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';
Opslaan in Parquet-bestanden
Parquet is een sterk getypeerde bestandsindeling, waarbij elk veld een afzonderlijk specifiek type gegevens bevat (zoals in32, double, tijdstempel of tekst). Qlik Sense slaat interne gegevens op als een zwak getypeerde dual, waarbij gegevens van verschillende bronnen in dezelfde velden gecombineerd kunnen worden. Omdat maar één deel van de dual opgeslagen kan worden in elk veld in Parquet, is het belangrijk om te weten wat elk veld bevat. Qlik Sense gebruikt standaard het veldtype om te bepalen hoe het veld moet worden opgeslagen. U moet het gegevenstype van uw velden opgeven voor het laden als u gegevens in Parquet-bestanden in een specifieke indeling opslaat. Als u probeert om gegevens op te slaan in niet-compatibele velden in een Parquet-bestand, zoals getallen in een tekstveld of tekst in een tijdstempelveld, krijgt u null-waarden.
Het is mogelijk om het standaardgedrag te wijzigen als u gegevens laadt die u in Parquet wilt opslaan. U kunt instellen dat uw gegevenstype wordt gewijzigd of u kunt gegevens taggen om specifieke kolomtypen in Parquet af te dwingen.
Gegevens opmaken voor opslag in Parquet
U kunt Qlik Sense-opmaakfuncties gebruiken om uw gegevens te classificeren. Text(), Num(), Interval() of Timestamp() kunnen bijvoorbeeld gegevensopmaak afdwingen bij het opslaan van gegevens in Parquet. Qlik Sense kan gegevens opslaan in bijna 20 gegevenstypen, afhankelijk van de veldkenmerken en automatische veldtags. Ga voor meer informatie naar Interpretatiefuncties.
Voorbeeld: Gegevens opmaken met Num() en Text()
Het volgende voorbeeld toont hoe u gegevens voorbereidt die u wilt opslaan in Parquet. Num() wordt toegepast op het getalveld. Text() wordt toegepast op tekst en gemengd. In het geval van een gemengd veld, voorkomt Text() dat het wordt verwerkt als een getalveld in Parquet en worden de tekstwaarden gewijzigd in null-waarden.
NoConcatenate LOAD num, text, Text(mixed) as mixed RESIDENT Data; STORE Format INTO [lib://AttachedFiles/Tmp.parquet] (parquet);
Gegevens taggen voor opslag in Parquet
U tagt uw gegevens met $parquet-tags om specifieke kolomtypen af te dwingen bij het opslaan van gegevens in Parquet. Elk gegevenstype kan worden afgedwongen door de bijbehorende controletag toe te voegen. Stel dat u een veld als INT32 in Parquet wilt opslaan, tag dit dan met $parquet-int32 in het load-script. Afhankelijk van het gegevenstype wordt de tekenreeks of de numerieke weergave van de dubbele gegevens opgeslagen.
U kunt de volgende Parquet-controletag gebruiken om velden te taggen voor opslag in Parquet-bestanden.
Controletag | Dual | Fysiek type | Logisch type | Geconverteerd type |
---|---|---|---|---|
$parquet-boolean | Getal | BOOLEAN | NONE | NONE |
$parquet-int32 | Getal | INT32 | NONE | NONE |
$parquet-int64 | Getal | INT64 | NONE | NONE |
$parquet-float | Getal | FLOAT | NONE | NONE |
$parquet-double | Getal | DOUBLE | NONE | NONE |
$parquet-bytearray | Tekenreeks | BYTE_ARRAY | NONE | UTF8 |
$parquet-bytearrayfix | Getal | FIXED_LEN_BYTE_ARRAY | NONE | DECIMAL |
$parquet-decimal | Getal | INT64 | DECIMAL | DECIMAL |
$parquet-date | Getal | INT32 | Date | Date |
$parquet-time | Getal | INT64 | TIME | TIME_MICROS |
$parquet-timestamp | Getal | INT64 | TIMESTAMP | TIMESTAMP_MICROS |
$parquet-string | Tekenreeks | BYTE_ARRAY | STRING | UTF8 |
$parquet-enum | Tekenreeks | BYTE_ARRAY | ENUM | ENUM |
$parquet-interval | Getal | FIXED_LEN_BYTE_ARRAY | INTERVAL | INTERVAL |
$parquet-json | Tekenreeks | BYTE_ARRAY | JSON | JSON |
$parquet-bson | Tekenreeks | BYTE_ARRAY | BSON | BSON |
$parquet-uuid | Tekenreeks | FIXED_LEN_BYTE_ARRAY | UUID | NONE |
Voorbeeld: Gegevens taggen voor opslag in Parquet
In dit voorbeeld worden twee tags gebruikt om de gegevens voor Parquet te definiëren. Het veld num is getagd met $parquet-int32 om het te definiëren als getalveld dat in Parquet als INT32 wordt ingesteld.
Geneste gegevens opslaan in Parquet-bestanden
U kunt meerdere tabellen opslaan in een Parquet-bestand door ze te nesten in gestructureerde gegevens. Store ondersteunt gestructureerde knooppunten en lijstknooppunten in een sterrenschema. Afzonderlijke tabellen kunnen ook in de geneste modus worden opgeslagen met behulp van de specificatie Scheidingsteken is.
Wanneer u tabellen opslaat, kunt u de gewenste tabellen specificeren door ze te scheiden met komma's. Bijvoorbeeld: STORE Table1, Table2, Table3 INTO [lib://<file location>/<file name>.parquet] (parquet);. U kunt bepalen welke velden worden opgeslagen door een veldlijst te gebruiken in de Store-opdracht. Bijvoorbeeld STORE Field1, Field2, FROM Table1, Table2 INTO [lib://<file location>/<file name>.parquet] (parquet);. Alle velden in de veldenlijst moeten in één of meer van de vermelde tabellen staan. De eerste tabel in de Store-instructie wordt gebruikt als de feitentabel in het sterrenschema.
Veldnamen worden gebruikt om te beheren hoe groepen worden gemaakt en genest. Standaard worden veldnamen met een punt (.) opgesplitst in knooppunten. Het scheidingsteken kan worden gewijzigd door de systeemvariabele FieldNameDelimiter in te stellen of door de specificatie Scheidingsteken is te gebruiken. De specificatie overschrijft de systeemvariabele.Ga voor meer informatie naar Werken met variabelen in de editor voor het laden van gegevens.
Veldnamen worden opgesplitst door het scheidingsteken en de onderdelen worden gebruikt om het schema met geneste groepen te maken. STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); maakt bijvoorbeeld twee groepen (Group1 en Group2) met Fields1, Field2 en Field3, Field4.
Wanneer geneste gegevens in Parquet worden opgeslagen, worden sleutels tussen tabellen omgezet in link-knooppunten in het schema. De tabellen worden omgezet in gestructureerde knooppunten in het schema. U kunt de standaardtransformatie overschrijven met veldnamen.
Voorbeeld: Geneste gegevens opslaan in Parquet-bestanden
Het resulterende Parquet-bestand heeft het volgende schema:
Beperkingen
Geneste gegevens opslaan in Parquet heeft de volgende beperkingen:
Opslag ondersteunt geen kaartknooppunten.
Tijdens het opslaan worden sleutelvelden die zijn gegeneerd vanuit het laden van geneste Parquet-bestanden niet toegevoegd.
U kunt gegevens uit tabellen niet samen opslaan als ze niet zijn gekoppeld aan sleutelvelden.
Het geneste bestand denormaliseert het gegevensmodel. Waarden waar niet naar wordt verwezen, worden niet opgeslagen en waarden waar meerdere keren naar wordt verwezen, worden gekopieerd.