Vue d’ensemble
Prérequis
Créer une nouvelle table
Le jeu de données des taxis de New York contient des informations sur des millions de courses, avec des colonnes telles que le montant du pourboire, les péages, le type de paiement, etc. Créez une table pour stocker ces données.-
Connectez-vous à la console SQL :
- Pour ClickHouse Cloud, sélectionnez un service dans le menu déroulant, puis SQL Console dans le menu de navigation de gauche.
- Pour un ClickHouse autogéré, connectez-vous à la console SQL à l’adresse
https://_hostname_:8443/play. Renseignez-vous auprès de votre administrateur ClickHouse pour obtenir les détails.
-
Créez la table
tripssuivante dans la base de donnéesdefault:
Ajouter le jeu de données
Maintenant que vous avez créé une table, ajoutez les données des taxis de New York à partir de fichiers CSV dans S3.-
La commande suivante insère environ 2 000 000 lignes dans votre table
tripsà partir de deux fichiers distincts dans S3 :trips_1.tsv.gzettrips_2.tsv.gz: -
Attendez la fin de l’
INSERT. Le téléchargement des 150 MB de données peut prendre un certain temps. -
Une fois l’insert terminé, vérifiez qu’il a bien fonctionné :
Cette requête doit renvoyer 1,999,657 lignes.
Analyser les données
Exécutez des requêtes pour analyser les données. Explorez les exemples suivants ou essayez votre propre requête SQL.-
Calculez le montant moyen des pourboires :
Résultat attendu
-
Calculez le coût moyen selon le nombre de passagers :
Résultat attendu
Le
passenger_countest compris entre 0 et 9 : -
Calculez le nombre de prises en charge quotidiennes par quartier :
Résultat attendu
-
Calculez la durée de chaque trajet en minutes, puis regroupez les résultats en fonction de la durée du trajet :
Résultat attendu
-
Affichez le nombre de prises en charge dans chaque quartier, réparti par heure de la journée :
Résultat attendu
-
Récupérez les trajets à destination des aéroports de LaGuardia ou de JFK :
Résultat attendu
Créer un Dictionary
Un dictionnaire est une correspondance de paires clé-valeur stockées en mémoire. Pour plus de détails, voir DictionariesCréez un dictionnaire associé à une table dans votre service ClickHouse. La table et le dictionnaire sont basés sur un fichier CSV contenant une ligne par quartier de New York City.Les quartiers sont associés aux noms des cinq arrondissements de New York (Bronx, Brooklyn, Manhattan, Queens et Staten Island), ainsi qu’à l’aéroport de Newark (EWR).Voici un extrait du fichier CSV que vous utilisez, présenté sous forme de tableau. La colonneLocationID du fichier correspond aux colonnes pickup_nyct2010_gid et dropoff_nyct2010_gid de votre table trips :| LocationID | Borough | Zone | service_zone |
|---|---|---|---|
| 1 | EWR | Aéroport de Newark | EWR |
| 2 | Queens | Jamaica Bay | Boro Zone |
| 3 | Bronx | Allerton/Pelham Gardens | Boro Zone |
| 4 | Manhattan | Alphabet City | Zone jaune |
| 5 | Staten Island | Arden Heights | Zone de borough |
- Exécutez la commande SQL suivante, qui crée un dictionnaire nommé
taxi_zone_dictionaryet alimente le dictionnaire à partir du fichier CSV stocké dans S3. L’URL du fichier esthttps://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/taxi_zone_lookup.csv.
Définir
LIFETIME à 0 désactive les mises à jour automatiques afin d’éviter tout trafic inutile vers notre bucket S3. Dans les autres cas, vous pouvez le configurer autrement. Pour plus de détails, consultez Actualisation des données du dictionnaire avec LIFETIME.-
Vérifiez que tout a bien fonctionné. La requête suivante doit renvoyer 265 lignes, soit une ligne pour chaque quartier :
-
Utilisez la fonction
dictGet(ou ses variantes) pour récupérer une valeur dans un dictionnaire. Indiquez le nom du dictionnaire, la valeur souhaitée et la clé (qui, dans notre exemple, est la colonneLocationIDdetaxi_zone_dictionary). Par exemple, la requête suivante renvoie leBoroughdont leLocationIDest 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 quasiment nul : -
Utilisez la fonction
dictHaspour vérifier si une clé est présente dans le dictionnaire. Par exemple, la requête suivante renvoie1(ce qui correspond à “true” dans ClickHouse) : -
La requête suivante renvoie 0, car 4567 n’est pas une valeur de
LocationIDdans le dictionnaire : -
Utilisez la fonction
dictGetpour obtenir le nom d’un borough dans une requête. Par exemple :Cette requête calcule le nombre de courses de taxi par arrondissement qui se terminent à l’aéroport de LaGuardia ou à celui de JFK. Le résultat se présente comme suit, et notez qu’il y a pas mal de trajets dont le quartier de prise en charge est inconnu :
Effectuer une jointure
Écrivez quelques requêtes qui joignenttaxi_zone_dictionary à votre table trips.-
Commencez par un
JOINsimple, similaire à la requête précédente sur l’aéroport :La réponse est identique à celle de la requêtedictGet:
Notez que le résultat de la requête
JOIN ci-dessus est identique à celui de la requête précédente utilisant dictGetOrDefault (sauf que les valeurs Unknown ne sont pas incluses). En arrière-plan, ClickHouse appelle en réalité la fonction dictGet pour le dictionnaire taxi_zone_dictionary, mais la syntaxe JOIN est plus familière aux développeurs SQL.- Cette requête renvoie les lignes correspondant aux 1000 trajets avec le montant de pourboire le plus élevé, puis effectue une INNER JOIN entre chaque ligne et le dictionnaire :
En général, évitez d’utiliser trop souvent
SELECT * dans ClickHouse. Récupérez uniquement les colonnes dont vous avez réellement besoin.Prochaines étapes
- Introduction aux index primaires clairsemés dans ClickHouse : découvrez comment ClickHouse utilise des index primaires clairsemés pour localiser efficacement les données pertinentes lors 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 UI/BI favori à ClickHouse.
- Référence SQL : parcourez les fonctions SQL disponibles dans ClickHouse pour transformer, traiter et analyser les données.