Заполнение базы данных ClickHouse данными из amoCRM в Yandex Cloud


В данном кейсе — рассмотрим пример заполнения базы данных ClickHouse на примере данных из amocrm. Когда сделка в amocrm будет уходит на успешный этап — будем заполнять базу данных ClickHouse

Что такое ClickHouse ?

ClickHouse — это колоночная система управления базами данных (СУБД), разработанная в «Яндекс» для очень быстрых аналитических запросов по большим объёмам данных.

Если упростить, то это что-то вроде “SQL-базы на стероидах” для аналитики, но с другим подходом к хранению и обработке данных.

Основная идея ClickHouse состоит в том, что Данные хранятся по колонкам, а не по строкам, как в обычных SQL-базах (MySQL, PostgreSQL).

Это значит, что если вам нужно посчитать среднее значение по одному столбцу в таблице с миллиардами строк, ClickHouse будет читать только этот столбец, а не всю строку целиком.

Где чаще всего применяется?

  • BI-системы
  • Веб-аналитика
  • Логирование и мониторинг
  • Машинное обучение

Например, если у вас есть таблица с 5 млрд. записей о посещениях сайта,
и вы хотите посчитать, сколько было уникальных пользователей за прошлый месяц:

  • PostgreSQL и MySQL будет читать всю таблицу или хотя бы нужный индекс, но всё равно прогонять много строк.
  • ClickHouse просто возьмёт один столбец user_id и нужные даты, обработает их параллельно и выдаст результат за секунды.

Yandex Cloud

В данном примере, все будет делаться в YandexCloud — это веб-интерфейс управления облачными сервисами Яндекса, и для ClickHouse там есть готовое управляемое решение под названием Yandex Managed Service for ClickHouse.

Если купить хост в YandexCloud

  • ClickHouse разворачивается в кластере за пару минут (не надо вручную ставить и настраивать).
  • Обновления и патчи накатываются автоматически.
  • Есть встроенный мониторинг (метрики, графики).
  • Можно легко масштабировать (добавлять узлы, реплики).
  • Хранение и бэкапы — автоматически в облаке.
  • Есть готовая защита (авторизация, SSL, VPC).
  • Можно работать прямо из браузера в SQL-редакторе консоли.

Настройка ClickHouse

Переходим в Managed Service for ClickHouse в меню Yandex Cloud в левом верхнем углу. На этой странице будут показаны наши кластеры, на которых будут располагаться хосты и сервер с будущей базой данных.

Создание кластера

Создаем новый кластер. Заполняем имя нашего кластера. В разделе Ресурсы нужно выбрать конфигурацию сервера. ClickHouse в плане ресурсов ведёт себя не так, как обычные SQL-базы, и выбор железа зависит от того, какие задачи нужно решить.

В данном случае — будет выбрана минимальная конфигурация,

Тип: burstable (неполная гарантия CPU) — подойдёт только для тестов, в продакшене лучше standard или cpu-optimized

Сетевые настройки

Также очень важная часть, здесь предстоит настроить группу безопасности. Передавать данные мы будем по защищенному HTTPS соединению, для этого создадим новую группу безопасности, в которой откроем порт 9440 для входящих соединений, иначе не сможем получить доступ к базе данных

Саму настройку выполним немного позже, после разворачивания хоста

Настройки СУБД

Далее — настраиваем доступы к СУБД

Здесь важно обратить внимание на параметр Управление пользователями через SQL. Ставим в положение Выключено, иначе  управление пользователями будет осуществляться с помощью SQL-запросов, а управление ими через консоль, CLI и API Yandex Cloud будет недоступно.

Пароль лучше сгенерировать и записать. Всегда генерируйте сложный пароль для большей безопасности для работы с базами данных

Сервисные настройки

Здесь нужно выбрать параметры доступа и создать сервисный аккаунт, от имени которого будут выполняться запросы в базу данных. В данном случае — роль будет admin

Остальные галочки оставляем для возможности управления базой данных из панели управления Yandex Cloud

После выставления всех настроек — нажимаем на кнопку Создать кластер

Настройка групп безопасности

После создания кластера — переходим в него и настраиваем группы безопасности

Создаем новое правило для входящего трафика

Для работы MoreKit требуется открытый порт 9440 для безопасного HTTPS-соединения

Здесь есть два варианта — менее безопасный и более безопасный

  • Менее безопасный — CIDR указываем 0.0.0.0/0 — это даст доступ к порту всем, у кого есть адрес сервера.
  • Более безопасный — перечислить адреса MoreKit в формате 123.45.67.89/32

IP Адреса MoreKit, с которых отправляются запросы:

185.93.111.16
185.41.163.246

Группа безопасности настроена

Включаем публичный доступ

Далее переходим в раздел Хосты и включаем публичный доступ, чтобы можно было получить доступ к базе из внешних источников

Создаем таблицу для для данных

Далее необходимо создать подключение в разделе WebSQL для подключения к базе данных из Yandex Cloud.

В разделе WebSQL создаем новое подключение, вводим данные ранее созданного пользователя и название базы для подключения

