Description
Dans le format TabSeparated, les données sont écrites ligne par ligne. Chaque ligne contient des valeurs séparées par des tabulations. Chaque valeur est suivie d’une tabulation, sauf la dernière valeur de la ligne, qui est suivie d’un saut de ligne. Le format suppose partout des sauts de ligne Unix stricts. La dernière ligne doit également se terminer par un saut de ligne. Les valeurs sont écrites au format texte, sans guillemets, avec échappement des caractères spéciaux. Ce format est également disponible sous le nomTSV.
Le format TabSeparated est pratique pour traiter des données à l’aide de programmes et de scripts personnalisés. Il est utilisé par défaut dans l’interface HTTP, ainsi qu’en batch mode dans le client en ligne de commande. Ce format permet également de transférer des données entre différents SGBD. Par exemple, vous pouvez récupérer un dump MySQL et l’importer dans ClickHouse, ou inversement.
Le format TabSeparated prend en charge la sortie des totaux (lors de l’utilisation de WITH TOTALS) et des valeurs extrêmes (lorsque ‘extremes’ est défini sur 1). Dans ces cas, les totaux et les extrêmes sont affichés après les données principales. Le résultat principal, les totaux et les extrêmes sont séparés les uns des autres par une ligne vide. Exemple :
Formatage des données
Les nombres entiers sont écrits sous forme décimale. Ils peuvent contenir un caractère+ supplémentaire au début (ignoré lors de l’analyse et non conservé lors du formatage), et les zéros de tête sont ignorés lors de l’analyse (007 est lu comme 7). Les nombres non négatifs ne peuvent pas contenir de signe moins. À la lecture, une chaîne vide peut être analysée comme zéro, ou (pour les types signés) une chaîne constituée uniquement d’un signe moins peut également être analysée comme zéro. Les nombres qui ne tiennent pas dans le type de données correspondant peuvent être analysés comme une autre valeur, sans message d’erreur.
Les nombres à virgule flottante sont écrits sous forme décimale. Le point est utilisé comme séparateur décimal. La notation exponentielle est prise en charge, ainsi que inf, +inf, -inf et nan. Une valeur à virgule flottante peut commencer ou se terminer par un point décimal.
Lors du formatage, une perte de précision peut se produire pour les nombres à virgule flottante.
Lors de l’analyse, il n’est pas strictement nécessaire de lire la valeur représentable par la machine la plus proche.
Les dates sont écrites au format YYYY-MM-DD et analysées dans ce même format, mais avec n’importe quels caractères comme séparateurs.
Les dates avec heure sont écrites au format YYYY-MM-DD hh:mm:ss et analysées dans ce même format, mais avec n’importe quels caractères comme séparateurs.
Tout cela se fait dans le fuseau horaire du système au moment du démarrage du client ou du serveur (selon celui qui formate les données). Pour les dates avec heure, l’heure d’été n’est pas spécifiée. Ainsi, si un dump contient des heures pendant l’heure d’été, le dump ne correspond pas aux données de manière univoque, et l’analyse choisira l’une des deux heures possibles.
Lors d’une opération de lecture, des dates incorrectes et des dates avec heure peuvent être analysées avec un dépassement naturel ou comme des dates et heures nulles, sans message d’erreur.
Exceptionnellement, l’analyse des dates avec heure est également prise en charge au format Unix timestamp, s’il se compose d’exactement 10 chiffres décimaux. Le résultat ne dépend pas du fuseau horaire. Les formats YYYY-MM-DD hh:mm:ss et NNNNNNNNNN sont différenciés automatiquement.
Les chaînes sont produites avec des caractères spéciaux précédés d’une barre oblique inverse. Les séquences d’échappement suivantes sont utilisées en sortie : \b, \f, \r, \n, \t, \0, \', \\. L’analyse prend également en charge les séquences \a, \v et \xHH (séquences d’échappement hexadécimales), ainsi que toute séquence \c, où c est n’importe quel caractère (ces séquences sont converties en c). Ainsi, la lecture des données prend en charge les formats dans lesquels un saut de ligne peut être écrit comme \n, comme \, ou comme un saut de ligne réel. Par exemple, la chaîne Hello world avec un saut de ligne entre les mots au lieu d’un espace peut être analysée sous l’une des formes suivantes :
[]. Les éléments numériques du tableau sont formatés normalement. Les types Date et DateTime sont écrits entre guillemets simples. Les chaînes sont écrites entre guillemets simples, avec les mêmes règles d’échappement que ci-dessus.
NULL est formaté conformément au paramètre format_tsv_null_representation (la valeur par défaut est \N).
Dans les données d’entrée, les valeurs ENUM peuvent être représentées par des noms ou des identifiants. Nous essayons d’abord de faire correspondre la valeur d’entrée au nom ENUM. En cas d’échec, si la valeur d’entrée est un nombre, nous essayons de faire correspondre ce nombre à l’identifiant ENUM.
Si les données d’entrée ne contiennent que des identifiants ENUM, il est recommandé d’activer le paramètre input_format_tsv_enum_as_number afin d’optimiser l’analyse des ENUM.
Chaque élément des structures Nested est représenté sous forme de tableau.
Par exemple :
Exemple d’utilisation
Insertion de données
À l’aide du fichier TSV suivant, nomméfootball.tsv :
Lecture des données
Lisez les données au formatTabSeparated :