Skip to main content

Обзор

Узнайте, как выполнять приём данных в ClickHouse и выполнять запросы к ним на примере набора данных о такси Нью-Йорка.

Предварительные требования

Для выполнения этого руководства вам потребуется доступ к работающему сервису ClickHouse. Инструкции см. в руководстве Быстрый старт.
1

Создайте новую таблицу

Набор данных о такси Нью-Йорка содержит сведения о миллионах поездок на такси, включая такие столбцы, как сумма чаевых, дорожные сборы, тип оплаты и другие поля. Создайте таблицу для хранения этих данных.
  1. Подключитесь к SQL Console:
    • В ClickHouse Cloud выберите сервис в раскрывающемся меню, затем в левом навигационном меню выберите SQL Console.
    • Для самоуправляемого ClickHouse подключитесь к SQL Console по адресу https://_hostname_:8443/play. Уточните детали у администратора ClickHouse.
  2. Создайте следующую таблицу trips в базе данных default:
2

Добавьте датасет

Теперь, когда вы создали таблицу, добавьте данные о такси Нью-Йорка из CSV-файлов в S3.
  1. Следующая команда вставляет примерно 2 000 000 строк в таблицу trips из двух разных файлов в S3: trips_1.tsv.gz и trips_2.tsv.gz:
  2. Дождитесь завершения INSERT. Загрузка 150 МБ данных может занять некоторое время.
  3. Когда вставка завершится, проверьте результат:
    Этот запрос должен вернуть 1,999,657 строк.
3

Анализ данных

Выполните несколько запросов для анализа данных. Изучите приведённые ниже примеры или попробуйте собственный SQL-запрос.
  • Рассчитайте средний размер чаевых:

  • Рассчитайте среднюю стоимость исходя из количества пассажиров:

    Значения passenger_count варьируются от 0 до 9:

  • Рассчитайте ежедневное количество посадок по районам:

  • Вычислите длительность каждой поездки в минутах, затем сгруппируйте результаты по этой длительности:

  • Покажите количество посадок в каждом районе с разбивкой по часам суток:

  1. Найти поездки в аэропорты LaGuardia или JFK:

4

Создание словаря

Словарь — это отображение пар ключ-значение, хранящихся в памяти. Подробнее см. в разделе DictionariesСоздайте словарь, связанный с таблицей в вашем сервисе ClickHouse. Таблица и словарь основаны на CSV-файле, в котором каждая строка соответствует одному району Нью-Йорка.Районы сопоставлены с названиями пяти боро Нью-Йорка (Бронкс, Бруклин, Манхэттен, Куинс и Статен-Айленд), а также с аэропортом Ньюарк (EWR).Ниже приведён фрагмент используемого CSV-файла в табличном формате. Столбец LocationID в файле соответствует столбцам pickup_nyct2010_gid и dropoff_nyct2010_gid в таблице trips:
  1. Выполните следующую SQL-команду, которая создает словарь с именем taxi_zone_dictionary и заполняет его данными из CSV-файла в S3. URL-адрес файла: https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/taxi_zone_lookup.csv.
Установка LIFETIME в значение 0 отключает автоматические обновления, чтобы избежать лишнего трафика к нашему S3 бакету. В других случаях его можно настроить иначе. Подробнее см. в разделе Обновление данных словаря с помощью LIFETIME.
  1. Убедитесь, что всё сработало. Следующий запрос должен вернуть 265 строк — по одной для каждого района:
  2. Используйте функцию dictGet (или её варианты) для получения значения из словаря. Нужно передать имя словаря, нужное значение и ключ (в нашем примере это столбец LocationID словаря taxi_zone_dictionary). Например, следующий запрос возвращает значение Borough для LocationID, равного 132, что соответствует аэропорту JFK):
    JFK находится в Куинсе. Обратите внимание: время получения значения практически равно 0:
  3. Используйте функцию dictHas, чтобы проверить, есть ли ключ в словаре. Например, следующий запрос возвращает 1 (что в ClickHouse соответствует значению “true”):
  4. Следующий запрос возвращает 0, потому что 4567 не является значением LocationID в этом словаре:
  5. Используйте функцию dictGet, чтобы получить название боро в запросе. Например:
    Этот запрос суммирует количество поездок на такси по каждому боро, которые заканчиваются либо в аэропорту LaGuardia, либо в аэропорту JFK. Результат выглядит следующим образом; обратите внимание, что довольно много поездок имеют неизвестный район посадки:
5

Выполните JOIN

Напишите несколько запросов, которые выполняют JOIN между taxi_zone_dictionary и таблицей trips.
  1. Начните с простого JOIN, который работает аналогично предыдущему запросу по аэропортам:
    Результат выглядит так же, как и для запроса dictGet:
Обратите внимание: результат приведённого выше запроса JOIN совпадает с результатом предыдущего запроса, использующего dictGetOrDefault (за исключением того, что значения Unknown в него не входят). За кулисами ClickHouse фактически вызывает функцию dictGet для словаря taxi_zone_dictionary, но синтаксис JOIN более привычен для SQL-разработчиков.
  1. Этот запрос возвращает строки для 1000 поездок с самыми большими чаевыми, а затем выполняет внутренний JOIN каждой строки со словарём:
Как правило, в ClickHouse стараются не использовать SELECT *. Следует выбирать только те столбцы, которые действительно нужны.

Следующие шаги

Узнайте больше о ClickHouse в следующих разделах документации:
Last modified on July 2, 2026