В панели слева — нажимаем на наше подключение. Если все сделано верно — вы увидите консоль SQL

Следующим шагом — создадим таблицу с помощью SQL запроса. Подробнее об SQL запросах читайте в официальной документации синтаксиса ClickHouse

CREATE TABLE amo
(
    lead_id        Int32,
    date_closed_at DateTime,
    contact_id     Int32,
    contact_phone  Int64,
    contact_email  String,
    contact_name   String
)
ENGINE = MergeTree
ORDER BY lead_id;

Пояснения по выбору типов:

  • Int32 — для lead_id , contact_id , данный тип поля лучше подходит для обычных ID, счётчиков, небольших чисел (экономит место).
  • Int64 — для contact_phone, если нужно хранить именно номер как число — тогда Int64 (до 18 цифр, занимает меньше места по сравнению с типом String).
  • String — в ClickHouse это текст любого размера (замена TEXT из обычного SQL).
  • DateTime — стандартный тип даты и времени.
  • ENGINE MergeTree — основной движок в ClickHouse для структурированных таблиц.
  • ORDER BY lead_id — ClickHouse требует ORDER BY при создании MergeTree-таблиц, обычно указывают первичный ключ или поле, по которому чаще фильтруют.

Нажимаем Выполнить, увидим созданную таблицу, если не допущено синтаксических ошибок

Таблица создана. Теперь подключим нашу базу данных в MoreKit, выстроим процесс и заполним базу данных !

Подключение сервиса ClickHouse

Переходим в список сервисов в MoreKit, ищем среди списка ClickHouse, нажимаем Добавить

Добавление ClickHouse в MoreKIT

Вводим данные для подключения

  • Хост — скопируйте FQDN хоста из панели ClickHouse
  • Порт — указываем 9440,который открывали в группе безопасности
  • Логин — логин созданного пользователя с доступом к БД
  • Пароль — пароль пользователя с доступом к БД
  • Название базы — название созданной базы (не таблицы)
Подключение базы данных в MoreKIT

Нажимаем Добавить

Подключение amoCRM

В MoreKit в разделе Сервисы — ищем в списке сервисов amoCRM, нажимаем на кнопку Добавить, произойдет перенаправление на страницу переадресации amoCRM, где необходимо выбрать нужную CRM, которую надо подключить в MoreKit

добавление amoCRM в MoreKIT
Выбор аккаунта amoCRM

Создание процесса

Отправка из amoCRM будет осуществляться по триггеру из воронки. Когда происходит закрытие сделки на успешный этап, запрос из амо будет уходить в MoreKit, где мы соберем нужные данные из контакта и сделки и отправим их в базу данных

Создаем процесс amoCRM DP

Создаем новый процесс с типом amoCRM DP

После создания процесса — копируем ссылку на вебхук из первоначального блока и идем устанавливать триггер в воронке AmoCrm

После установки веб-хука, осталось выстроить логическую схему передачи данных из амо в ClickHouse

Выстраивание схемы

Схема в MoreKit будет выглядеть следующим образом

Здесь мы берем данные из сдекли и контакта, который к ней привязан и выполняем операцию INSERT в нашу таблицу в ClickHouse с данными из сущностей amoCRM

Выстраиваем схему передачи данных

Описание блоков схемы

#1 Найти сделки — ищем сделку по ID из входящих данных для получения полных данных о сделке

Ищем контакт из найденной сделки

#2 Найти контакты — ищем контакт, который привязан к сделке

Очищаем номер телефона от лишних символов

#5 Регулярные выражения — очищаем номер телефона контакта от префиксов и лишних символов, оставляя только цифры

Заполнение таблицы данными из сделки и контакта

#3 INSERT — заполнение данных в таблицу. В каждом поле можно выбрать тип отправляемого поля. Для полей с типом Int32 и Int64 нужно поставить целое число

Тестируем процесс

Двинем сделку на успешный этап, процесс в MoreKit должен запуститься и выполниться

Проверим события

Проверяем результат

Проверяем результат

Сделаем полную выборку данных в WebSQL консоли в Yandex Cloud

SELECT * from amo;

Выполнив SELECT нашей таблицы, увидим, что данные успешно ушли, таблица начала заполняться

Подведем итоги

В рамках выполненных работ была настроена интеграция между amoCRM и ClickHouse, развернутым в Yandex Cloud
При переводе сделки в успешный этап данные по сделке и контакту автоматически передаются в базу данных ClickHouse с помощью MoreKit

  • Развернут кластер ClickHouse в Yandex Cloud
  • Настроена группа безопасности открыты необходимые CIDR-правила
  • Созданы база данных amoLEADS и таблица amo с необходимыми полями
  • Настроен процесс передачи данных в MoreKit
  • Проведено тестирование передачи и записи данных

В результате система обеспечивает:

  • автоматический сбор информации о закрытых сделках в amoCRM
  • централизованное хранение данных в ClickHouse
  • возможность быстрой аналитики и построения отчётов по всем завершённым сделкам