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

Места Foursquare

Набор данных

Этот набор данных от Foursquare доступен для скачивания и бесплатного использования по лицензии Apache 2.0.

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

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

Для исследования данных мы будем использовать clickhouse-local, небольшой инструмент командной строки, который предоставляет полный движок ClickHouse, хотя вы также можете использовать ClickHouse Cloud, clickhouse-client или даже chDB.

Выполните следующий запрос, чтобы выбрать данные из S3-хранилища, где находятся данные:

Мы видим, что довольно много полей имеют значение ᴺᵁᴸᴸ, поэтому мы можем добавить дополнительные условия к нашему запросу, чтобы получить более полезные данные:

Запустите следующий запрос, чтобы посмотреть автоматически выведенную схему данных с помощью DESCRIBE:

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

Если вы хотите сохранить данные на диске, вы можете использовать clickhouse-server или ClickHouse Cloud.

Чтобы создать таблицу, выполните следующую команду:

Обратите внимание на использование типа данных LowCardinality для нескольких колонок, что изменяет внутреннее представление типов данных на кодированное в словаре. Работа с кодированными в словаре данными значительно увеличивает производительность запросов SELECT для многих приложений.

Кроме того, создаются два UInt32 MATERIALIZED столбца, mercator_x и mercator_y, которые отображают координаты широты/долготы на веб-проекцию Меркатора для более легкого сегментирования карты на тайлы:

Давайте разберём, что происходит выше для каждого столбца.

mercator_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 производит вычисления для этих столбцов при выполнении INSERT данных, не требуя указания этих столбцов (которые не являются частью оригинальной схемы данных) в операторе INSERT.

Таблица заказать по mortonEncode(mercator_x, mercator_y), что создает кривую пространственного заполнения Z для mercator_x, mercator_y, чтобы значительно улучшить производительность геопространственных запросов. Это порядок кривой Z гарантирует, что данные физически организованы по пространственной близости:

Также создаются два индекса minmax для более быстрого поиска:

Как вы можете видеть, у ClickHouse есть абсолютно все, что вам нужно для приложений картирования в реальном времени!

Выполните следующий запрос для загрузки данных:

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

Чтобы увидеть, что возможно с этим набором данных, ознакомьтесь с adsb.exposed. adsb.exposed был изначально создан соучредителем и техническим директором Алексеем Миловидовым для визуализации данных о полётах ADS-B (Автоматическая зависимая наземная служба радиосвязи), которые в 1000 раз больше. Во время хакатона компании Алексей добавил данные Foursquare в инструмент.

Некоторые из наших любимых визуализаций представлены ниже для вашего удовольствия.