Skip to main content
Foursquare OS Places 包含超过 1 亿个商业兴趣点 (POI) , 包括商店、餐厅、公园、游乐场和纪念碑。本指南将介绍如何 将 ClickHouse 连接到 Foursquare 的 Iceberg 目录,浏览数据集,并将其加载 到针对地理空间查询优化的表中。 该数据集可通过 Foursquare Places Portal 获取,并可在 Apache 2.0 许可证下免费使用。
Foursquare 已更新 OS Places 的访问方式。本指南的旧版本查询 公网 S3 bucket 中按日期固定的文件;现在则通过 Places Portal 和经过 身份验证的 Iceberg 目录访问。详情请参阅 Foursquare 的 OS Places 访问文档

开始之前

在运行本指南中的查询之前,您需要:

连接到 Foursquare 目录

请妥善保管访问令牌。启动 ClickHouse 客户端,然后将以下查询中的 <YOUR_ACCESS_TOKEN> 替换为您的令牌:
Query
目录数据库为只读。places_os 表反映的是 Foursquare’s 当前发布的发行版, 而非固定在某个日期的 Parquet 版本,因此其行和 schema 可能会随时间变化。 因此,不含 ORDER BY 子句的查询返回的样本行可能与本指南中显示的响应不同。

验证连接

places_os Iceberg 表中查询一行数据:
Query
Response

探索数据

样本行中有多个 null 字段。添加过滤器以返回更完整的行:
Query
Response
使用 DESCRIBE 查看表 schema:
Query
Response

将数据加载到 ClickHouse

要持久存储数据,请在 clickhouse-server 或 ClickHouse Cloud 上创建表。 创建一个包含字典编码列和 materialized Web 墨卡托投影 坐标的 MergeTree 表:
Query
多个列使用 LowCardinality 数据类型, 该类型通过字典编码存储重复值。这种表示方式可以显著 提升 SELECT 查询性能。 两个 UInt32 MATERIALIZEDmercator_xmercator_y 将纬度和 经度映射到 Web 墨卡托投影, 从而更方便地将地图划分为图块:
这些表达式计算以下值。 mercator_x 此列将经度值转换为墨卡托投影中的 X 坐标:
  • longitude + 180 将经度范围从 [-180, 180] 平移到 [0, 360]。
  • 除以 360 可将该值归一化到 0 到 1 的范围。
  • 乘以 0xFFFFFFFF (最大的 32 位无符号整数) 可将归一化后的值缩放到完整的 32 位整数范围。
mercator_y 此列将纬度值转换为墨卡托投影中的 Y 坐标:
  • latitude + 90 将纬度范围从 [-90, 90] 平移到 [0, 180]。
  • 除以 360 并乘以 pi,可将该值转换为供三角函数使用的弧度。
  • log(tan(...)) 应用墨卡托投影的核心公式。
  • 乘以 0xFFFFFFFF 可将结果缩放到完整的 32 位整数范围。
指定 MATERIALIZED 后,ClickHouse 会在插入数据时计算这些值, 无需源数据包含这些列。 该表按 mortonEncode(mercator_x, mercator_y) 排序,这会创建一条 Z 阶 空间填充曲线,并按空间邻近性组织数据:
两个 minmax 索引可进一步加快空间筛选:
将当前 OS Places 发行版加载到表中:
此查询会读取并存储超过 1 亿行数据,可能需要较长时间、 占用存储空间,并在 ClickHouse Cloud 中产生使用费用。再次运行会追加 相同的数据,因此重试导入前请确保 foursquare_mercator 为空。
Query
显式指定源列和目标端列列表,可防止目录的列 顺序变更导致导入值错位。该查询排除了 unresolved_flags,因为本地表不需要该列, 并过滤掉没有坐标的行,因为这些行无法显示在地图上。其他可为空的源值在本地表中仍为 null。

数据可视化

自创建这些可视化效果以来,Foursquare 的访问模型已发生变化。 原始交互式 Places 视图 早于当前的访问模型,提供该链接仅供历史参考,但它可能已不再 显示 Places 数据。下方图片保留为历史示例。
在公司的一次黑客松活动中,ClickHouse 联合创始人兼 CTO Alexey Milovidov 使用 ClickHouse 基于 Foursquare 数据集创建了以下可视化效果。
最后修改于 2026年8月14日