Обзор
Это руководство следует [руководству по ClickHouse], но все запросы в нем выполняются через pg_clickhouse. Выберите способ настройкиpg_clickhouse:
- Из консоли, если вы используете ClickHouse Managed Postgres.
- Из PSQL, если вы самостоятельно устанавливаете и настраиваете расширение.
Запустите ClickHouse
Сначала создайте базу данных ClickHouse, если у вас её ещё нет. Быстро начать можно с Docker-образа:Создайте таблицу
Давайте воспользуемся [руководством по ClickHouse], чтобы создать простую базу данных с набором данных о такси в Нью-Йорке:Добавьте набор данных
Затем импортируйте данные:Через консоль
Если вы используете ClickHouse Managed Postgres, вы можете настроитьpg_clickhouse и подключиться к сервису ClickHouse через консоль ClickHouse Cloud.
Откройте сервис Managed Postgres, выберите Настройки и найдите раздел
ClickHouse integration. Нажмите Включить pg_clickhouse.
В форме настройки укажите имя внешнего сервера. Выберите сервис ClickHouse,
базу данных и пользователя для подключения. Введите пароль ClickHouse, затем
выберите базу данных Postgres и целевую схему, в которую нужно импортировать
таблицы ClickHouse. Нажмите Подключить, чтобы создать внешний сервер и
импортировать схему.
После завершения настройки консоль отобразит подтверждение, а внешний сервер
появится в списке серверов.
Теперь вы можете открыть SQL консоль Postgres и выполнять запросы к импортированным таблицам:
taxi
и импортируйте её в целевую схему taxi.
Из PSQL
Установите pg_clickhouse
Соберите и установите pg_clickhouse из PGXN или GitHub. Либо запустите Docker-контейнер с [образом pg_clickhouse], который просто добавляет pg_clickhouse в Docker-[образ Postgres]:Подключение pg_clickhouse
Теперь подключитесь к Postgres:Если вы используете консоль ClickHouse Cloud для выполнения SQL, предоставьте пользователю-администратору консоли доступ к внешнему серверу:
password.
Теперь добавьте таблицу taxi — просто импортируйте все таблицы из удалённой
базы данных ClickHouse в схему Postgres:
\det+, чтобы её увидеть:
\d, чтобы вывести все столбцы:
COUNT(), в ClickHouse, поэтому в
Postgres возвращается только одна строка. Чтобы убедиться в этом, используйте EXPLAIN:
Проанализируйте данные
Выполните несколько запросов, чтобы проанализировать данные. Ознакомьтесь со следующими примерами или попробуйте собственный SQL-запрос.-
Рассчитайте среднюю сумму чаевых:
-
Рассчитайте среднюю стоимость в зависимости от количества пассажиров:
-
Рассчитайте ежедневное число посадок по районам:
-
Вычислите длительность каждой поездки в минутах, затем сгруппируйте результаты по
длительности поездок:
-
Покажите число посадок в каждом районе с разбивкой по часам суток:
-
Установите часовой пояс отображения для Нью-Йорка и получите данные о поездках в аэропорты
Ла-Гуардия или JFK:
Создайте словарь
Создайте словарь, связанный с таблицей в вашем сервисе ClickHouse. Таблица и словарь основаны на CSV-файле, который содержит по одной строке для каждого района Нью-Йорка. Эти районы сопоставлены с названиями пяти боро Нью-Йорка (Bronx, Brooklyn, Manhattan, Queens и Staten Island), а также с аэропортом Newark Airport (EWR). Ниже приведён фрагмент используемого CSV-файла в табличном формате. СтолбецLocationID в файле сопоставляется со столбцами pickup_nyct2010_gid и
dropoff_nyct2010_gid в таблице поездок:
-
По-прежнему в Postgres используйте функцию
clickhouse_raw_query, чтобы создать в ClickHouse [словарь] с именемtaxi_zone_dictionaryи заполнить его данными из CSV-файла в S3:ЗначениеLIFETIME, равное 0, отключает автоматические обновления, чтобы избежать лишнего трафика к нашему S3 бакету. В других случаях вы можете настроить его иначе. Подробнее см. в разделе Обновление данных словаря с помощью LIFETIME.- Теперь импортируйте его:
- Убедитесь, что запрос к нему выполняется:
- Отлично. Теперь используйте функцию
dictGet, чтобы получить название боро в запросе. Этот запрос суммирует количество поездок на такси по каждому боро, которые заканчиваются либо в аэропорту LaGuardia, либо в JFK:
Этот запрос подсчитывает количество поездок на такси по каждому боро, которые заканчиваются в аэропорту Ла-Гуардия или JFK. Обратите внимание, что довольно много поездок, в которых район посадки неизвестен.
Выполните JOIN
Напишите несколько запросов, объединяющихtaxi_zone_dictionary с таблицей
trips.
-
Начните с простого
JOIN, который работает аналогично предыдущему запросу по аэропортам:Обратите внимание: результат приведённого выше запросаJOINсовпадает с результатом запросаdictGetвыше (за исключением того, что значенияUnknownв него не входят). Фактически ClickHouse вызывает функциюdictGetдля словаряtaxi_zone_dictionary, но синтаксисJOINболее привычен для SQL-разработчиков. -
Этот запрос возвращает строки для 1000 поездок с самыми большими
чаевыми, а затем выполняет JOIN каждой строки со словарём:
Как правило, мы избегаем использования
SELECT * в PostgreSQL и ClickHouse. Вам
следует извлекать только те столбцы, которые действительно нужны.