Skip to main content
Foursquare OS Places contient plus de 100 millions de points d’intérêt commerciaux (POI), notamment des magasins, des restaurants, des parcs, des aires de jeux et des monuments. Dans ce guide, vous connecterez ClickHouse au catalogue Iceberg de Foursquare, explorerez le jeu de données et le chargerez dans une table optimisée pour les requêtes géospatiales. Le jeu de données est disponible via le Foursquare Places Portal et est gratuit sous licence Apache 2.0.
Foursquare a modifié le mode d’accès à OS Places. Les anciennes versions de ce guide interrogeaient des fichiers datés dans un bucket S3 public ; l’accès s’effectue désormais via le Places Portal et un catalogue Iceberg authentifié. Consultez la documentation de Foursquare sur l’accès à OS Places pour plus de détails.

Avant de commencer

Avant d’exécuter les requêtes de ce guide, vous avez besoin des éléments suivants :
  • Un compte Foursquare Places Portal
  • Un jeton d’accès créé depuis l’onglet Access Data du jeu de données OS Places

Connectez-vous au catalogue Foursquare

Gardez votre jeton d’accès confidentiel. Démarrez votre client ClickHouse, puis remplacez <YOUR_ACCESS_TOKEN> par votre jeton dans la requête suivante :
Query
La base de données du catalogue est en lecture seule. La table places_os reflète la version actuellement publiée par Foursquare, plutôt qu’une version Parquet figée à une date donnée ; ses lignes et son schéma peuvent donc évoluer au fil du temps. Les requêtes sans clause ORDER BY peuvent par conséquent renvoyer des lignes d’échantillon différentes de celles présentées dans les réponses de ce guide.

Vérifier la connexion

Interrogez une ligne de la table Iceberg places_os :
Query
Response

Explorer les données

La ligne d’exemple contient plusieurs champs NULL. Ajoutez des filtres pour obtenir une ligne plus complète :
Query
Response
Utilisez DESCRIBE pour inspecter le schéma de la table :
Query
Response

Chargez les données dans ClickHouse

Pour stocker les données, créez une table sur clickhouse-server ou dans ClickHouse Cloud. Créez une table MergeTree avec des colonnes encodées par dictionnaire et des coordonnées Web Mercator matérialisées :
Query
Plusieurs colonnes utilisent le type de données LowCardinality, qui stocke les valeurs répétées à l’aide d’un encodage par dictionnaire. Cette représentation peut considérablement améliorer les performances des requêtes SELECT. Les deux colonnes UInt32 MATERIALIZED, mercator_x et mercator_y, convertissent la latitude et la longitude dans la projection Web Mercator, ce qui facilite le découpage de la carte en tuiles :
Les expressions calculent les valeurs suivantes. mercator_x Cette colonne convertit une valeur de longitude en coordonnée X dans la projection de Mercator :
  • longitude + 180 décale la plage de longitude de [-180, 180] vers [0, 360].
  • La division par 360 normalise la valeur dans une plage comprise entre 0 et 1.
  • La multiplication par 0xFFFFFFFF, l’entier non signé maximal sur 32 bits, met à l’échelle la valeur normalisée sur toute la plage d’un entier sur 32 bits.
mercator_y Cette colonne convertit une valeur de latitude en coordonnée Y dans la projection de Mercator :
  • latitude + 90 décale la plage de latitude de [-90, 90] vers [0, 180].
  • La division par 360 et la multiplication par pi convertissent la valeur en radians pour les fonctions trigonométriques.
  • log(tan(...)) applique la formule de base de la projection de Mercator.
  • La multiplication par 0xFFFFFFFF met le résultat à l’échelle sur toute la plage d’un entier sur 32 bits.
La spécification de MATERIALIZED permet à ClickHouse de calculer ces valeurs lors de l’insertion des données, sans que les données source aient besoin de contenir ces colonnes. La table est ordonnée par mortonEncode(mercator_x, mercator_y), ce qui crée une courbe de remplissage de l’espace en ordre Z et organise les données selon leur proximité spatiale :
Deux index minmax accélèrent encore le filtrage spatial :
Chargez la version actuelle d’OS Places dans la table :
Cette requête lit et stocke plus de 100 millions de lignes. Son exécution peut prendre beaucoup de temps, consommer de l’espace de stockage et entraîner des coûts d’utilisation dans ClickHouse Cloud. La relancer ajoute les mêmes données ; assurez-vous donc que foursquare_mercator est vide avant de réessayer l’importation.
Query
Les listes explicites de colonnes source et de destination empêchent que les modifications de l’ordre des colonnes du catalogue ne désalignent les valeurs importées. La requête exclut unresolved_flags, car cette colonne n’est pas nécessaire dans la table locale, et filtre les lignes sans coordonnées, car elles ne peuvent pas être positionnées sur la carte. Les autres valeurs sources nullables restent nulles dans la table locale.

Visualiser les données

Le modèle d’accès de Foursquare a changé depuis la création de ces visualisations. La vue interactive originale de Places date d’avant le modèle d’accès actuel et est fournie à titre de référence historique, mais elle peut ne plus afficher les données Places. Les images ci-dessous sont conservées à titre d’exemples historiques.
Lors d’un hackathon de l’entreprise, le cofondateur et CTO de ClickHouse, Alexey Milovidov, a utilisé ClickHouse pour créer les visualisations suivantes à partir du jeu de données Foursquare.
Dernière modification le 14 août 2026