Zu Hauptinhalt springen Zu ergänzendem Inhalt springen

Store

Mit dem Befehl Store wird eine QVD-, Parquet-, CSV- oder TXT-Datei erstellt.

Syntax:  

Store [ fieldlist from] table into filename [ format-spec ];

Mit dem Befehl wird eine explizit benannte QVD-Datei, eine Parquet-Datei oder eine Textdatei erstellt.

Durch den Befehl können nur Felder aus einer Datentabelle exportiert werden, es sei denn, Sie speichern in Parquet. Wenn Felder aus mehreren Tabellen in eine QVD-, CSV- oder TXT-Datei exportiert werden sollen, muss zuvor im Skript ein expliziter join erstellt werden, um die zu exportierende Datentabelle zu generieren. Sie können mehrere Tabellen in einer einzelnen Parquet-Datei speichern, indem Sie die Daten in den Parquet-Dateien verschachteln.

Textwerte werden im UTF-8-Format in der CSV-Datei nach BOM exportiert. Es kann ein Trennzeichen festgelegt werden (siehe LOAD). Der store-Befehl in einer CSV-Datei unterstützt keinen BIFF-Export.

InformationshinweisIn einigen Fällen werden Felder, wenn Daten nicht korrekt formatiert sind, von doppelten Anführungszeichen eingeschlossen, um sicherzustellen, dass die Daten richtig interpretiert werden. Das kann beispielsweise vorkommen, wenn ein Feld Zeichen wie Anführungszeichen, Kommas, Leerzeichen oder Zeilenumbrüche enthält.

Sie können angeben, ob Sie Ihre Datei im persönlichen Bereich oder in einem freigegebenen Bereich, für den Sie Schreibberechtigungen haben, speichern möchten. Wenn Sie in einem freigegebenen Bereich speichern, können Mitglieder diese Daten zum Erstellen von Apps im Bereich nutzen. Weitere Informationen finden Sie unter Verwalten von Berechtigungen in freigegebenen Bereichen.

Argumente:  

Argumente des Store-Befehls
Argument Beschreibung
fieldlist::= ( * | field) { , field } )

Liste der zu ladenden Felder. Das Sternchen * steht für alle Felder. 

field::= fieldname [as aliasname ]

Dabei ist fieldname ein Text, der einem Feldnamen in table entspricht. (Beachten Sie, dass der Feldname zwischen geraden doppelten Anführungszeichen oder eckigen Klammern stehen muss, wenn er Leerzeichen oder andere nicht standardmäßige Zeichen enthält.)

aliasname ist ein alternativer Name, der anstelle des Feldnamens in der QVD- oder CSV-Datei verwendet werden soll.

table Ein Skriptname einer bereits eingelesenen Tabelle.
filename

Der Name der Zieldatei einschließlich eines gültigen Pfads zu einer vorhandenen Ordner-Datenverbindung. Einzelheiten darüber, was als gültiger Pfad gilt, finden Sie unter Regeln für gültige Bereichsordnerpfade.

In Qlik Cloud Analytics werden hierarchische Ordnerstrukturen unterstützt und können im Befehl referenziert werden.

