Store
L'istruzione Store crea un file QVD, Parquet, CSV, o TXT.
Sintassi:
Store [ fieldlist from] table into filename [ format-spec ];
L'istruzione creerà un file con nome esplicito QVD, Parquet o un file di testo.
L'istruzione può esportare campi solo da una tabella dati, a meno che non si effettui l'archiviazione in Parquet. Se occorre esportare i campi da più tabelle in un file QVD, CSV o TXT, prima è necessario eseguire un'operazione join esplicita nello script per la creare la tabella dati da esportare. È possibile archiviare più tabelle in un unico Parquet annidando i dati nei file Parquet.
I valori di testo sono esportati nel file CSV in UTF-8 formato BOM. È possibile specificare un delimitatore, vedere LOAD. L'istruzione store associata a un file CSV non supporta l'esportazione BIFF.
Argomenti:
Argomento | Descrizione |
---|---|
fieldlist::= ( * | field) { , field } ) |
Un elenco dei campi da selezionare. L'utilizzo del carattere * per l'elenco dei campi indica tutti i campi. field::= fieldname [as aliasname ] fieldname è un testo che è identico al nome di campo in table. (Tenere presente che il nome di campo deve essere racchiuso da virgolette doppie diritte o parentesi quadre se, ad esempio, contiene spazi o altri caratteri non standard). aliasname è un nome alternativo per il campo da utilizzare nel file QVD o CSV risultante. |
table | Un'etichetta dello script che rappresenta una tabella già caricata da utilizzare come sorgente dei dati. |
filename |
Il nome del file di destinazione che include un percorso valido a una connessione dati della cartella esistente. Esempio: 'lib://Table Files/target.qvd' Nella modalità di creazione degli script legacy sono supportati anche i seguenti formati di percorso:
|
format-spec ::=( ( txt | qvd | parquet), la compressione è codec) |
È possibile imostare la specifica del formato per entrambi i formati file. Se si omette la specifica del formato, viene utilizzato qvd.
Se si utilizza parquet, è possibile anche impostare quale codec di compressione utilizzare con compression is. Se non si specifica il codec di compressione con compression is, viene utilizzato snappy. Sono disponibili le seguenti impostazioni di compressione:
Esempio: Store mytable into [lib://AttachedFiles/myfile.parquet] (parquet, compression is lz4); |
Esempi:
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';
Archiviazione nei file parquet
Parquet è un formato file fortemente tipizzato, in cui ogni campo contenente un singolo tipo di dati specifico (come ad esempio INT32, doppio, timestamp, o testo). Qlik Sense archivia i dati interni come doppi poco tipizzati, in cui i dati da sorgenti differenti possono essere mescolati negli stessi campi. Poiché nei file Parquet è possibile archiviare solo una parte dei doppi in ogni campo, è importante sapere cosa contiene ciascuno di essi. Per impostazione predefinita, Qlik Sense utilizza i campi per determinare come devono essere archiviati. Quando si archiviano dati nei file Parquet in un formato specifico, è necessario specificare qual è il tipo di dati dei campi al caricamento. Se si tenta di archiviare i dati in campi non compatibili in un file Parquet, come ad esempio dei numeri in un campo di testo o del testo in un campo timestamp, verranno generati valori null.
Quando si caricano dati che si desidera archiviare in Parquet, è possibile modificare il comportamento predefinito. È possibile formattarlo per modificare il tipo di dati o aggiungere tag per applicare forzatamente i tipi di colonna in Parquet.
Formattazione dei dati per l'archiviazione in Parquet
È possibile utilizzare le funzioni di formattazione di Qlik Sense per classificare i dati. Ad esempio, Text(), Num(), Interval() o Timestamp() possono applicare forzatamente i formati dati per l'archiviazione in Parquet. Qlik Sense può archiviare i dati in quasi 20 tipi di dati differenti, a seconda degli attributi del campo e dei tag di campo automatici. Per ulteriori informazioni, vedere Funzioni di interpretazione.
Esempio: Formattazione dei dati con Num() e Text()
Nel seguente esempio viene descritta la preparazione dati per l'archiviazione in Parquet. Il valore Num() è applicato ai campi numerici, mentre Text() è applicato ai campo di testo e misti. Nel caso dei campi misti, Text() impedisce che vengano trattati come campi numerici in Parquet e che i valori di testo vengano modificati in null.
NoConcatenate LOAD num, text, Text(mixed) as mixed RESIDENT Data; STORE Format INTO [lib://AttachedFiles/Tmp.parquet] (parquet);
Tagging dei dati per l'archiviazione in Parquet
È possibile applicare tag ai dati con i tag $parquet per forzare l'applicazione di tipi di colonne specifici durante l'archiviazione dei dati in Parquet. È possibile forzare ogni tipo di dati aggiungendo i corrispondenti tag di controllo. Per esempio, per archiviare un campo come INT32 in Parquet, aggiungere un tag utilizzando $parquet-int32 nello script di caricamento. A seconda del tipo di dati, verranno archiviate la stringa o la rappresentazione numerica dei dati doppi.
I seguenti tag di controllo Parquet possono essere utilizzati per taggare i campi per l'archiviazione nei file Parquet.
Tag di controllo | Duale | Tipo fisico | Tipo logico | Tipo convertito |
---|---|---|---|---|
$parquet-boolean | Numero | BOOLEAN | NONE | NONE |
$parquet-int32 | Numero | INT32 | NONE | NONE |
$parquet-int64 | Numero | INT64 | NONE | NONE |
$parquet-float | Numero | FLOAT | NONE | NONE |
$parquet-double | Numero | DOUBLE | NONE | NONE |
$parquet-bytearray | Stringa | BYTE_ARRAY | NONE | UTF8 |
$parquet-bytearrayfix | Numero | FIXED_LEN_BYTE_ARRAY | NONE | DECIMAL |
$parquet-decimal | Numero | INT64 | DECIMAL | DECIMAL |
$parquet-date | Numero | INT32 | DATE | DATE |
$parquet-time | Numero | INT64 | TIME | TIME_MICROS |
$parquet-timestamp | Numero | INT64 | TIMESTAMP | TIMESTAMP_MICROS |
$parquet-string | Stringa | BYTE_ARRAY | STRING | UTF8 |
$parquet-enum | Stringa | BYTE_ARRAY | ENUM | ENUM |
$parquet-interval | Numero | FIXED_LEN_BYTE_ARRAY | INTERVAL | INTERVAL |
$parquet-json | Stringa | BYTE_ARRAY | JSON | JSON |
$parquet-bson | Stringa | BYTE_ARRAY | BSON | BSON |
$parquet-uuid | Stringa | FIXED_LEN_BYTE_ARRAY | UUID | NONE |
Esempio: Tagging dei dati per l'archiviazione in Parquet
In questo esempio, vengono utilizzati due tag per definiree i dati per Parquet. Il campo num è taggato come $parquet-int32 per definirlo come campo numerico che verrà impostato come INT32 in Parquet.
Archiviazione dei dati annidati in file Parquet
È possibile archiviare più tabelle in un file Parquet annidandole in dati strutturati. Store supporta nodi strutturati e nodi elenco in uno schema stella. È possibile anche archiviare singole tabelle in modalità annidata utilizzando l'identificatore Il delimitatore è.
Quando si archiviano le tabelle, specificare quelle che si desidera includere separate da virgole. Ad esempio: STORE Table1, Table2, Table3 INTO [lib://<file location>/<file name>.parquet] (parquet);. È possibile controllare i campi da archiviare utilizzando un elenco campo nell'istruzione Store. Ad esempio STORE Field1, Field2, FROM Table1, Table2 INTO [lib://<file location>/<file name>.parquet] (parquet);. Tutti i campi nell'elenco campo devono essere inclusi in una o più delle tabelle elencate. La prima tabella nell'istruzione Store verrà utilizzata come tabella dei fatti nello schema stella.
I nomi del campo sono utilizzati per controllare come i gruppi verranno creati e annidati. Per impostazione predefinita, i nomi del campo sono divisi in nodi con un periodo (.). Il delimitatore può essere modificato impostando la variabile di sistema FieldNameDelimiter o utilizzando l'identificatore Il delimitatore è. L'identificatore sovrascriverà la variabile di sistema. Per ulteriori informazioni, vedere Utilizzo delle variabili nell'editor caricamento dati.
I nomi dei campi sono divisi dal delimitatore e le parti sono utilizzate per creare lo schema con gruppi annidati. Per esempio, STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); creerà due gruppi (Gruppo1 e Gruppo2) con Campi1, Campi2 e Campi3, Campi4.
Quando si archiviano dati annidati in Parquet, le chiavi tra le tabelle sono trasformate in nodi di collegamento nello schema. Le tabelle vengono trasformate in nodi strutturati nello schema. È possibile sovrascrivere la trasformazione predefinita utilizzando i nomi di campo.
Esempio: Archiviazione dei dati annidati in un file Parquet
Il file Parquet risultante ha il seguente schema:
Limitazioni
L'archiviazione dei dati annidati in Parquet presenta le seguenti limitazioni:
L'archiviazione non supporta i nodi mappa.
L'archiviazione non include i campi chiave generati dal caricamento dei file parquet annidati.
Non è possibile archiviare i dati da più tabelle insieme che non siano collegate con campi chiave.
Il file annidato denormalizza il modello dati. I valori senza riferimento non verranno salvati e i valori con riferimenti multipli verranno copiati.