Skip to main content
Dans ce tutoriel, vous découvrirez comment utiliser ClickHouse pour exécuter des requêtes analytiques sur de grands volumes de données. Vous verrez également comment utiliser un dictionnaire pour enrichir les données et rédiger des requêtes avec jointures.

Prérequis

Pour ce tutoriel, vous aurez besoin des éléments suivants :
1

Créez la table

Le jeu de données utilisé dans ce tutoriel est celui des taxis de New York. Il contient des informations sur des millions de courses de taxi, avec des colonnes telles que le montant du pourboire, les péages, le type de paiement, etc.
  1. Sélectionnez console SQL dans le menu de gauche
  2. Cliquez sur l’onglet + à côté de l’icône d’accueil pour créer une nouvelle requête
  3. Dans l’éditeur SQL, saisissez la requête suivante, puis cliquez sur Run :
Expandable
2

Insérez les données

Maintenant que vous avez créé une table, ajoutez-y les données des taxis de New York à partir de fichiers CSV stockés dans S3.La commande suivante insère environ 2 000 000 de lignes dans votre table trips à partir de deux fichiers distincts stockés dans S3 : trips_1.tsv.gz et trips_2.tsv.gz :
Expandable
Attendez la fin de l’insertion des données. Environ 150 Mo de données seront téléchargés. Une fois l’insertion des données terminée, vérifiez le nombre de lignes de la table trips :
Vous devriez obtenir 1 999 657 lignes
3

Analysez les données

Une fois les données chargées, vous pouvez exécuter quelques requêtes pour les analyser.
  • Calculer le montant moyen des pourboires :
  • Calculer le coût moyen en fonction du nombre de passagers :
  • Calculer le nombre quotidien de prises en charge par quartier :
  • Calculer la durée de chaque trajet en minutes, puis regrouper les résultats selon cette durée :
  • Afficher le nombre de prises en charge dans chaque quartier, ventilé par heure de la journée :
4

Créer un dictionnaire

Vous allez ensuite créer un dictionnaire (un ensemble de paires clé-valeur stockées en mémoire) nommé taxi_zone_dictionary afin d’établir une correspondance entre les identifiants de lieu et les noms des boroughs de NYC, à partir d’un fichier CSV répertoriant tous les quartiers de New York. Ces identifiants correspondent aux colonnes pickup_nyct2010_gid et dropoff_nyct2010_gid de la table trips.Voici un extrait, présenté sous forme de tableau, du fichier CSV que vous utilisez. La colonne LocationID du fichier correspond aux colonnes pickup_nyct2010_gid et dropoff_nyct2010_gid de votre table trips :Exécutez la commande SQL suivante, qui crée un dictionnaire nommé taxi_zone_dictionary et le remplit à partir du fichier CSV stocké dans S3. L’URL du fichier est https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/taxi_zone_lookup.csv.
Définir LIFETIME sur 0 désactive les mises à jour automatiques afin d’éviter tout trafic inutile vers notre bucket S3. Dans d’autres cas, vous pouvez le configurer différemment. Pour plus de détails, consultez Rafraîchissement des données de dictionnaire avec LIFETIME.
Vérifiez que tout a fonctionné. La requête suivante doit renvoyer 265 lignes, soit une ligne par quartier :
5

Exécutez des requêtes à l’aide du dictionnaire

Vous pouvez utiliser la fonction dictGet (ou l’une de ses variantes) pour récupérer une valeur dans un dictionnaire. Il suffit de lui passer le nom du dictionnaire, la valeur souhaitée et la clé (qui, dans notre exemple, correspond à la colonne LocationID de taxi_zone_dictionary) pour obtenir la valeur correspondante. Par exemple, la requête suivante renvoie le Borough dont le LocationID est 132 (ce qui correspond à l’aéroport JFK) :
JFK se trouve dans le Queens. Notez que le temps nécessaire pour récupérer la valeur est pratiquement nul :
Utilisez la fonction dictHas pour vérifier si une clé existe dans le dictionnaire. Par exemple, la requête suivante renvoie 1 (ce qui équivaut à “true” dans ClickHouse) :
La requête suivante renvoie 0, car 4567 ne figure pas parmi les valeurs de LocationID dans le dictionnaire :
Utilisez la fonction dictGet pour récupérer le nom d’un borough dans une requête. Par exemple :
Cette requête calcule le nombre total de courses de taxi par borough se terminant à l’aéroport de LaGuardia ou de JFK. Le résultat se présente comme suit ; notez qu’un nombre important de trajets ont un quartier de prise en charge inconnu :
6

Effectuer une jointure

Enfin, écrivez quelques requêtes qui effectuent une jointure entre taxi_zone_dictionary et votre table trips.Commencez par un simple JOIN qui fonctionne de manière similaire à la requête précédente sur les aéroports :
La réponse est identique à celle de la requête dictGet :
Notez que la sortie de la requête JOIN ci-dessus est identique à celle de la requête précédente, qui utilisait dictGetOrDefault (à ceci près que les valeurs Unknown n’y figurent pas). En coulisses, ClickHouse appelle en réalité la fonction dictGet sur le dictionnaire taxi_zone_dictionary, mais la syntaxe JOIN est plus familière aux développeurs SQL.
Cette requête renvoie les lignes des 1 000 trajets aux pourboires les plus élevés, puis effectue une jointure interne entre chaque ligne et le dictionnaire :
Privilégiez l’énumération des seules colonnes nécessaires à votre requête plutôt que d’utiliser SELECT *. ClickHouse stockant les données par colonne, sélectionner moins de colonnes réduit directement le volume de données lues, décompressées et traitées.

Prochaines étapes

Pour en savoir plus sur ClickHouse, consultez la documentation suivante :
Dernière modification le 28 septembre 2026