Обзор
Предварительные требования
Создайте новую таблицу
Набор данных о такси Нью-Йорка содержит сведения о миллионах поездок на такси, включая такие столбцы, как сумма чаевых, дорожные сборы, тип оплаты и другие поля. Создайте таблицу для хранения этих данных.-
Подключитесь к SQL Console:
- В ClickHouse Cloud выберите сервис в раскрывающемся меню, затем в левом навигационном меню выберите SQL Console.
- Для самоуправляемого ClickHouse подключитесь к SQL Console по адресу
https://_hostname_:8443/play. Уточните детали у администратора ClickHouse.
-
Создайте следующую таблицу
tripsв базе данныхdefault:
Добавьте датасет
Теперь, когда вы создали таблицу, добавьте данные о такси Нью-Йорка из CSV-файлов в S3.-
Следующая команда вставляет примерно 2 000 000 строк в таблицу
tripsиз двух разных файлов в S3:trips_1.tsv.gzиtrips_2.tsv.gz: -
Дождитесь завершения
INSERT. Загрузка 150 МБ данных может занять некоторое время. -
Когда вставка завершится, проверьте результат:
Этот запрос должен вернуть 1,999,657 строк.
Анализ данных
Выполните несколько запросов для анализа данных. Изучите приведённые ниже примеры или попробуйте собственный SQL-запрос.-
Рассчитайте средний размер чаевых:
Ожидаемый результат
-
Рассчитайте среднюю стоимость исходя из количества пассажиров:
Ожидаемый результат
Значения
passenger_countварьируются от 0 до 9: -
Рассчитайте ежедневное количество посадок по районам:
Ожидаемый вывод
-
Вычислите длительность каждой поездки в минутах, затем сгруппируйте результаты по этой длительности:
Ожидаемый результат
-
Покажите количество посадок в каждом районе с разбивкой по часам суток:
Ожидаемый результат
-
Найти поездки в аэропорты LaGuardia или JFK:
Ожидаемый результат
Создание словаря
Словарь — это отображение пар ключ-значение, хранящихся в памяти. Подробнее см. в разделе DictionariesСоздайте словарь, связанный с таблицей в вашем сервисе ClickHouse. Таблица и словарь основаны на CSV-файле, в котором каждая строка соответствует одному району Нью-Йорка.Районы сопоставлены с названиями пяти боро Нью-Йорка (Бронкс, Бруклин, Манхэттен, Куинс и Статен-Айленд), а также с аэропортом Ньюарк (EWR).Ниже приведён фрагмент используемого CSV-файла в табличном формате. СтолбецLocationID в файле соответствует столбцам pickup_nyct2010_gid и dropoff_nyct2010_gid в таблице trips:| LocationID | Боро | Зона | service_zone |
|---|---|---|---|
| 1 | EWR | Аэропорт Ньюарк | EWR |
| 2 | Куинс | залив Джамейка | Зона округа |
| 3 | Бронкс | Аллертон/Пелхэм-Гарденс | Зона округа |
| 4 | Манхэттен | Алфабет-Сити | Жёлтая зона |
| 5 | Статен-Айленд | Арден-Хайтс | Боро-зона |
- Выполните следующую 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.-
Убедитесь, что всё сработало. Следующий запрос должен вернуть 265 строк — по одной для каждого района:
-
Используйте функцию
dictGet(или её варианты) для получения значения из словаря. Нужно передать имя словаря, нужное значение и ключ (в нашем примере это столбецLocationIDсловаряtaxi_zone_dictionary). Например, следующий запрос возвращает значениеBoroughдляLocationID, равного 132, что соответствует аэропорту JFK):JFK находится в Куинсе. Обратите внимание: время получения значения практически равно 0: -
Используйте функцию
dictHas, чтобы проверить, есть ли ключ в словаре. Например, следующий запрос возвращает1(что в ClickHouse соответствует значению “true”): -
Следующий запрос возвращает 0, потому что 4567 не является значением
LocationIDв этом словаре: -
Используйте функцию
dictGet, чтобы получить название боро в запросе. Например:Этот запрос суммирует количество поездок на такси по каждому боро, которые заканчиваются либо в аэропорту LaGuardia, либо в аэропорту JFK. Результат выглядит следующим образом; обратите внимание, что довольно много поездок имеют неизвестный район посадки:
Выполните JOIN
Напишите несколько запросов, которые выполняют JOIN междуtaxi_zone_dictionary и таблицей trips.-
Начните с простого
JOIN, который работает аналогично предыдущему запросу по аэропортам:Результат выглядит так же, как и для запросаdictGet:
Обратите внимание: результат приведённого выше запроса
JOIN совпадает с результатом предыдущего запроса, использующего dictGetOrDefault (за исключением того, что значения Unknown в него не входят). За кулисами ClickHouse фактически вызывает функцию dictGet для словаря taxi_zone_dictionary, но синтаксис JOIN более привычен для SQL-разработчиков.- Этот запрос возвращает строки для 1000 поездок с самыми большими чаевыми, а затем выполняет внутренний JOIN каждой строки со словарём:
Как правило, в ClickHouse стараются не использовать
SELECT *. Следует выбирать только те столбцы, которые действительно нужны.Следующие шаги
- Введение в первичные индексы в ClickHouse: Узнайте, как ClickHouse использует разреженные первичные индексы, чтобы эффективно находить нужные данные при выполнении запросов.
- Подключение внешнего источника данных: Ознакомьтесь с вариантами интеграции источников данных, включая файлы, Kafka, PostgreSQL, конвейеры данных и многое другое.
- Визуализация данных в ClickHouse: Подключите к ClickHouse ваш любимый инструмент UI/BI.
- Справочник по SQL: Просмотрите SQL-функции, доступные в ClickHouse для преобразования, обработки и анализа данных.