Сегментация по внешним SQL-таблицам
Возможность подключения внешних SQL-баз данных позволяет более гибко подходить к сегментации профилей:
- Нет необходимости хранить все данные в Altcraft MP
- Соответственно, нет необходимости в регулярной синхронизации — данные всегда актуальны
- Можно использовать данные по сущностям, которые в Altcraft MP не предусмотрены
- Не зависит от платформы и системы, которую вы используете для хранения данных; необходим лишь доступ для выполнения SQL-запросов
Коннекторы для подключения к внешним базам создаются в панели администратора Altcraft.
Если вы пользуетесь облачным решением — передайте данные для подключения к базе данных нашей службе поддержки: support@altcraft.com. Там же можно уточнить по вопросам, связанным с возможностью подключения к другим внешним службам и БД.
Создание запроса к базе данных
Запросы можно конфигурировать как в панели администратора, так и в панели пользователя системы. Разница в том, что в панели пользователя вы сможете сразу просматривать профили, которые были выбраны вашим запросом.
Редактирование запросов в панели пользователя можно запретить настройкой конфигурации в main.json если это необходимо. Для этого нужно будет установить параметр "DISABLE_QUERY_EDITOR": true.
![]() | Запросы настраиваются в разделе Данные —> Запросы сегментации. Перейдите в раздел и нажмите кнопку + Создать. |
В основных настройках укажите имя запроса, короткое имя (уникально для каждого запроса, используется в переменных платформы и в API-запросах), срок кэширования результата, а также группу, теги и описание запроса:

Обратите внимание: срок кэширования результата работает только при расчете сегментов. В сценариях автоматизации используется отдельный механизм кэширования с собственными настройками.
Чтобы запрос сегментации работал правильно, он должен выбирать колонку с данными, которые уже есть в Altcraft MP. Например, если в Altcraft есть идентификатор клиента в базе профилей, то необходимо сформировать такой запрос, чтобы на выходе получился именно этот идентификатор, как минимум в одной из колонок:

Эти запросы будут использоваться внутри сегмента. Можно построить неограниченное количество таких запросов для уточнения сегмента. В каждом таком запросе вы можете выбирать по одному или нескольким параметрам, комбинируя запросы, создавая подзапросы, используя JOIN, UNION и т. д.
Обязательно выберите колонку, которая будет использоваться для поиска профилей, используйте кнопку обновить, чтобы получить новый список колонок по вашему запросу:

В запрос можно добавлять параметры, чтобы запрос изменялся уже при использовании внутри сегмента. Для этого используйте произвольное, но уникальное имя вашего параметра в фигурных скобках, например {CITY}:

Как только вы его укажете в запросе, появится форма с настройками параметра:

Здесь задается тип поля, его значение по умолчанию и заголовок, который будет отображен при создании сегмента.
Если мы хотим, чтобы в сегменте поле выбиралось из списка, мы используем настройку Задать опции. При ее включении выбираем, будем ли мы перечислять список опций или тоже выберем его из SQL:

При этом, если применяются идентификаторы, то SQL запрос должен возвращать две колонки, первая используется как идентификатор, а вторая будет отображаться пользователю:

В случае с заданным списком ид ентификатор и опции можно перечислить через запятую:

Для всех параметров конфигурируется порядок их отображения при построении сегмента. Порядок можно менять простым перетаскиванием элементов. Заголовки позиционируются отдельно, для более гибкого отображения.

Воспользуйтесь кнопкой предпросмотра выборки из базы данных, чтобы посмотреть, как форма запроса будет выглядеть в сегменте и как будет выглядеть тестовая выборка:

Укажите базу данных и поле профиля для выборки, а также колонку если их несколько. В разделе Параметры запроса сформируется форма в том виде, как она потом будет выглядеть в сегменте. Нажав кнопку Применить, вы запустите запрос и он сразу покажет те профили, которые удовлетворили условию запроса:

После сохранения з апроса его можно будет использовать в сегментах.
Типы переменных
При создании параметра запроса вы можете выбрать один из типов. От выбранного типа зависит, как значение подставляется в SQL-запрос.
Строка
Значение подставляется как текст.
SELECT email FROM users WHERE city = '{CITY}'

Например, нам н ужно найти профили из Москвы. При настройке сегмента указываем значение Москва в поле параметра {CITY}. Чтобы было понятнее, задаём заголовок параметра — например, "Город". В базу данных отправится запрос:
SELECT email FROM users WHERE city = 'Москва'
В результате в сегмент попадут профили, у которых в поле city указана Москва.
Целое число и Число с плавающей точкой
Значение подставляется как целое число, если тип переменной "целое число", или дробное число, если тип переменной "Число с плавающей точкой":
SELECT email FROM orders WHERE order_amount >= '{AMOUNT}'

