Accéder au contenu principal Passer au contenu complémentaire

Store

L'instruction Store crée un fichier QVD, Parquet, CSV ou TXT.

 

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

L'instruction crée un fichier texte, QVD ou Parquet nommé de manière explicite.

L'instruction permet uniquement d'exporter des champs provenant d'une table de données, sauf si vous effectuez le stockage dans Parquet. Si vous devez exporter des champs issus de plusieurs tables dans un fichier QVD, CSV ou TXT, définissez au préalable une jointure (join) explicite dans le script afin de créer la table de données à exporter. Vous pouvez stocker plusieurs tables dans un seul fichier Parquet en imbriquant les données dans les fichiers Parquet.

Les valeurs de texte sont exportées vers le fichier CSV au format UTF-8. Vous pouvez spécifier un délimiteur (voir LOAD). L'instruction store envoyée à un fichier CSV ne prend pas en charge l'export BIFF.

Note InformationsDans certains cas avec des données mal formées, les champs seront encadrés de guillemets doubles pour garantir l'interprétation correcte des données. Cela peut se produire, par exemple, lorsque le champ contient des caractères tels que des guillemets, une virgule, un espace ou des retours à la ligne.

 

Arguments de la commande Store
Argument Description
fieldlist::= ( * | field) { , field } )

Liste des champs à sélectionner. L'utilisation du symbole * comme liste de champs signifie inclure tous les champs. 

field::= fieldname [as aliasname ]

fieldname est un texte identique à un nom de champ dans la table. (Notez que le nom du champ doit être mis entre guillemets doubles droits ou entre crochets s'il contient des espaces ou d'autres caractères non standard.)

aliasname est un nom alternatif à utiliser pour le champ dans le fichier QVD ou CSV résultant.

table Étiquette de script représentant une table déjà chargée, à utiliser comme source pour les données.
filename

Nom du fichier cible incluant un chemin d'accès valide à une connexion de données de type dossier existante.

'lib://Table Files/target.qvd'

En langage de script, les formats de chemin d'accès suivants sont également pris en charge en mode hérité :

  • absolu

    c:\data\sales.qvd

  • chemin d'accès relatif au répertoire de travail de l'application Qlik Sense

    data\sales.qvd

    Si le chemin d'accès est omis, Qlik Sense stocke le fichier dans le répertoire que lui indique l'instruction Directory. En l'absence d'instruction Directory, Qlik Sense conserve le fichier dans le répertoire de travail, C:\Users\{user}\Documents\Qlik\Sense\Apps.

format-spec ::=( ( txt | qvd | parquet), compression is codec)

Vous pouvez définir la spécification de format sur l'un de ces formats de fichier. Si le format n'est pas spécifié, qvd est utilisé.

  • txt pour les fichiers CSV et TXT.

  • qvd pour les fichiers QVD.

  • parquet pour les fichiers Parquet.

Si vous utilisez parquet, vous pouvez également définir le codec de compression à utiliser avec compression is. Si vous ne spécifiez pas le codec de compression à utiliser avec compression is, snappy est utilisé. Les paramètres de compression suivants sont disponibles :

  • uncompressed

  • snappy

  • gzip

  • lz4

  • brotli

  • zstd

  • lz4_hadoop

Exemple :

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

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

Stockage dans des fichiers Parquet

Parquet est un format de fichier de type très particulier dans lequel chaque champ contient un seul type de données spécifique (tel que in32, double, horodatage ou texte). Qlik Sense stocke les données internes sous forme de type double lâche, dans lequel les données provenant de différentes sources peuvent être combinées dans les mêmes champs. Étant donné qu'une seule partie des données de type double peut être stockée dans chaque champ dans Parquet, il est important de connaître le contenu de chaque champ. Par défaut, Qlik Sense utilise le type de champ pour déterminer le mode de stockage du champ. Lors du stockage de données dans des fichiers Parquet dans un format spécifique, vous devez spécifier le type de données de vos champs lors de leur chargement. Si vous tentez de stocker des données dans des champs incompatibles dans un fichier Parquet, comme des nombres dans un champ de texte ou du texte dans un champ d'horodatage, vous aboutirez à des valeurs nulles.

Lors du chargement de données à stocker dans Parquet, il est possible de modifier le comportement par défaut. Vous pouvez le formater de sorte à modifier votre type de données ou le baliser de sorte à appliquer de force des types de colonne spécifiques dans Parquet.

Formatage de données à des fins de stockage dans Parquet

Vous pouvez utiliser les fonctions de formatage Qlik Sense pour classifier vos données. Par exemple, la fonction Text(), Num(), Interval() ou Timestamp() peut appliquer des formats de données lors du stockage de données dans Parquet. Qlik Sense peut stocker des données dans presque 20 types de données différents, suivant les attributs de champ et les balises de champ automatiques. Pour plus d'informations, voir Fonctions d'interprétation.

Formatage de données avec Num() et Text()

L'exemple suivant montre comment préparer des données pour leur stockage dans Parquet. La fonction Num() est appliquée au champ numérique. La fonction Text() est appliquée aux champs de texte et mixtes. Dans le cas de champs mixtes, la fonction Text() empêche le traitement du champ comme un champ numérique dans Parquet et le remplacement des valeurs textuelles par des valeurs nulles.

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

