Перейти к основному содержанию

Набор данных

Этот набор данных от Foursquare доступен для загрузки и может бесплатно использоваться по лицензии Apache 2.0. Он содержит более 100 миллионов записей о коммерческих точках интереса (POI), таких как магазины, рестораны, парки, детские площадки и памятники. Также в него входят дополнительные метаданные об этих местах, например категории и информация из социальных сетей.

Исследование данных

Для исследования данных мы будем использовать clickhouse-local — небольшую утилиту командной строки, которая предоставляет полноценный движок ClickHouse, хотя вы также можете использовать ClickHouse Cloud, clickhouse-client или даже chDB. Выполните следующий запрос, чтобы выбрать данные из S3 бакета, где они хранятся:
Query
Response
Мы видим, что во многих полях значение ᴺᵁᴸᴸ, поэтому можем добавить в запрос несколько дополнительных условий, чтобы получить более пригодные для анализа данные:
Query
Выполните следующий запрос, чтобы посмотреть автоматически определённую схему данных с помощью DESCRIBE:
Query
Response

Загрузка данных в ClickHouse

Если вы хотите хранить данные на диске, можно использовать clickhouse-server или ClickHouse Cloud. Чтобы создать таблицу, выполните следующую команду:
Query
Обратите внимание на использование типа данных LowCardinality для нескольких столбцов: он изменяет внутреннее представление данных этих типов на словарное кодирование. Работа с данными, закодированными с помощью словаря, значительно повышает производительность запросов SELECT во многих приложениях. Кроме того, создаются два MATERIALIZED столбца типа UInt32mercator_x и mercator_y, которые сопоставляют координаты lat/lon с проекцией Web Mercator для более удобного разбиения карты на тайлы:
Давайте разберем, что именно здесь происходит для каждого столбца. mercator_x Этот столбец преобразует значение долготы в координату X в проекции Меркатора:
  • longitude + 180 сдвигает диапазон долготы из [-180, 180] в [0, 360]
  • Деление на 360 нормализует значение до диапазона от 0 до 1
  • Умножение на 0xFFFFFFFF (hex-представление максимального 32-битного беззнакового целого) масштабирует это нормализованное значение до полного диапазона 32-битного целого
mercator_y Этот столбец преобразует значение широты в координату Y в проекции Меркатора:
  • latitude + 90 сдвигает диапазон широты из [-90, 90] в [0, 180]
  • Деление на 360 и умножение на pi() переводит значение в радианы для тригонометрических функций
  • Часть log(tan(...)) — это основа формулы проекции Меркатора
  • умножение на 0xFFFFFFFF масштабирует значение до полного диапазона 32-битного целого
Указание MATERIALIZED гарантирует, что ClickHouse вычислит значения этих столбцов при INSERT данных, без необходимости явно указывать эти столбцы (которые не входят в исходную схему данных) в операторе `INSERT. Таблица упорядочена по mortonEncode(mercator_x, mercator_y), что создает пространственно-заполняющую Z-кривую для mercator_x, mercator_y, чтобы существенно повысить производительность геопространственных запросов. Такое упорядочивание по Z-кривой гарантирует, что данные физически организованы по пространственной близости:
Также создаются два индекса minmax для ускорения поиска:
Как видите, в ClickHouse есть абсолютно всё, что нужно для картографических приложений, работающих в реальном времени! Выполните следующий запрос, чтобы загрузить данные:

Визуализация данных

Чтобы увидеть, что можно сделать с этими данными, загляните на adsb.exposed. Изначально adsb.exposed был создан сооснователем и CTO Алексеем Миловидовым для визуализации полётных данных ADS-B (Automatic Dependent Surveillance-Broadcast), объём которых в 1000 раз больше. Во время одного из хакатонов компании Алексей добавил в этот инструмент данные Foursquare. Ниже — некоторые из наших любимых визуализаций.
Последнее изменение 19 июня 2026 г.