Например, нам нужно найти профили с суммой заказа от 1500. При настройке сегмента указываем значение 1500 в поле параметра {AMOUNT}. Чтобы было понятнее, задаём заголовок параметра — например, "Минимальная сумма заказа". В базу данных отправится запрос:
SELECT email FROM orders WHERE order_amount >= 1500
В сегмент попадут профили с суммой заказа больше или равной указанной сумме.
Логическое
Значение подставляется как true (Истина), false (Ложь) или null (Не выбрано).
SELECT email FROM orders WHERE is_vip = {IS_VIP}

Например, нам нужно найти VIP-клиентов. При настройке сегмента выбираем значение Истина в поле параметра {IS_VIP}. Чтобы было понятнее, задаём заголовок параметра — например, "VIP клиент". В базу данных отправится запрос:
SELECT email FROM orders WHERE is_vip = true
В результате в сегмент попадут профили с VIP-статусом.
Массив
Используется для работы с колонками типа-массива в PostgreSQL. Значения подставляются как массив.
SELECT email FROM orders WHERE statuses && ARRAY[{status_list}]

Переменная {status_list} имеет тип "Массив", Тип элементов массива — "Строка". При настройке сегмента выбираем нужные значения.
Например, в таблице orders есть колонка statuses типа text[], которая содержит массивы статусов заказа. Нужно найти профили, у которых в массиве есть хотя бы один из статусов completed или pending. В сегменте выбираем оба значения. В базу данных отправится запрос:
SELECT email FROM orders WHERE statuses && ARRAY['completed', 'pending']
В результате в сегмент попадут профили, у которых в массиве statuses есть completed или pending.
Тип "Массив" работает только для PostgreSQL и требует, чтобы колонка во внешней таблице имела тип-массив (например, text[], integer[]). Для MySQL и ClickHouse использование этого типа не предусмотрено.
Чтобы сохранить запрос, необходимо задать хотя бы одно з начение по умолчанию для параметра.
Год
Используется для фильтрации по году из даты. В запрос подставляется год.
SELECT email FROM orders WHERE YEAR(order_date) = '{year}'

Переменная {year} имеет тип "Год". При настройке сегмента выбираем год.
Например, нужно найти профили, которые сделали заказ в 2025 году. В сегменте выбираем 2025. В базу данных отправится запрос:
SELECT email FROM orders WHERE YEAR(order_date) = 2025
В результате в сегмент попадут все профили с заказами в 2025 году.
Месяц
Используется для фильтрации по месяцу из даты. В запрос подставляется номер месяца.
SELECT email FROM orders WHERE MONTH(order_date) = '{month}'

Переменная {month} имеет тип "Месяц". При настройке сегмента выбираем месяц из выпадающего списка.
Например, нужно найти профили, которые сделали заказ в мае. В сегменте выбираем "Май". В базу данных отправится запрос:
SELECT email FROM orders WHERE MONTH(order_date) = 5
В результате в сегмент попадут профили с заказами в мае.
Неделя
Используется для фильтрации по дню недели. В запрос подставляется номер дня в нумерации платформы.
SELECT customer_email FROM customer_orders WHERE WEEKDAY(order_date) = '{weekday}'

Переменная {weekday} имеет тип "Неделя". При настройке сегмента выбираем день недели из выпадающего списка.
Соответствие дней недели и значений, которые подставляются в запрос:
| День недели | Значение |
|---|---|
| Воскресенье | 1 |
| Понедельник | 2 |
| Вторник | 3 |
| Среда | 4 |
| Четверг | 5 |
| Пятница | 6 |
| Суббота | 7 |
Например, нужно найти профили, которые сделали заказ во вторник. В сегменте выбираем "Вторник". В базу данных отправится запрос:
SELECT customer_email FROM customer_orders WHERE WEEKDAY(order_date) = 3
Если в вашей базе данных используется другая нумерация дней недели, преобразуйте значение с помощью оператора CASE. Например, в MySQL WEEKDAY() возвращает 0 для понедельника, 6 для воскресенья. Чтобы привести нумерацию платформы к нумерации MySQL, используйте следующую конструкцию:
SELECT customer_email FROM customer_orders
WHERE WEEKDAY(order_date) = CASE '{weekday}'
WHEN 1 THEN 6 -- воскресенье
WHEN 2 THEN 0 -- понедельник
WHEN 3 THEN 1 -- вторник
WHEN 4 THEN 2 -- среда
WHEN 5 THEN 3 -- четверг
WHEN 6 THEN 4 -- пятница
WHEN 7 THEN 5 -- суббота
END
Дата
Используется для фильтрации по датам. Значение подставляется в формате, который ожидает ваша база данных.
SELECT email FROM orders WHERE order_date >= '{date_from}'