Balisage de données à des fins de stockage dans Parquet

Balisez les données à l'aide de balises $parquet pour appliquer de force des types de colonne spécifiques lors du stockage de données dans Parquet. Chaque type de données peut être appliquée de force via l'ajout de la balise de contrôle correspondante. Par exemple, pour stocker un champ au format INT32 dans Parquet, appliquez-lui la balise $parquet-int32 dans le script de chargement. Suivant le type de données, la représentation numérique ou sous forme de chaîne des données doubles sera stockée.

Vous pouvez utiliser les balises de contrôle Parquet suivantes pour baliser des champs afin de les stocker dans des fichiers Parquet.

Balises de contrôle Parquet
Balise de contrôleDoubleType physiqueType logiqueType converti
$parquet-booleanNombreBOOLEANNONENONE
$parquet-int32NombreINT32NONENONE
$parquet-int64NombreINT64NONENONE
$parquet-floatNombreFLOATNONENONE
$parquet-doubleNombreDOUBLENONENONE
$parquet-bytearrayChaîneBYTE_ARRAYNONEUTF8
$parquet-bytearrayfixNombreFIXED_LEN_BYTE_ARRAYNONEDECIMAL
$parquet-decimalNombreINT64DECIMALDECIMAL
$parquet-dateNombreINT32DATEDATE
$parquet-timeNombreINT64TIMETIME_MICROS
$parquet-timestampNombreINT64TIMESTAMPTIMESTAMP_MICROS
$parquet-stringChaîneBYTE_ARRAYSTRINGUTF8
$parquet-enumChaîneBYTE_ARRAYENUMENUM
$parquet-intervalNombreFIXED_LEN_BYTE_ARRAYINTERVALINTERVAL
$parquet-jsonChaîneBYTE_ARRAYJSONJSON
$parquet-bsonChaîneBYTE_ARRAYBSONBSON
$parquet-uuidChaîneFIXED_LEN_BYTE_ARRAYUUIDNONE

Balisage de données à des fins de stockage dans Parquet

Dans cet exemple, deux balises sont utilisées pour définir les données pour Parquet. Le champ num reçoit la balise $parquet-int32 pour être défini comme un champ numérique au format INT32 dans 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);

Stockage de données imbriquées dans des fichiers Parquet

Vous pouvez stocker plusieurs tables dans des fichiers Parquet en les imbriquant dans des données structurées. Store prend en charge les nœuds structurés et les nœuds de liste dans un schéma en étoile. Les tables individuelles peuvent également être stockées en mode imbriqué via le spécificateur Delimiter is.

Lors du stockage de tables, spécifiez les tables à inclure, séparées par des virgules. Par exemple : STORE Table1, Table2, Table3 INTO [lib://<file location>/<file name>.parquet] (parquet);. Vous pouvez contrôler les champs stockés via une liste de champs dans l'instruction Store. Par exemple STORE Field1, Field2, FROM Table1, Table2 INTO [lib://<file location>/<file name>.parquet] (parquet);. Tous les champs de la liste doivent se trouver dans une ou plusieurs des tables répertoriées. La première table de l'instruction Store sera utilisée comme table de faits dans le schéma en étoile.

Les noms de champ sont utilisés pour contrôler la manière dont les groupes seront créés et imbriqués. Par défaut, les noms de champ sont séparés en nœuds à l'aide d'un point (.). Il est possible de modifier le délimiteur en définissant la variable système FieldNameDelimiter ou en utilisant le spécificateur Delimiter is. Le spécificateur remplacera la variable système. Pour plus d'informations, voir Utilisation des variables dans l'éditeur de chargement de données.

Les noms de champ sont séparés par le délimiteur et les parties sont utilisées pour créer le schéma avec les groupes imbriqués. Par exemple, STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); créera deux groupes (Group1 et Group2) avec Fields1, Field2 et Field3, Field4.

Note InformationsLes groupes et les champs peuvent ne pas porter le même nom dans un nœud du schéma. Par exemple, STORE Address, Address.Street INTO [nested.parquet] (parquet, delimiter is '.''); échouera, car Address est ambigu et est à la fois un champ de données et un groupe.

Lors du stockage de données imbriquées dans Parquet, les clés entre les tables sont transformées en nœuds de lien dans le schéma. Les tables sont transformées en nœuds structurés dans le schéma. Vous pouvez remplacer la transformation par défaut via des noms de champ.

Stockage de données imbriquées dans un fichier 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;

Le schéma du fichier Parquet obtenu est le suivant :

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)

Limitations

Le stockage de données imbriquées dans Parquet présente les limitations suivantes :

  • Le stockage ne prend pas en charge les nœuds de carte.

  • Le stockage n'inclut pas de champs clés générés via le chargement de fichiers Parquet imbriqués.

  • Vous ne pouvez pas stocker ensemble des données provenant de tables qui ne sont pas liées à des champs clés.

  • Le fichier imbriqué dénormalise le modèle de données. Les valeurs non référencées ne seront pas enregistrées et les valeurs référencées plusieurs fois seront copiées.

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – dites-nous comment nous améliorer !