Foursquare 已更新 OS Places 的访问方式。本指南的旧版本查询
公网 S3 bucket 中按日期固定的文件;现在则通过 Places Portal 和经过
身份验证的 Iceberg 目录访问。详情请参阅 Foursquare 的 OS Places 访问文档。
开始之前
- 一个 Foursquare Places Portal 账户
- 通过 OS Places 数据集的 Access Data 选项卡创建的访问令牌
连接到 Foursquare 目录
<YOUR_ACCESS_TOKEN> 替换为您的令牌:
Query
places_os 表反映的是 Foursquare’s 当前发布的发行版,
而非固定在某个日期的 Parquet 版本,因此其行和 schema 可能会随时间变化。
因此,不含 ORDER BY 子句的查询返回的样本行可能与本指南中显示的响应不同。
验证连接
places_os Iceberg 表中查询一行数据:
Query
Response
探索数据
Query
Response
DESCRIBE 查看表 schema:
Query
Response
将数据加载到 ClickHouse
clickhouse-server 或 ClickHouse Cloud 上创建表。
创建一个包含字典编码列和 materialized Web 墨卡托投影
坐标的 MergeTree 表:
Query
LowCardinality 数据类型,
该类型通过字典编码存储重复值。这种表示方式可以显著
提升 SELECT 查询性能。
两个 UInt32 MATERIALIZED 列 mercator_x 和 mercator_y 将纬度和
经度映射到 Web 墨卡托投影,
从而更方便地将地图划分为图块:
longitude + 180将经度范围从 [-180, 180] 平移到 [0, 360]。- 除以 360 可将该值归一化到 0 到 1 的范围。
- 乘以
0xFFFFFFFF(最大的 32 位无符号整数) 可将归一化后的值缩放到完整的 32 位整数范围。
latitude + 90将纬度范围从 [-90, 90] 平移到 [0, 180]。- 除以 360 并乘以
pi,可将该值转换为供三角函数使用的弧度。 log(tan(...))应用墨卡托投影的核心公式。- 乘以
0xFFFFFFFF可将结果缩放到完整的 32 位整数范围。
MATERIALIZED 后,ClickHouse 会在插入数据时计算这些值,
无需源数据包含这些列。
该表按 mortonEncode(mercator_x, mercator_y) 排序,这会创建一条 Z 阶
空间填充曲线,并按空间邻近性组织数据:
minmax 索引可进一步加快空间筛选:
Query
unresolved_flags,因为本地表不需要该列,
并过滤掉没有坐标的行,因为这些行无法显示在地图上。其他可为空的源值在本地表中仍为 null。
数据可视化
自创建这些可视化效果以来,Foursquare 的访问模型已发生变化。
原始交互式 Places 视图
早于当前的访问模型,提供该链接仅供历史参考,但它可能已不再
显示 Places 数据。下方图片保留为历史示例。