Beispiele:  

  • Persönlicher Bereich (Pfad der obersten Ebene): [lib://DataFiles/abc.qvd]

  • Persönlicher Bereich (verschachtelter Ordner): [lib://DataFiles/MyFolder/abc.qvd]

  • Freigegebener Bereich (Pfad der obersten Ebene): [lib://TeamSharedSpace:DataFiles/xyz.qvd]

  • Freigegebener Bereich (verschachtelter Ordner): [lib://TeamSharedSpace:DataFiles/MyFolder/abc.qvd]

Weitere Informationen und Beispiele finden Sie unter Speichern von Dateien in Bereichen in Qlik Cloud Analytics.

format-spec ::=( ( txt | qvd | parquet), Komprimierung ist codec)

Sie können die Formatspezifikation auf jedes dieser Dateiformate festlegen. Fehlt die Formatbezeichnung, wird qvd angenommen.

  • txt für CSV- und TXT-Dateien.

  • qvd für QVD-Dateien.

  • parquet für Parquet-Dateien.

Wenn Sie parquet verwenden, können Sie auch festlegen, welcher Komprimierungs-Codec mit Komprimierung ist verwendet wird. Wenn Sie den Komprimierungs-Codec nicht mit Komprimierung ist festlegen, wird snappy verwendet. Die folgenden Komprimierungseinstellungen sind verfügbar:

  • uncompressed

  • snappy

  • gzip

  • lz4

  • brotli

  • zstd

  • lz4_hadoop

Beispiel:

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

InformationshinweisBei der Dateierweiterung von DataFiles-Verbindungen wird zwischen Groß- und Kleinschreibung unterschieden. Beispiel: .qvd.

Beispiele:  

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];

Speichern in Parquet-Dateien

Parquet ist ein stark typorientiertes Dateiformat, in dem jedes Feld einen einzelnen spezifischen Datentyp enthält (z. B. in32, double, timestamp oder text). Qlik Sense speichert interne Daten dual lose nach Typen sortiert, wobei Daten aus verschiedenen Quellen in den gleichen Feldern gemischt werden können. Da nur ein Teil des dualen Werts in jedem Feld in Parquet gespeichert werden kann, ist es wichtig zu wissen, was in jedem Feld enthalten ist. Standardmäßig verwendet Qlik Sense den Feldtyp, um zu bestimmen, wie das Feld gespeichert werden soll. Wenn Daten in Parquet-Dateien in einem spezifischen Format gespeichert werden, müssen, Sie beim Laden angeben, von welchem Datentyp Ihre Felder sind. Wenn Sie versuchen, Daten in einer Parquet-Datei in inkompatiblen Felder zu speichern (z. B. Zahlen in einem Textfeld oder Text in einem Zeitstempelfeld), führt dies zu Null-Werten.

Wenn Sie Daten laden, die in Parquet gespeichert werden sollen, ist es möglich, das Standardverhalten zu ändern. Sie können die Daten entweder formatieren, um den Datentyp zu ändern, oder sie mit Tags versehen, um einen bestimmten Spaltentyp in Parquet zu erzwingen.

Formatieren von Daten zum Speichern in Parquet

Sie können die Formatierungsfunktionen von Qlik Sense verwenden, um Ihre Daten zu klassifizieren. Beispielsweise können Text(), Num(), Interval() oder Timestamp() Datenformate beim Speichern von Daten in Parquet erzwingen. Qlik Sense kann Daten in fast 20 Datentypen speichern, abhängig von Feldattributen und automatischen Feld-Tags. Weitere Informationen finden Sie unter Interpretationsfunktionen.

Beispiel: Formatieren von Daten mit Num() und Text()

Das folgende Beispiel zeigt, wie Daten für das Speichern in Parquet vorbereitet werden. Num() wird auf das numerische Feld angewendet. Text() wird sowohl auf Textfelder als auch auf gemischte Felder angewendet. Im Fall gemischter Felder verhindert Text(), dass die Felder in Parquet wie numerische Felder behandelt und die Textwerte in Null-Werte geändert werden.

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);

Taggen von Daten zum Speichern in Parquet

Sie taggen Ihre Daten mit $parquet-Tags, um spezifische Spaltentypen zu erzwingen, wenn Daten in Parquet gespeichert werden. Jeder Datentyp kann erzwungen werden, indem das entsprechende Kontroll-Tag hinzugefügt wird. Um beispielsweise ein Feld in Parquet als INT32 zu speichern, taggen Sie es im Ladeskript mit $parquet-int32. Abhängig vom Datentyp wird entweder die Zeichenfolge oder die numerische Darstellung der dualen Daten gespeichert.

Die folgenden Parquet-Kontroll-Tags können verwendet werden, um Felder zum Speichern in Parquet-Dateien zu taggen.

Parquet-Kontroll-Tags
Kontroll-TagDualPhysischer TypLogischer TypKonvertierter Typ
$parquet-booleanZahlBOOLEANNONENONE
$parquet-int32ZahlINT32NONENONE
$parquet-int64ZahlINT64NONENONE
$parquet-floatZahlFLOATNONENONE
$parquet-doubleZahlDOUBLENONENONE
$parquet-bytearrayStringBYTE_ARRAYNONEUTF8
$parquet-bytearrayfixZahlFIXED_LEN_BYTE_ARRAYNONEDECIMAL
$parquet-decimalZahlINT64DECIMALDECIMAL
$parquet-dateZahlINT32DATEDATE
$parquet-timeZahlINT64TIMETIME_MICROS
$parquet-timestampZahlINT64TIMESTAMPTIMESTAMP_MICROS
$parquet-stringStringBYTE_ARRAYSTRINGUTF8
$parquet-enumStringBYTE_ARRAYENUMENUM
$parquet-intervalZahlFIXED_LEN_BYTE_ARRAYINTERVALINTERVAL
$parquet-jsonStringBYTE_ARRAYJSONJSON
$parquet-bsonStringBYTE_ARRAYBSONBSON
$parquet-uuidStringFIXED_LEN_BYTE_ARRAYUUIDNONE

Beispiel: Taggen von Daten zum Speichern in Parquet

In diesem Beispiel werden zwei Tags verwendet, um die Daten für Parquet zu definieren. Das Feld num wird mit $parquet-int32 getaggt, um es als numerisches Feld zu definieren, das in Parquet als INT32 festgelegt wird.

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);

Speichern von verschachtelten Daten in Parquet-Dateien

Sie können mehrere Tabellen in einer Parquet-Datei speichern, indem Sie sie in strukturierten Daten verschachteln. Store unterstützt strukturierte Knoten und Listenknoten in einem Sternschema. Einzelne Tabellen können auch mit dem Spezifikator Trennzeichen ist im verschachtelten Modus gespeichert werden.

Geben Sie die einzuschließenden Tabellen beim Speichern durch Kommas getrennt an. Hier ein Beispiel: STORE Table1, Table2, Table3 INTO [lib://<file location>/<file name>.parquet] (parquet);. Sie können steuern, welche Felder gespeichert werden, indem Sie eine Feldliste im Store-Befehl verwenden. Beispiel: STORE Field1, Field2, FROM Table1, Table2 INTO [lib://<file location>/<file name>.parquet] (parquet);. Alle Felder in der Feldliste müssen sich in einer oder mehreren der aufgelisteten Tabellen befinden. Die erste Tabelle im Store-Befehl wird als Fakttabelle im Sternschema verwendet.

Mit Feldnamen wird gesteuert, wie Gruppen erstellt und verschachtelt werden. Standardmäßig werden Feldnamen in Knoten mit einem Punkt (.) unterteilt. Das Trennzeichen kann geändert werden, in dem die Systemvariable FieldNameDelimiter eingerichtet oder der Spezifikator Trennzeichen ist verwendet wird. Der Spezifikator überschreibt die Systemvariable. Weitere Informationen finden Sie unter Arbeiten mit Variablen im Dateneditor.

Feldnamen werden vom Trennzeichen geteilt und die Teile dienen zum Erstellen des Schemas mit verschachtelten Gruppen. Beispielsweise werden mit STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); zwei Gruppen (Group1 und Group2) mit den Feldern Fields1, Field2 und Field3, Field4 erstellt.

InformationshinweisGruppen und Felder haben in einem Knoten im Schema möglicherweise nicht denselben Namen. Beispielsweise schlägt STORE Address, Address.Street INTO [nested.parquet] (parquet, delimiter is '.''); fehl, weil Adresse nicht eindeutig ist und sich sowohl auf ein Datenfeld als auch auf eine Gruppe beziehen kann.

Beim Speichern von verschachtelten Daten in Parquet werden Schlüssel zwischen Tabellen in Link-Knoten im Schema umgewandelt. Tabellen werden im Schema in strukturierte Knoten umgewandelt. Sie können die Standardumwandlung überschreiben, indem Sie Feldnamen verwenden.

Beispiel: Speichern von verschachtelten Daten in einer Parquet-Datei

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;

Die entstandene Parquet-Datei hat folgendes 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)

Einschränkungen

Beim Speichern von verschachtelten Daten in Parquet gelten die folgenden Beschränkungen:

  • Beim Speichern werden keine Zuordnungsknoten unterstützt.

  • Beim Speichern werden keine Schlüsselfelder eingeschlossen, die aus dem Laden verschachtelter Parquet-Dateien generiert wurden.

  • Es ist nicht möglich, Daten aus Tabellen zusammen zu speichern, die nicht mit Schlüsselfeldern verknüpft sind.

  • Die verschachtelte Datei denormalisiert das Datenmodell. Nicht referenzierte Werte werden nicht gespeichert, und mehrmals referenzierte Werte werden kopiert.

Speichern von Dateien in Bereichen in Qlik Cloud Analytics

Wenn Sie einen Store-Befehl in einem Ladeskript in Qlik Cloud verwenden, können Sie genau den Ordner in einem Bereich referenzieren, in dem Sie die erstellten Dateien speichern möchten. Folgen Sie den Regeln für gültige Bereichsordnerpfade. Zusätzlich gelten auch die folgenden Verhaltensweisen (nur für Store-Befehle):

  • Wenn der Bereich vorhanden ist, der angegebene Ordnerpfad jedoch nicht, wird der Pfad im Bereich erstellt. Abhängig von der definierten Ordnerstruktur können ein oder mehrere Ordner erstellt werden. Die Datei wird dort erstellt und gespeichert.

  • Wenn der Bereich vorhanden ist, aber der angegebene Ordnerpfad ungültige Trennzeichen verwendet (z. B. \, \\, //, /./ oder /../), wird der Store-Befehl trotzdem ausgeführt. Die Ausgabedatei wird stattdessen im Pfad der obersten Ebene im Zielbereich gespeichert und erhält einen Namen, der den vollständigen Pfad und nicht nur den angegebenen Namen enthält.

  • Wenn der Bereich nicht vorhanden ist, kann der Store-Befehl nicht ausgeführt werden und es wird ein Fehler zurückgegeben.

Die folgenden Beispiele zeigen, wie Sie innerhalb des Store-Befehls einen bestimmten Ordnerpfad im Bereich referenzieren können.

Beispiel: Speichern einer Datei im Pfad der obersten Ebene eines Bereichs

In diesem Beispiel wird die gesamte Tabelle mytable in Qlik Cloud Analytics als Datei mit dem Namen myfile.qvd exportiert. Die Datei wird dem freigegebenen Bereich TeamSharedSpace hinzugefügt. Die Datei befindet sich nicht innerhalb eines bestimmten Ordners, sondern im Pfad der obersten Ebene im Bereich.

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

Beispiel: Speichern einer Datei in einem bestimmten Ordner innerhalb eines Bereichs

In diesem Beispiel wird die gesamte Tabelle mytable in Qlik Cloud Analytics als Datei mit dem Namen myfile.qvd exportiert. Die Datei wird dem Ordner SalesData innerhalb des Bereichs TeamSharedSpace hinzugefügt.

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

Weitere Informationen zum Referenzieren der Bereichsordnerstruktur in Ladeskripten finden Sie unter Referenzieren der Ordnerstruktur im Bereich bei der Entwicklung von Apps und Skripten.

Hat diese Seite Ihnen geholfen?

Wenn Sie Probleme mit dieser Seite oder ihren Inhalten feststellen – einen Tippfehler, einen fehlenden Schritt oder einen technischen Fehler –, teilen Sie uns bitte mit, wie wir uns verbessern können!