Skip to main content
Les exemples précédents de chargement de données JSON supposent l’utilisation de JSONEachRow (NDJSON). Ce format interprète les clés de chaque ligne JSON comme des colonnes. Par exemple :
Bien qu’il s’agisse généralement du format JSON le plus couramment utilisé, vous rencontrerez d’autres formats ou devrez lire le JSON comme un objet unique. Nous donnons ci-dessous des exemples de lecture et de chargement du JSON dans d’autres formats courants.

Lecture de JSON sous forme d’objet

Nos exemples précédents montrent comment JSONEachRow lit du JSON délimité par des sauts de ligne, chaque ligne étant interprétée comme un objet distinct associé à une ligne de table, et chaque clé à une colonne. C’est idéal lorsque le JSON a une structure prévisible, avec un seul type par colonne. À l’inverse, JSONAsObject traite chaque ligne comme un objet JSON unique et le stocke dans une seule colonne, de type JSON, ce qui le rend plus adapté aux payloads JSON imbriqués et aux cas où les clés sont dynamiques et peuvent potentiellement avoir plusieurs types. Utilisez JSONEachRow pour les insertions ligne par ligne, et JSONAsObject pour stocker des données JSON flexibles ou dynamiques. Comparez l’exemple ci-dessus avec la requête suivante, qui lit les mêmes données sous forme d’objet JSON, à raison d’un objet par ligne :
JSONAsObject est utile pour insérer des lignes dans une table en utilisant une seule colonne de type objet JSON, par ex.
Le format JSONAsObject peut également être utile pour lire du JSON délimité par des retours à la ligne lorsque la structure des objets n’est pas homogène. Par exemple, si le type d’une clé varie d’une ligne à l’autre (il peut parfois s’agir d’une chaîne, mais d’autres fois d’un objet). Dans ce cas, ClickHouse ne peut pas inférer un schéma stable avec JSONEachRow, et JSONAsObject permet d’ingérer les données sans imposer un typage strict, en stockant chaque ligne JSON entière dans une seule colonne. Par exemple, constatez que JSONEachRow échoue dans l’exemple suivant :
À l’inverse, JSONAsObject peut être utilisé dans ce cas, car le type JSON prend en charge plusieurs types pour une même sous-colonne.

Tableau d’objets JSON

L’une des formes les plus courantes de données JSON est une liste d’objets JSON dans un tableau JSON, comme dans cet exemple :
Créons une table pour ce type de données :
Pour importer une liste d’objets JSON, nous pouvons utiliser le format JSONEachRow (en insérant les données à partir du fichier list.json) :
Nous avons utilisé une clause FROM INFILE pour charger les données à partir du fichier local, et nous pouvons constater que l’importation a réussi :

Clés des objets JSON

Dans certains cas, la liste d’objets JSON peut être encodée sous forme de propriétés d’objet plutôt que comme éléments de tableau (voir par exemple objects.json) :
ClickHouse peut charger ce type de données à l’aide du format JSONObjectEachRow :

Spécifier les valeurs de clé de l’objet parent

Supposons que nous voulions également enregistrer dans la table les valeurs associées aux clés de l’objet parent. Dans ce cas, nous pouvons utiliser l’option suivante pour définir le nom de la colonne dans laquelle ces valeurs de clé doivent être enregistrées :
Maintenant, nous pouvons vérifier quelles données seront chargées à partir du fichier JSON d’origine à l’aide de la fonction file() :
Notez que la colonne id a bien été renseignée avec les valeurs de clé.

Tableaux JSON

Parfois, pour gagner de l’espace, les fichiers JSON sont encodés sous forme de tableaux plutôt que d’objets. Dans ce cas, il s’agit d’une liste de tableaux JSON :
Dans ce cas, ClickHouse chargera ces données et attribuera chaque valeur à la colonne correspondante selon son ordre dans le tableau. Nous utilisons le format JSONCompactEachRow pour ce faire :

Importation de colonnes individuelles à partir de tableaux JSON

Dans certains cas, les données peuvent être encodées en colonnes plutôt qu’en lignes. Dans ce cas, un objet JSON parent contient des colonnes avec leurs valeurs. Consultez le fichier suivant :
ClickHouse utilise le format JSONColumns pour analyser des données au format suivant :
Un format plus compact est également pris en charge lorsqu’on manipule un tableau de colonnes plutôt qu’un objet, avec le format JSONCompactColumns :

Stocker des objets JSON au lieu de les analyser

Dans certains cas, vous souhaiterez peut-être stocker des objets JSON dans une seule colonne String (ou JSON) plutôt que de les analyser. Cela peut être utile lorsque vous traitez une liste d’objets JSON aux structures différentes. Prenons ce fichier comme exemple, où plusieurs objets JSON différents sont contenus dans une liste racine :
Nous voulons stocker les objets JSON d’origine dans la table suivante :
Nous pouvons maintenant charger les données du fichier dans cette table à l’aide du format JSONAsString pour conserver les objets JSON au lieu de les analyser :
Nous pouvons également utiliser les fonctions JSON pour interroger les objets enregistrés :
Notez que JSONAsString fonctionne parfaitement avec des fichiers au format JSON, à raison d’un objet par ligne (généralement utilisés avec le format JSONEachRow).

Schéma pour les objets imbriqués

Lorsque nous traitons des objets JSON imbriqués, nous pouvons également définir un schéma explicite et utiliser des types complexes (Array, JSON ou Tuple) pour charger les données :

Accéder aux objets JSON imbriqués

Nous pouvons faire référence aux clés JSON imbriquées en activant l’option de réglage suivante :
Cela nous permet de référencer les clés d’objets JSON imbriqués à l’aide de la notation par points (n’oubliez pas de les entourer d’accents graves pour que cela fonctionne) :
De cette manière, nous pouvons mettre à plat des objets JSON imbriqués ou utiliser certaines valeurs imbriquées afin de les enregistrer dans des colonnes distinctes.

Ignorer les colonnes inconnues

Par défaut, ClickHouse ignore les colonnes inconnues lors de l’importation de données JSON. Essayons d’importer le fichier d’origine dans la table sans la colonne month :
Il est toujours possible d’insérer les données JSON d’origine avec 3 colonnes dans cette table :
ClickHouse ignorera les colonnes inconnues lors de l’importation. Ce comportement peut être désactivé à l’aide de l’option de paramètre input_format_skip_unknown_fields :
ClickHouse lèvera des exceptions si le JSON et la structure des colonnes de la table ne correspondent pas.

BSON

ClickHouse permet d’exporter des données vers des fichiers encodés en BSON et d’importer des données à partir de ceux-ci. Ce format est utilisé par certains SGBD, par exemple la base de données MongoDB. Pour importer des données BSON, nous utilisons le format BSONEachRow. Importons des données à partir de ce fichier BSON :
Nous pouvons également exporter dans des fichiers BSON en utilisant le même format :
Ensuite, nos données seront exportées dans le fichier out.bson.
Dernière modification le 3 juillet 2026