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 :- Un compte ClickHouse Cloud (300 $ de crédits offerts à l’inscription)
- Un service ClickHouse Cloud
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.
- Sélectionnez console SQL dans le menu de gauche
- Cliquez sur l’onglet + à côté de l’icône d’accueil pour créer une nouvelle requête
- Dans l’éditeur SQL, saisissez la requête suivante, puis cliquez sur Run :
Expandable
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 : 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 Vous devriez obtenir 1 999 657 lignes
trips_1.tsv.gz et trips_2.tsv.gz :Expandable
trips :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 :
Créer un dictionnaire
Vous allez ensuite créer un dictionnaire (un ensemble de paires clé-valeur stockées en mémoire) nommé Vérifiez que tout a fonctionné. La requête suivante doit renvoyer 265 lignes, soit une ligne par quartier :
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.Exécutez des requêtes à l’aide du dictionnaire
Vous pouvez utiliser la fonction JFK se trouve dans le Queens. Notez que le temps nécessaire pour récupérer la valeur est pratiquement nul :Utilisez la fonction La requête suivante renvoie 0, car 4567 ne figure pas parmi les valeurs de Utilisez la fonction 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 :
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) :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) :LocationID dans le dictionnaire :dictGet pour récupérer le nom d’un borough dans une requête. Par exemple :Effectuer une jointure
Enfin, écrivez quelques requêtes qui effectuent une jointure entre La réponse est identique à celle de la requête 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 :
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 :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.Prochaines étapes
Pour en savoir plus sur ClickHouse, consultez la documentation suivante :- Introduction aux index primaires dans ClickHouse : découvrez comment ClickHouse utilise des index primaires creux pour localiser efficacement les données pertinentes lors de l’exécution des requêtes.
- Intégrer une source de données externe : découvrez les options d’intégration de sources de données, notamment les fichiers, Kafka, PostgreSQL, les pipelines de données et bien d’autres.
- Visualiser des données dans ClickHouse : connectez votre outil de visualisation ou de BI préféré à ClickHouse.
- Référence SQL : parcourez les fonctions SQL disponibles dans ClickHouse pour transformer, traiter et analyser vos données.