install.packages("ClickHouseHTTP")
Скорость прототипирование своих идей – залог конкуретного преимущества. Как этого можно добиться? Использовать облачные технологии!
Часто для быстрого решения задач анализа данных, проверки своих инсайтов, а также прототипирования требуется какое-либо хранилище данных. В его роли обычно выступает система управления базами данных (СУБД) или файловое хранилище (файловая система или, например S3-хранилище).
Быстро его развернуть и обогнать конкурентов (или выполнить лабу в срок) – залог будущего успеха.
Вариант – поднять в пару кликов на Yandex Managed Service for Clickhouse и заплатить вполне вменяемые деньгию – Вы же не будете его гонять целый месяц, не так ли? Хотя, возможно, у всех разный график прототипирования пет-проектов.
Здесь я расскажу варианты как подружить Clickhouse с языком программирования R.
Подключение с помощью clickhouse-client
Подключение к кластеру, в целом, выполняется по официальной инструкции от Yandex Cloud с некоторыми изменениями.
Официальная инструкция настаивает на установке корневого сертификата от Yandex Cloud в общее хранилище. Я не очень люблю и не рекомендую ставить лишнего в центральное хранилище без серьезных на то оснований. Сертификат можно положить отдельно, поменяв ссылку на него в конфиге.
- Устанавливаем clickhouse-client на нашу операционную систему
- Скачиваем сертификат Яндекса https://storage.yandexcloud.net/cloud-certs/RootCA.pem и кладем в какую-нибудь папку. Документация переименовывает файл pem в crt, но вообще можно и не переименовывать. У меня работает и так.
- Создаем папку ~/.clickhouse-client/
- Скачиваем образец конфигурационного файла
wget "https://storage.yandexcloud.net/doc-files/clickhouse-client.conf.example" \
--output-document ~/.clickhouse-client/config.xml
- Меняем путь к нашему сертификату в строке
<caConfig>
и сохраняем:
<caConfig>/home/user/clickhouse_cert/RootCA.pem</caConfig>
- Подключаемся к кластеру:
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.
- Создаем новое подключение в VSCode
- Заполняем поля:
Обратите внимание на порт – 8443
- Подключаемся!
Clickhouse и R
В большинстве случаев для использования Clickhouse из R существует пакет RClickhouse. Однако, доступ к Yandex Managed Service for Clickhouse организован через 8443 – защищенный HTTP интерфейс.
Для этого существует альтернативный пакет – ClickHouseHTTP. Ставится он как с Github, так и с CRAN
Подключаемся
library(ClickHouseHTTP)
## HTTP connection
<- dbConnect(
con ::ClickHouseHTTP(),
ClickHouseHTTPhost="somehostaddress.mdb.yandexcloud.net",
port=8443,
user="someuser",
password = "somepassword",
db = "db1",
https=TRUE, ssl_verifypeer=FALSE)
Тестируем: для этого загрузим в подключенную базу данных наши данные, затем их прочитаем.
Загружаем данные в базу данных
library(dplyr)
data("mtcars")
<- as_tibble(mtcars, rownames="car")
mtcars dbWriteTable(con, "mtcars", mtcars)
Считываем данные из базы данных
<- dbReadTable(con, "mtcars")
carsFromDB <- dbGetQuery(con, "SELECT car, mpg, cyl, hp FROM mtcars WHERE hp>=110") testdf
В testdf доолжны появиться данные.
Теперь у нас в арсенале 3 различных метода работы с данными внутри Clickhouse – а конкретнее Yandex Managed Service for Clickhouse.
Успехов в Ваших экспериментах!