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.
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é :
|
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é.
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 :
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.
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.
Balise de contrôle | Double | Type physique | Type logique | Type converti |
---|---|---|---|---|
$parquet-boolean | Nombre | BOOLEAN | NONE | NONE |
$parquet-int32 | Nombre | INT32 | NONE | NONE |
$parquet-int64 | Nombre | INT64 | NONE | NONE |
$parquet-float | Nombre | FLOAT | NONE | NONE |
$parquet-double | Nombre | DOUBLE | NONE | NONE |
$parquet-bytearray | Chaîne | BYTE_ARRAY | NONE | UTF8 |
$parquet-bytearrayfix | Nombre | FIXED_LEN_BYTE_ARRAY | NONE | DECIMAL |
$parquet-decimal | Nombre | INT64 | DECIMAL | DECIMAL |
$parquet-date | Nombre | INT32 | DATE | DATE |
$parquet-time | Nombre | INT64 | TIME | TIME_MICROS |
$parquet-timestamp | Nombre | INT64 | TIMESTAMP | TIMESTAMP_MICROS |
$parquet-string | Chaîne | BYTE_ARRAY | STRING | UTF8 |
$parquet-enum | Chaîne | BYTE_ARRAY | ENUM | ENUM |
$parquet-interval | Nombre | FIXED_LEN_BYTE_ARRAY | INTERVAL | INTERVAL |
$parquet-json | Chaîne | BYTE_ARRAY | JSON | JSON |
$parquet-bson | Chaîne | BYTE_ARRAY | BSON | BSON |
$parquet-uuid | Chaîne | FIXED_LEN_BYTE_ARRAY | UUID | NONE |
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.
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.
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
Le schéma du fichier Parquet obtenu est le suivant :
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.