Passer au contenu principal
Dans ce tutoriel, vous allez insérer 28 millions de lignes de données Hacker News dans une table de ClickHouse aux formats CSV et Parquet, puis exécuter quelques requêtes simples pour explorer les données.

CSV

1

Télécharger le fichier CSV

Une version CSV du jeu de données peut être téléchargée depuis notre bucket S3 public ou en exécutant cette commande :
Avec ses 4,6 Go et ses 28 M de lignes, le téléchargement de ce fichier compressé devrait prendre de 5 à 10 minutes.
2

Échantillonner les données

clickhouse-local vous permet de traiter rapidement des fichiers locaux sans avoir à déployer et à configurer le serveur ClickHouse.Avant de stocker des données dans ClickHouse, échantillonnons le fichier à l’aide de clickhouse-local. Dans la console, exécutez :
Ensuite, exécutez la commande suivante pour explorer les données :
Query
Response
Cette commande recèle de nombreuses subtilités. L’opérateur file vous permet de lire un fichier depuis un disque local en spécifiant uniquement le format CSVWithNames. Plus important encore, le schéma est automatiquement déduit du contenu du fichier. Notez également que clickhouse-local est capable de lire le fichier compressé en déduisant le format gzip à partir de l’extension. Le format Vertical est utilisé pour visualiser plus facilement les données de chaque colonne.
3

Charger les données avec l’inférence de schéma

L’outil le plus simple et le plus puissant pour charger des données est clickhouse-client : un client natif en ligne de commande doté de nombreuses fonctionnalités. Pour charger les données, vous pouvez de nouveau recourir à l’inférence de schéma et laisser ClickHouse déterminer les types des colonnes.Exécutez la commande suivante pour créer une table et insérer directement les données depuis le fichier CSV distant, en accédant à son contenu via la fonction url. Le schéma est automatiquement inféré :
Cela crée une table vide à l’aide du schéma inféré à partir des données. La commande DESCRIBE TABLE permet de voir les types ainsi attribués.
Query
Response
Pour insérer les données dans cette table, utilisez la commande INSERT INTO, SELECT. Avec la fonction url, les données seront lues directement depuis l’URL :
Vous avez inséré 28 millions de lignes dans ClickHouse avec une seule commande !
4

Explorer les données

Obtenez un échantillon des articles Hacker News et de certaines colonnes en exécutant la requête suivante :
Query
Response
Bien que l’inférence de schéma soit un excellent outil pour l’exploration initiale des données, elle relève d’une approche « best effort » et ne remplace pas, à long terme, la définition d’un schéma optimal pour vos données.
5

Définir un schéma

Une optimisation simple et immédiate consiste à définir un type pour chaque champ. En plus de déclarer le champ temporel au format DateTime, nous définissons un type approprié pour chacun des champs ci-dessous après avoir supprimé notre jeu de données existant. Dans ClickHouse, la clé primaire des données est définie par la clause ORDER BY.Choisir des types appropriés et les colonnes à inclure dans la clause ORDER BY contribue à améliorer la vitesse des requêtes et la compression.Exécutez la requête ci-dessous pour supprimer l’ancien schéma et créer le schéma amélioré :
Query
Avec un schéma optimisé, vous pouvez maintenant insérer les données depuis le système de fichiers local. Toujours avec clickhouse-client, insérez les données du fichier à l’aide de la clause INFILE avec un INSERT INTO explicite.
Query
6

Exécuter des exemples de requêtes

Quelques exemples de requêtes sont présentés ci-dessous pour vous aider à rédiger vos propres requêtes.

Quelle est la place de « ClickHouse » comme sujet sur Hacker News ?

Le champ score fournit une métrique de popularité pour les articles, tandis que le champ id et l’opérateur de concaténation || peuvent être utilisés pour générer un lien vers le post original.
Query
Response
ClickHouse génère-t-il davantage de bruit au fil du temps ? C’est ici qu’apparaît l’intérêt de définir le champ time en tant que DateTime : l’utilisation d’un type de données approprié permet de recourir à la fonction toYYYYMM() :
Query
Response
Il semblerait que “ClickHouse” gagne en popularité au fil du temps.

Qui sont les commentateurs les plus actifs sur les articles liés à ClickHouse ?

Query
Response

Quels commentaires suscitent le plus d’intérêt ?

Query
Response

Parquet

L’un des points forts de ClickHouse est sa capacité à prendre en charge un grand nombre de formats. Le format CSV constitue un cas d’usage assez idéal, mais ce n’est pas le plus efficace pour l’échange de données. Ensuite, vous chargerez les données à partir d’un fichier Parquet, un format colonnaire efficace. Parquet ne prend en charge qu’un nombre limité de types, que ClickHouse doit respecter, et ces informations de type sont encodées dans le format lui-même. L’inférence de type sur un fichier Parquet conduira invariablement à un schéma légèrement différent de celui du fichier CSV.
1

Insérer les données

Exécutez la requête suivante pour lire ces mêmes données au format Parquet, en utilisant à nouveau la fonction url pour accéder aux données distantes :
Clés NULL avec ParquetEn raison du format Parquet, nous devons accepter que les clés puissent être NULL, même si ce n’est pas le cas dans les données.
Exécutez la commande suivante pour afficher le schéma inféré :
Response
Comme précédemment avec le fichier CSV, vous pouvez spécifier manuellement le schéma afin de mieux contrôler les types choisis et insérer les données directement depuis S3 :
2

Ajouter un index de saut pour accélérer les requêtes

Pour savoir combien de commentaires mentionnent “ClickHouse”, exécutez la requête suivante :
Query
Response
Ensuite, vous allez créer un index inversé sur la colonne “comment” afin d’accélérer cette requête. Notez que les commentaires seront indexés en minuscules afin de retrouver des termes indépendamment de la casse.Exécutez les commandes suivantes pour créer l’index :
La matérialisation de l’index prend un certain temps (pour vérifier si l’index a bien été créé, utilisez la table système system.data_skipping_indices).Exécutez de nouveau la requête une fois l’index créé :
Query
Observez que la requête n’a désormais pris que 0,248 seconde avec l’index, contre 0,843 seconde auparavant sans celui-ci :
Response
La clause EXPLAIN peut être utilisée pour comprendre pourquoi l’ajout de cet index a rendu la requête environ 3,4 fois plus rapide.
Response
Remarquez comment l’index a permis d’ignorer un grand nombre de granules pour accélérer la requête.Il est désormais également possible de rechercher efficacement un ou plusieurs termes :
Query
Response
Query
Response
Dernière modification le 25 juin 2026