Foursquare 地点
Dataset
此数据集由 Foursquare 提供,您可以在 下载 的同时,依据 Apache 2.0 许可证免费使用。
它包含超过 1 亿条商业兴趣点 (POI) 记录,涵盖商店、餐馆、公园、游乐场和纪念碑等。同时,它还包括这些地点的额外元数据,例如类别和社交媒体信息。
Data exploration
为了探索数据,我们将使用 clickhouse-local
,这是一个小型命令行工具,提供完整的 ClickHouse 引擎,您也可以使用 ClickHouse Cloud、clickhouse-client
或者 chDB
。
运行以下查询以从存储数据的 S3 存储桶中选择数据:
我们看到有相当多的字段为 ᴺᵁᴸᴸ
,因此可以在查询中添加一些额外条件,以获取更多可用数据:
运行以下查询以使用 DESCRIBE
查看数据的自动推断模式:
Loading the data into ClickHouse
如果您希望将数据持久化到磁盘,可以使用 clickhouse-server
或 ClickHouse Cloud。
要创建表,请运行以下命令:
请注意对多个列使用 LowCardinality
数据类型,这会将数据类型的内部表示更改为字典编码。使用字典编码数据可以显著提高许多应用程序中 SELECT
查询的性能。
此外,还创建了两个 UInt32
MATERIALIZED
列 mercator_x
和 mercator_y
,它们将经纬度坐标映射到 Web Mercator 投影,以便更轻松地将地图分段为瓦片:
让我们逐一解析上述每个列的作用。
mercator_x
此列将经度值转换为 Mercator 投影中的 X 坐标:
longitude + 180
将经度范围从 [-180, 180] 移动到 [0, 360]- 除以 360 将其归一化到 0 和 1 之间的值
- 乘以
0xFFFFFFFF
(最大 32 位无符号整数的十六进制表示)将此归一化值按比例缩放到 32 位整数的完整范围
mercator_y
此列将纬度值转换为 Mercator 投影中的 Y 坐标:
latitude + 90
将纬度从 [-90, 90] 移动到 [0, 180]- 除以 360 并乘以 pi() 将其转换为三角函数所需的弧度
log(tan(...))
部分是 Mercator 投影公式的核心- 乘以
0xFFFFFFFF
将其缩放到完整的 32 位整数范围
指定 MATERIALIZED
确保在 INSERT
数据时 ClickHouse 计算这些列的值,而不需要在 INSERT
语句中指定这些列(它们并不是原始数据模式的一部分)。
该表按 mortonEncode(mercator_x, mercator_y)
排序,以生成 mercator_x
和 mercator_y
的 Z-order 空间填充曲线,以显著提高地理空间查询性能。此 Z-order 曲线排序确保数据根据空间接近度物理组织:
还为更快的搜索创建了两个 minmax
索引:
如您所见,ClickHouse 拥有您进行实时映射应用所需的一切!
运行以下查询以加载数据:
Visualizing the data
要查看此数据集的各种可能性,请访问 adsb.exposed。adsb.exposed 最初是由共同创始人兼首席技术官 Alexey Milovidov 创建的,用于可视化 ADS-B(自动依赖监视广播)航班数据,数据量是 1000 倍。 在一次公司黑客马拉松中,Alexey 将 Foursquare 数据添加到该工具中。
以下是一些我们喜欢的可视化,供您欣赏。



