Vai al contenuto principale Passa a contenuto complementare

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 nel formato UTF-8. È possibile specificare un delimitatore, vedere LOAD. L'istruzione store associata a un file CSV non supporta l'esportazione BIFF.

Nota informaticaIn alcuni casi in cui i dati non sono formattati correttamente, i campi vengono racchiusi da virgolette doppie, per assicurare che i dati siano interpretati correttamente. Questo può succedere, per esempio, quando il campo contiene caratteri come virgolette, virgole, spazi o interruzioni di riga.

Argomenti:  

Argomenti del comando Store
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:

  • assoluto

    Esempio: c:\data\sales.qvd

  • relativo alla directory di lavoro dell'app Qlik Sense.

    Esempio: data\sales.qvd

    Se il percorso viene omesso, Qlik Sense memorizza il file nella directory specificata dall'istruzione Directory. Se non è presente alcuna istruzione Directory, Qlik Sense memorizza il file nella directory di lavoro, C:\Users\{user}\Documents\Qlik\Sense\Apps.

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.

  • txt per i file CSV e TXT.

  • qvd per i file QVD.

  • parquet per i file Parquet.

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:

  • uncompressed

  • snappy

  • gzip

  • lz4

  • brotli

  • zstd

  • lz4_hadoop

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 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.

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://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 Parquet
Tag di controlloDualeTipo fisicoTipo logicoTipo convertito
$parquet-booleanNumeroBOOLEANNONENONE
$parquet-int32NumeroINT32NONENONE
$parquet-int64NumeroINT64NONENONE
$parquet-floatNumeroFLOATNONENONE
$parquet-doubleNumeroDOUBLENONENONE
$parquet-bytearrayStringaBYTE_ARRAYNONEUTF8
$parquet-bytearrayfixNumeroFIXED_LEN_BYTE_ARRAYNONEDECIMAL
$parquet-decimalNumeroINT64DECIMALDECIMAL
$parquet-dateNumeroINT32DATEDATE
$parquet-timeNumeroINT64TIMETIME_MICROS
$parquet-timestampNumeroINT64TIMESTAMPTIMESTAMP_MICROS
$parquet-stringStringaBYTE_ARRAYSTRINGUTF8
$parquet-enumStringaBYTE_ARRAYENUMENUM
$parquet-intervalNumeroFIXED_LEN_BYTE_ARRAYINTERVALINTERVAL
$parquet-jsonStringaBYTE_ARRAYJSONJSON
$parquet-bsonStringaBYTE_ARRAYBSONBSON
$parquet-uuidStringaFIXED_LEN_BYTE_ARRAYUUIDNONE

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.

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

Nota informaticaI gruppi e i campi potrebbero non avere lo stesso nome in un nodo nello schema. Per esempio, l'istruzione STORE Address, Address.Street INTO [nested.parquet] (parquet, delimiter is '.''); non riuscirà poiché il campo Indirizzo è ambiguo ed è sia un campo dati sia un gruppo.

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

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://AttachedFiles/company.parquet] (parquet) DROP TABLES company, salesrep, headquarter, region;

Il file Parquet risultante ha il seguente 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)

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.

Hai trovato utile questa pagina?

Se riscontri problemi con questa pagina o con il suo contenuto – un errore di battitura, un passaggio mancante o un errore tecnico – facci sapere come possiamo migliorare!