Skip to main content
Foursquare OS Places には、店舗、レストラン、公園、遊び場、記念碑など、1 億件を超える商業施設・場所に関するポイントオブインタレスト (POI) が収録されています。このガイドでは、ClickHouse を Foursquare の Iceberg カタログに接続し、データセットを調査して、地理空間クエリ向けに最適化されたテーブルに読み込みます。 このデータセットは Foursquare Places Portal で提供されており、Apache 2.0 ライセンスのもとで無料で利用できます。
Foursquare は OS Places へのアクセス方法を変更しました。このガイドの以前のバージョンでは、パブリック S3 バケット内の日付で固定されたファイルをクエリしていましたが、現在は Places Portal と認証済みの Iceberg カタログを使用してアクセスします。詳細については、Foursquare’s OS Places access documentation を参照してください。

始める前に

このガイドのクエリを実行する前に、次のものが必要です。
  • Foursquare Places Portal のアカウント
  • OS Places データセットの Access Data タブで作成したアクセストークン

Foursquareカタログに接続する

アクセストークンは厳重に管理してください。ClickHouseクライアントを起動し、次のクエリ内の <YOUR_ACCESS_TOKEN> をご自身のトークンに置き換えます。
Query
カタログデータベースは読み取り専用です。places_os テーブルは日付固定の Parquet リリースではなく、Foursquare’s の最新公開リリースを反映するため、行とスキーマは時間の経過とともに変更される可能性があります。したがって、ORDER BY 句のないクエリでは、このガイドに示した応答とは異なるサンプル行が返される場合があります。

接続を確認する

places_os Icebergテーブルから1行をクエリします。
Query
Response

データを探索する

サンプル行には null のフィールドがいくつか含まれています。より完全な行を返すには、フィルターを追加します:
Query
Response
DESCRIBE を使用してテーブルスキーマを確認します:
Query
Response

データをClickHouseに読み込む

データを永続化するには、clickhouse-server または ClickHouse Cloud にテーブルを作成します。 辞書エンコードされたカラムとマテリアライズドされた Web Mercator 座標を含む MergeTree テーブルを作成します。
Query
複数のカラムで、繰り返し出現する値を辞書エンコーディングで格納する LowCardinality データ型を使用しています。 この表現により、SELECT クエリのパフォーマンスを大幅に向上させることができます。 2 つの UInt32 MATERIALIZED カラムである mercator_xmercator_y は、緯度と 経度を Web メルカトル図法にマッピングします。 これにより、地図をタイルに分割しやすくなります。
これらの式では、次の値を計算します。 mercator_x このカラムは、経度の値をメルカトル図法における X 座標に変換します。
  • longitude + 180 は、経度の範囲を [-180, 180] から [0, 360] にシフトします。
  • 360 で除算すると、値は 0 から 1 の範囲に正規化されます。
  • 32 ビット符号なし整数の最大値である 0xFFFFFFFF を乗算すると、正規化された値が 32 ビット整数の全範囲にスケーリングされます。
mercator_y このカラムは、緯度の値をメルカトル図法における Y 座標に変換します。
  • latitude + 90 は、緯度の範囲を [-90, 90] から [0, 180] にシフトします。
  • 360 で除算して pi を乗算すると、値が三角関数で使用するラジアンに変換されます。
  • log(tan(...)) は、メルカトル図法の基本式を適用します。
  • 0xFFFFFFFF を乗算すると、結果が 32 ビット整数の全範囲にスケーリングされます。
MATERIALIZED を指定すると、ClickHouse はデータ挿入時にこれらの値を計算するため、 ソースデータにカラムを含める必要はありません。 テーブルは mortonEncode(mercator_x, mercator_y) によって順序付けられます。これにより、Z オーダーの 空間充填曲線が作成され、空間的な近接性に基づいてデータが整理されます。
2 つの minmax インデックスにより、空間フィルタリングをさらに高速化できます。
現在のOS Placesリリースをテーブルに読み込みます。
このクエリでは1億行を超えるデータを読み取り、保存します。完了までにかなりの時間がかかり、 ストレージを消費し、ClickHouse Cloudで利用料金が発生する可能性があります。再度実行すると同じ データが追加されるため、インポートを再試行する前にfoursquare_mercatorが空であることを確認してください。
Query
明示的に指定したログソースと宛先のカラムリストにより、カタログのカラム 順序が変更されても、インポートした値の対応がずれることを防ぎます。このクエリでは、ローカルテーブルで不要な unresolved_flags を 除外し、座標のない行はマップ上に配置できないため除外します。その他の Nullable なログソース値は、ローカルテーブルでも null のままです。

データを可視化する

これらの可視化が作成されて以降、Foursquare のアクセスモデルは変更されています。 元のインタラクティブな Places ビュー は現在のアクセスモデルより前のものであり、歴史的な参照用としてリンクされていますが、Places データが 表示されなくなっている可能性があります。以下の画像は歴史的な例として保持されています。
社内ハッカソンで、ClickHouse の共同創業者兼 CTO である Alexey Milovidov は ClickHouse を使用して、 Foursquare データセットから以下の可視化を作成しました。
最終更新日 2026年8月14日