Chargement de JSON structuré
NDJSON (JSON délimité par des sauts de ligne), connu sous le nom de JSONEachRow dans ClickHouse, et bien structurées, c’est-à-dire que les noms de colonnes et les types sont fixes. NDJSON est le format privilégié pour le chargement de données JSON en raison de sa concision et de son utilisation efficace de l’espace, mais d’autres formats sont pris en charge, aussi bien en entrée qu’en sortie.
Prenons l’exemple JSON suivant, représentant une ligne du jeu de données Python PyPI :
Privilégiez les schémas statiques lorsque c’est possibleLorsque vos colonnes ont des noms et des types fixes, et que vous n’attendez pas de nouvelles colonnes, privilégiez toujours un schéma statique en production.Le type JSON est à privilégier pour les données très dynamiques, dont les noms et les types de colonnes sont susceptibles d’évoluer. Ce type est également utile pour le prototypage et l’exploration des données.
Clés de triNous avons sélectionné ici une clé de tri à l’aide de la clause
ORDER BY. Pour en savoir plus sur les clés de tri et sur la façon de les choisir, consultez cette section.*.json.gz dans le bucket. ClickHouse déduit automatiquement que le format est JSONEachRow (ndjson) à partir de l’extension et du contenu du fichier. Un format peut être spécifié manuellement via des fonctions paramétrées si ClickHouse n’est pas en mesure de le détecter.
Fichiers compressésLes fichiers ci-dessus sont également compressés. ClickHouse le détecte et le gère automatiquement.
INSERT INTO SELECT :
FORMAT, par exemple.
JSONEachRow. D’autres formats JSON courants sont également pris en charge, et des exemples de leur utilisation sont disponibles ici.
Chargement de JSON semi-structuré
JSON dédié.
Prenons l’exemple suivant, tiré d’une version enrichie du Python PyPI dataset ci-dessus. Nous y avons ajouté une colonne tags arbitraire contenant des paires clé-valeur aléatoires.
tags est ici imprévisible, et il nous est donc impossible de la modéliser. Pour charger ces données, nous pouvons utiliser notre schéma précédent, mais en ajoutant une colonne tags supplémentaire de type JSON :
Quand utiliser le type JSON
- Comportent des clés imprévisibles qui peuvent évoluer au fil du temps.
- Contiennent des valeurs de types variables (par ex., un path peut parfois contenir une chaîne de caractères, parfois un nombre).
- Nécessitent une flexibilité du schéma lorsqu’un typage strict n’est pas adapté.
- Une structure plate avec des clés connues : utilisez des types de colonnes standard, par ex. String.
- Une imbrication prévisible : utilisez les types Tuple, Array ou Nested pour ces structures.
- Une structure prévisible avec des types variables : envisagez plutôt les types Dynamic ou Variant.