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