Обзор
Запустите ClickHouse
Создание таблицы
Добавьте набор данных
Установите pg_clickhouse
Подключение pg_clickhouse
password.
Теперь добавьте таблицу taxi, просто импортировав все таблицы из удалённой базы данных ClickHouse в схему Postgres:
\det+, чтобы увидеть её:
\d, чтобы вывести все столбцы:
COUNT(), в ClickHouse, поэтому в
Postgres возвращается только одна строка. Чтобы убедиться в этом, используйте EXPLAIN:
Анализ данных
-
Рассчитайте среднюю сумму чаевых:
-
Рассчитайте среднюю стоимость в зависимости от количества пассажиров:
-
Рассчитайте ежедневное число посадок в каждом районе:
-
Вычислите длительность каждой поездки в минутах, затем сгруппируйте результаты по
длительности поездок:
-
Покажите количество посадок в каждом районе с разбивкой по часам:
-
Установите часовой пояс отображения для Нью-Йорка и выведите поездки в аэропорты
Ла-Гуардия или JFK:
Создание словаря
LocationID в файле соответствует столбцам pickup_nyct2010_gid и
dropoff_nyct2010_gid в таблице поездок:
| LocationID | Borough | Zone | service_zone |
|---|---|---|---|
| 1 | EWR | Newark Airport | EWR |
| 2 | Queens | Jamaica Bay | Boro Zone |
| 3 | Bronx | Allerton/Pelham Gardens | Boro Zone |
| 4 | Manhattan | Alphabet City | Yellow Zone |
| 5 | Staten Island | Arden Heights | Boro Zone |
-
Всё ещё в Postgres используйте функцию
clickhouse_raw_query, чтобы создать [словарь] ClickHouse с именемtaxi_zone_dictionaryи заполнить его данными из CSV-файла в S3:
Значение
LIFETIME, равное 0, отключает автоматические обновления, чтобы избежать лишнего
трафика к нашему S3 бакету. В других случаях его можно настроить
иначе. Подробнее см. в разделе Обновление данных словаря с помощью
LIFETIME.- Теперь импортируйте его:
- Убедитесь, что к ней можно выполнить запрос:
- Отлично. Теперь используйте функцию
dictGet, чтобы получить название боро в запросе. Этот запрос суммирует количество поездок на такси по каждому боро, которые заканчиваются либо в аэропорту LaGuardia, либо в JFK:
Выполните JOIN
taxi_zone_dictionary объединяется с
таблицей trips с помощью JOIN.
-
Начните с простого
JOIN, который работает аналогично предыдущему запросу для аэропорта:
Обратите внимание: результат приведённого выше запроса с
JOIN совпадает с
результатом запроса dictGet выше (за исключением того, что значения Unknown
не включены). Внутри ClickHouse фактически вызывает функцию dictGet для
словаря taxi_zone_dictionary, но синтаксис JOIN более привычен для
SQL-разработчиков.-
Этот запрос возвращает строки для 1000 поездок с самыми большими
чаевыми, а затем выполняет INNER JOIN каждой строки со словарём:
Как правило, мы избегаем использования
SELECT * в PostgreSQL и ClickHouse. Вам
следует извлекать только те столбцы, которые действительно нужны.