Подключение к Yandex Managed Service for Clickhouse

data engineering
OLAP
инфраструктура
Author

i2z1@ddslab.ru

Published

March 15, 2024

Скорость прототипирование своих идей – залог конкуретного преимущества. Как этого можно добиться? Использовать облачные технологии!

Часто для быстрого решения задач анализа данных, проверки своих инсайтов, а также прототипирования требуется какое-либо хранилище данных. В его роли обычно выступает система управления базами данных (СУБД) или файловое хранилище (файловая система или, например S3-хранилище).

Быстро его развернуть и обогнать конкурентов (или выполнить лабу в срок) – залог будущего успеха.

Вариант – поднять в пару кликов на Yandex Managed Service for Clickhouse и заплатить вполне вменяемые деньгию – Вы же не будете его гонять целый месяц, не так ли? Хотя, возможно, у всех разный график прототипирования пет-проектов.

Здесь я расскажу варианты как подружить Clickhouse с языком программирования R.

Подключение с помощью clickhouse-client

Подключение к кластеру, в целом, выполняется по официальной инструкции от Yandex Cloud с некоторыми изменениями.

Официальная инструкция настаивает на установке корневого сертификата от Yandex Cloud в общее хранилище. Я не очень люблю и не рекомендую ставить лишнего в центральное хранилище без серьезных на то оснований. Сертификат можно положить отдельно, поменяв ссылку на него в конфиге.

  1. Устанавливаем clickhouse-client на нашу операционную систему
  2. Скачиваем сертификат Яндекса https://storage.yandexcloud.net/cloud-certs/RootCA.pem и кладем в какую-нибудь папку. Документация переименовывает файл pem в crt, но вообще можно и не переименовывать. У меня работает и так.
  3. Создаем папку ~/.clickhouse-client/
  4. Скачиваем образец конфигурационного файла
wget "https://storage.yandexcloud.net/doc-files/clickhouse-client.conf.example" \
  --output-document ~/.clickhouse-client/config.xml
  1. Меняем путь к нашему сертификату в строке <caConfig> и сохраняем:
<caConfig>/home/user/clickhouse_cert/RootCA.pem</caConfig>
  1. Подключаемся к кластеру:
clickhouse-client --host h43f338h4532.mdb.yandexcloud.net \
                  --secure \
                  --user user1c3 \
                  --database db1 \
                  --port 9440 \
                  --ask-password
Активация доступа из интернета

По-умолчанию, доступ к Yandex Managed Service for Clickhouse из интернета закрыт, кроме сервисов Яндекс Облака.

Для обеспечения доступа в Консоли управления Yandex Cloud заходим в настройки нашего Clickhouse кластера, выбираем Хосты – хост нашего кластера – 3 точки справа – Редактировать – ставим галочку Публичный доступ.

VSCode c помощью SQLTools

В Visual Studio Code есть очень удобный графический интерфейс для работы с различными СУБД. Для этого необходимо поставить дополнения SQLTools и SQLTools ClickHouse Driver.

  1. Создаем новое подключение в VSCode

  1. Заполняем поля:

Обратите внимание на порт – 8443

  1. Подключаемся!

Clickhouse и R

В большинстве случаев для использования Clickhouse из R существует пакет RClickhouse. Однако, доступ к Yandex Managed Service for Clickhouse организован через 8443 – защищенный HTTP интерфейс.

Для этого существует альтернативный пакет – ClickHouseHTTP. Ставится он как с Github, так и с CRAN

install.packages("ClickHouseHTTP")

Подключаемся

library(ClickHouseHTTP)

## HTTP connection
con <- dbConnect(
   ClickHouseHTTP::ClickHouseHTTP(), 
   host="somehostaddress.mdb.yandexcloud.net",
                      port=8443,
                      user="someuser",
                      password = "somepassword",
                      db = "db1",
   https=TRUE, ssl_verifypeer=FALSE)

Тестируем: для этого загрузим в подключенную базу данных наши данные, затем их прочитаем.

Загружаем данные в базу данных

library(dplyr)
data("mtcars")
mtcars <- as_tibble(mtcars, rownames="car")
dbWriteTable(con, "mtcars", mtcars)

Считываем данные из базы данных

carsFromDB <- dbReadTable(con, "mtcars")
testdf <- dbGetQuery(con, "SELECT car, mpg, cyl, hp FROM mtcars WHERE hp>=110")

В testdf доолжны появиться данные.

Теперь у нас в арсенале 3 различных метода работы с данными внутри Clickhouse – а конкретнее Yandex Managed Service for Clickhouse.

Успехов в Ваших экспериментах!