Переменная {date_from} имеет тип "Дата". При настройке сегмента выбираем дату в календаре.
Например, нужно найти профили, которые сделали заказ после определённой даты. В сегменте выбираем дату, например 28.05.2024. В базу данных отправится запрос:
SELECT email FROM orders WHERE order_date >= '2024-05-28'
В результате в сегмент попадут профили с заказами от выбранной даты и позже.
Оператор сравнения
В запрос подставляется оператор сравнения. В запросе для переменной типа "Оператор сравнения" кавычки не ставятся.
SELECT email FROM orders WHERE order_amount {operator} '{MIN_AMOUNT}'

Переменная {operator} имеет тип "Оператор сравнения". При настройке сегмента позволяет выбрать оператор из выпадающего списка.
Доступные операторы:
| Оператор | Описание |
|---|---|
= | Равно |
> | Больше |
< | Меньше |
>= | Больше или равно |
<= | Меньше или равно |
<> | Не равно |
Например, нужно найти профили с суммой заказа больше 1000. В сегменте выбираем оператор >, указываем значение 1000. В базу данных отправится запрос:
SELECT email FROM orders WHERE order_amount > 1000
Логический оператор
При выборе этого типа переменной при настройке запроса сегментации пользователю будет предложено выбрать оператор из списка. Кавычки не ставятся.
SELECT email FROM orders WHERE status = '{STATUS}' {logical} city = '{CITY}'

Переменная {logical} имеет тип "Логический оператор". При настройке сегмента выб ираем оператор из выпадающего списка.
Доступные операторы:
| Оператор | Описание | Пример использования |
|---|---|---|
AND | Оба условия должны быть истинны | status = 'active' AND city = 'Moscow' |
OR | Хотя бы одно условие истинно | status = 'active' OR city = 'Moscow' |
NOT | Отрицание условия | NOT (status = 'active') |
IN | Значение входит в список | city IN ('Moscow', 'Kazan') |
NOT IN | Значение не входит в список | city NOT IN ('Moscow', 'Kazan') |
LIKE | Содержит | city LIKE '%Mos%' |
NOT LIKE | Не содержит | city NOT LIKE '%Mos%' |
BETWEEN | В диапазоне (включая границы) | amount BETWEEN 1000 AND 5000 |
NOT BETWEEN | Вне диапазона | amount NOT BETWEEN 1000 AND 5000 |
EXISTS | Существует | EXISTS (SELECT 1 FROM orders WHERE user_id = id) |
NOT EXISTS | Не существует | NOT EXISTS (SELECT 1 FROM orders WHERE user_id = id) |
ANY / SOME | Сравнение хотя бы с одним значением из подзапроса | amount > ANY (SELECT amount FROM orders) |
ALL | Сравнение со всеми значениями из подзапроса | amount > ALL (SELECT amount FROM orders) |
Например, нужно найти активных профилей из Москвы. В сегменте выбираем оператор AND, указываем город Москва. В базу данных отправится запрос:
SELECT email FROM orders WHERE status = 'active' AND city = 'Москва'
Все параметры, кроме "Оператор сравнения" и "Логический оператор", должны быть заключены в одинарные кавычки — '{ПАРАМЕТР}'. Операторы сравнения и логические операторы пишутся без кавычек.
Использование запроса к внешней базе в сегменте
Перейдите в раздел Данные — Сегменты. Создайте новый сегмент или откройте существующий для редактирования.
Добавьте новое правило и выберите поле-идентификатор или поле, по которому осуществляется поиск профиля запросом. Затем выберите один из вариантов:
- В таблице данных — если хотите включить всех, кто подойдет под данное условие.
- Не в таблице данных — если хотите включить всех, кто не подойдет под данное условие.
Затем выберите ваш запрос к таблице и заполните форму параметров запроса:

Условия в таблице данных/не в таблице данных можно неоднократно применять в сегменте, в том числе внутри групп, объединяя их по И (если каждое из условий должно выполняться) или по ИЛИ (если достаточно выполнения любого из условий).
После настройки сохраните сегмент.
