Перейти к основному содержимому
Altcraft Docs LogoAltcraft Docs Logo
Пользователям iconПользователям
Разработчикам iconРазработчикам
Администраторам iconАдминистраторам
Русский
  • Русский
  • English
Войти
    Документация пользователяС чего начатьFAQТермины
      Обновления платформыarrow
    • v2026.2.77v2026.1.76v2025.4.75v2025.4.74v2025.3.73v2025.2.72v2025.1.71v2024.4.70v2024.3.69v2024.2.68.2v2024.1.68
      Хранение и сбор данныхarrow
    • Ресурсы подписокРабота с базами данныхПрофиль подписчикаИмпорт профилей клиентов и обновление данныхЧастые ошибки при импорте профилейИмпорт данных по расписаниюУправление таблицами данныхАвтоматизация сбора данных о профилеМассовое обновление профилей клиентовDouble opt-in подпискаСтоп-спискиСвязи между профилямиЭкспорт истории профилейЭкспорт профилейАвтоматическое создание статического сегмента при импортеКак открыть CSV-файлМатчингТипы полей в базе данныхГлобальные контрольные группыМенеджер подписок
      Каналы коммуникацииarrow
      • Emailarrow
        • Рассылка с нуляarrow
        • Быстрый стартПервая Email-рассылка
        Рекомендации по взаимодействию с ISPНастройка собственного from-доменаНастройка и использование постмастеровКак работает email-трекинг
        Pusharrow
        • Mobile Pusharrow
        • Первая Mobile push-рассылкаНастройка и подключение
            Провайдеры Mobile Pusharrow
          • Firebase Cloud MessagingApple Push Notification ServiceHuawei Mobile ServicesRuStoreYandex.AppMetrica
            Интеграция приложения с Altcraftarrow
          • Обработка и добавление подпискиРегистрация событийПровайдеры: структура push-сообщения
          Web Pusharrow
        • Первая Web push-рассылкаНастройка ресурса и сайта
            Провайдеры Web Pusharrow
          • Firebase Cloud MessagingApple SafariMozilla Services
          Передача данных в платформуМетоды Web Push SDKPWA и Push-уведомления
            Миграция и перенос подписокarrow
          • Перенос push-подписок из стороннего сервисаПеренос push-подписок для SafariМиграция с OneSignal
        SMSarrow
      • Первая SMS-рассылка
        Telegramarrow
      • Telegram BotTelegram Group
        Maxarrow
      • MAX BotMAX Group
      Viber™WhatsAppNotifyСхема работы каналов коммуникацииРуководство: SMS-рассылка через VK NotifyРуководство: SMS-рассылка через УТШРуководство: push-рассылка через сервис от "Согласие"
      Сегментацияarrow
    • Статические сегментыДинамические сегментыОбновляемые сегменты
        Условия сегментацииarrow
      • Сегментация по данным профиляСегментация по взаимодействиям с сущностямиСегментация по активности в каналах коммуникации
          Сегментация по внешним даннымarrow
        • Сегментация по внешним даннымСегментация по внешним SQL-таблицамРекомендации по сегментации по внешним данным
        Сегментация по структуре профиля
      Лучшее время отправки (BST)Логические операторы "И" и "ИЛИ"Рекомендации по работе с сегментами
      Шаблоны сообщенийarrow
      • Работа с шаблонами сообщенийarrow
      • Работа в редактореEmail-шаблонSMS-шаблонPush-шаблонMAX-шаблонTelegram-шаблонWhatsApp-шаблонViber-шаблонNotify-шаблон
        Визуальный редактор для email-шаблонаarrow
      • Интерфейс редактораДобавление элементовЭлементы и их настройкиПользовательские блокиСтили элементаСтруктура элементов
      Блочный редактор для email-шаблонаФрагменты шаблоновИзображения в сообщенияхПерсонализация контента в сообщенияхФормирование таблиц на основе элементов массива
        Переменные и функции Altcraftarrow
      • Использование логических выражений в сообщенияхИспользование циклов в сообщенияхИспользование переменных маркета в сообщенияхИспользование функционала JSONPath
        Динамический контент сообщенийarrow
      • Использование API-контента в сообщенияхИспользование HTML-контента в сообщенияхИспользование JSON-контента в сообщенияхИспользование контента из SQL базы данных в сообщениях
      Импорт и экспорт шаблона сообщенияЭкспорт шаблона из PixcraftИмпорт шаблона из стороннего сервиса
      Рассылкиarrow
    • Броадкаст-рассылкаТриггерная рассылкаРегулярная рассылкаМультивариантный тест (A/B/n)РазмещенияРасписание рассылокТестирование расылокКалендарь рассылокУправление очередью сендера
      Кампанииarrow
    • Работа с КампаниямиЛокальные контрольные группы (ЛКГ)Ошибка нарушения стратификации при достижении лимитаРасширение аудитории в кампанииРазметка аудитории в кампаниях
      Сценарии автоматизацииarrow
    • Работа со Сценариями автоматизацииУзлы сценарияКлассические сценарии автоматизации маркетингаПриветственный сценарий: пошаговая настройкаАвтоматическое оповещение менеджера через сценарийСценарий брошенной корзиныОбработка циклов в сценариях автоматизации
      Маркетarrow
    • Настройки маркета
        Продуктыarrow
      • Создание продукта вручнуюИмпорт продукта из файлаИмпорт по расписаниюСегменты продуктов и SKUПодготовка YML-файла
      ЗаказыПеременные маркета в шаблонахРуководство: как отправить письмо подтверждения заказа
      Лояльностьarrow
    • Создание и настройка программы лояльностиИнтеграция лояльности с внешними системамиСоздание программы лояльности с нуляБазовые кейсы использования программы лояльностиСегменты заказовПромокоды
      Веб-слойarrow
      • Формыarrow
        • Создание формыarrow
        • Основные настройки формыКастомизация формы через дополнительный кодКонструктор формыОформление формыДействия и публикация формыУсловная постраничная логика в формах и опросах
        Аналитика данныхСвязывание данных канала и формыNPS-тестирование
        Пикселиarrow
      • Целевые действия клиентов и скоринг
        Попапыarrow
      • Создание и публикация попапаНастройка попапа в редакторе кодаУправление попапами вручную через скриптАналитика попаповРуководство: попап для подписки на pushБазовые кейсы размещения попапа через Менеджер теговКейс: Создание попапа с виджетом "Колесо фортуны"
        Менеджер теговarrow
      • Настройка и установка Менеджера теговТипы триггеровТипы переменныхСвязывание пикселя и Менеджера тегов
      Отчеты и аналитикаarrow
    • Отчет по каналамОтчёт по трафику
        Сводный отчётarrow
      • Все показатели сводного отчета
      Когортный отчётВремя жизниВоронка конверсииЦелиПрирост аудиторииКарта кликов (Email)Отчет по программам лояльностиОтчёт о возвратахОтчёт о недоставкахОтчет по глобальным контрольным группам
      Интеграцииarrow
    • Синхронизация статических сегментовMAXЯндекс.АудиторииАудитории Google AdsFacebook Ads ManagerОбласть видимости интеграцииWhatsAppViberTildaYandex AppMetricaLpgeneratorVK РекламаПередаваемые при синхронизации данные
        Интеграция сторонних сервисов с Altcraft через Albatoarrow
      • Подключение Altcraft к AlbatoЗапуск приветственного сценария через AlbatoПередача данных о событииОтправка триггерной рассылкиРегистрация событийИмпорт данных из Google Sheets через AlbatoПередача данных из Altcraft
      Notify
        Захват событийarrow
      • Захват событий AltcraftТипы событий для захватаСтруктуры сообщений захвата событийОтправить JSON-запрос батчемОтправить сообщение в очередь RabbitMQОтправить сообщение в exchange RabbitMQОтправить сообщение в Kafka brokerПредварительное тестирование события
      Настройкиarrow
    • Настройки аккаунтаНастройки атрибутовПоисковые теги: создание и применениеПользовательские ссылкиВиртуальные сендерыПолитики отправки
        Пользователи и разграничение доступаarrow
      • Двухфакторная аутентификация (2FA)
        Подключенияarrow
      • Подключение к Facebook AdsПодключение к Google AdsПодключение к Яндекс.Аудиториям™Подключение к 360dialogПодключение к EdnaПодключение к Devino TelecomПодключение к SMS TrafficПодключение к VK Рекламе™Подключение к MTS OmniChannelПодключение через OAuth2Подключение через Basic AuthenticationПодключение через Token AuthenticationПодключение через Custom AuthenticationПодключение к MAXПодключение к NotifyПодключение к Rapporto
      Журнал аудита
      API-запросы: с чего начатьarrow
    • Импорт и обновление профиляЗапуск триггерной рассылкиОтправка профиля клиента в сценарий
    Архив документацииБиблиотека email-маркетолога
  • Сегментация
  • Условия сегментации
  • Сегментация по внешним данным
  • Рекомендации по сегментации по внешним данным

Рекомендации по сегментации по внешним данным

Сегментация по внешним источникам данных — полезный инструмент, но при неправильной настройке она может стать причиной значительного замедления работы сегментов. Ниже собраны рекомендации, которые помогут избежать типичных проблем с производительностью.

Минимизация объёма данных​

Внешние источники данных следует проектировать так, чтобы они возвращали как можно меньше данных. Чем меньше записей платформа должна обработать, тем быстрее будет рассчитан сегмент.

Основные правила:

  • Возвращайте только колонку с идентификатором профиля, по которому происходит поиск. Дополнительные колонки не нужны и только увеличивают объём передаваемых данных.
  • По возможности добавляйте фильтрацию прямо в запрос или в URL API. Например, если вам нужны только активные клиенты, добавьте WHERE is_active = 1 в SQL-запрос. Это уменьшит объём данных, которые платформа получит от внешней базы, и ускорит расчёт сегмента.
  • Для HTTP-запросов к API — внешний сервис должен возвращать только список идентификаторов, а не полные объекты с дополнительными полями.
  • Для загружаемых файлов — файл должен содержать только нужную колонку с идентификаторами.
  • Используйте параметр кэширования результата при создании SQL-запроса сегментации. Если данные меняются редко, кэширование значительно ускорит повторные расчёты сегмента.

Объединение условий в одном SQL-запросе​

Когда вам нужно отфильтровать профили по нескольким условиям из одной внешней SQL-базы, лучше написать один запрос с объединёнными условиями, чем создавать несколько запросов и соединять их в сегменте через "И".

Каждый отдельный запрос сегментации — это отдельное обращение к внешней базе. Чем больше запросов, тем дольше расчёт сегмента.

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

Неэффективный вариант — два отдельных запроса сегментации:

  1. Запрос "Договоры": SELECT id FROM contracts WHERE status = 'active'
  2. Запрос "Регионы": SELECT id FROM customers WHERE region = 'Moscow'

Затем в сегменте эти два условия соединены через "И":

В таблице данных (запрос "Договоры")
И
В таблице данных (запрос "Регионы")

Платформа выполнит два отдельных запроса к базе, получит два списка идентификаторов и пересечёт их внутри себя.

Эффективный вариант — один запрос сегментации с объединёнными условиями:

SELECT customers.id
FROM contracts
JOIN customers ON customers.id = contracts.customer_id
WHERE contracts.status = 'active' AND customers.region = 'Moscow'

В сегменте — одно условие:

В таблице данных (запрос "Договоры и регионы")

Платформа выполнит один запрос, и пересечение произойдёт на стороне базы данных — это быстрее.

Рекомендации:

  • Если условия относятся к одной внешней базе — объединяйте их в один SQL-запрос с помощью JOIN, подзапросов или UNION.
  • Если условия относятся к разным базам — объединить их в один запрос невозможно, и платформа выполнит их последовательно. В этом случае постарайтесь, чтобы каждый запрос возвращал как можно меньше записей.
  • Используйте параметры запросов, чтобы сделать один универсальный запрос вместо нескольких похожих. Например, один запрос с параметром {REGION} лучше, чем отдельные запросы для каждого региона.
  • Старайтесь, чтобы все запросы в сегменте обращались к одному полю профиля (например, customer_id). Платформа может автоматически объединять запросы только если они привязаны к одному и тому же полю профиля и используют один коннектор.

Автоматическое объединение запросов​

В платформе реализована оптимизация, которая позволяет объединять несколько запросов сегментации к одной внешней базе в единый SQL-запрос. Вместо того чтобы выполнять каждый запрос отдельно, выгружать результаты и пересекать их внутри платформы, платформа формирует один запрос с операциями INTERSECT (пересечение), UNION (объединение) или EXCEPT (исключение) — и выполняет его на стороне внешней базы.

Как это работает. Если в сегменте есть несколько условий "В таблице данных", которые обращаются к одному коннектору и привязаны к одному и тому же полю профиля, платформа может объединить их:

В таблице данных (запрос "Договоры")
И
В таблице данных (запрос "Регионы")

Вместо двух отдельных запросов платформа сформирует один:

(SELECT id FROM query1) INTERSECT (SELECT id FROM query2)

Если одно из условий — "Не в таблице данных", платформа использует EXCEPT:

(SELECT id FROM query1) EXCEPT (SELECT id FROM query2)
к сведению

Оптимизация включается администратором платформы (параметр SEGMENT_SQL_DATA_GROUP_OPTIMIZATION). Подробнее в документации администратора.

Ограничения:

  • Объединяются только запросы одного коннектора и одного поля профиля.
  • Если между запросами есть другие условия сегмента (не по внешней базе), объединение может не сработать. Например, конструкция вида Запрос И (Запрос ИЛИ Условие) не может быть объединена, потому что не-запросное условие "разрывает" группу.

Раскрытие сегмента в сегменте​

Если в условии сегмента используется другой сегмент (оператор "В сегменте"), платформа может раскрыть вложенный сегмент и включить его запросы к внешней базе в общую группировку для объединения.

Пример. Сегмент "VIP" содержит условие В таблице данных (запрос "VIP"). Родительский сегмент содержит:

В таблице данных (запрос "Активные клиенты")
И
В сегменте (сегмент "VIP")

Без раскрытия платформа выполнит запрос "Активные клиенты" отдельно, рассчитает сегмент "VIP" отдельно и пересечёт результаты.

С раскрытием платформа "увидит" запрос "VIP" из вложенного сегмента и объединит оба запроса в один SQL-запрос с INTERSECT.

Чтобы раскрытие сработало, должны выполняться все условия:

  • Используется оператор "В сегменте". При использовании "Не в сегменте" стандартное раскрытие не сработает (см. Раскрытие "Не в сегменте").
  • Раскрытие работает только для динамических или обновляемых сегментов, так как они хранят условия сегментации. Для статических сегментов раскрытие не применяется — они содержат только готовый список профилей.
  • Запросы вложенного и родительского сегмента обращаются к одному коннектору и привязаны к одному полю профиля.
  • Операторы групп условий совпадают — если родитель использует "И", вложенный тоже должен использовать "И" (аналогично для "ИЛИ").
к сведению

Раскрытие сегмента в сегменте включается администратором платформы (параметры SEGMENT_SQL_SIS_EXPANSION, SEGMENT_SQL_SIS_MAX_DEPTH). Подробнее в документации администратора.

Раскрытие "Не в сегменте"​

Для условий с оператором "Не в сегменте" реализована отдельная оптимизация. Она позволяет раскрыть вложенный сегмент и преобразовать отрицание: каждый оператор внутри вложенного сегмента заменяется на противоположный ("равно" → "не равно", "содержит" → "не содержит", "больше" → "меньше или равно" и так далее), после чего запросы можно объединить с родительским сегментом.

Чтобы раскрытие сработало, должны выполняться все условия:

  • Условие использует оператор "Не в сегменте".
  • Вложенный сегмент не является статическим — динамический или обновляемый.
  • Запросы вложенного и родительского сегмента обращаются к одному коннектору и привязаны к одному полю профиля.
  • Все операторы во вложенном сегменте имеют пару-инверсию (например, "равно" ↔ "не равно", "содержит" ↔ "не содержит"). Если хотя бы один оператор не имеет пары — раскрытие не сработает.
Операторы без инверсии

Статус подписки: "Отписан", "Hardbounced", "Жалобщик", "Не валиден", "Приостановлен", "Не подтверждён", "Не существует".

Сценарии автоматизации: "хотя бы раз был", "никогда не был", "сейчас в сценарии", "сейчас не в сценарии", "вышел с ошибкой".

Формы: "заполнял", "не заполнял", "заполнял за выбранный период", "заполнял за последние [x] дней относительно текущей даты".

Даты: "тот же что и сегодня".

Активность в каналах: "Как минимум [n] раз", "Ни одного раза".

Кампании и ЛКГ: "не в ЛКГ".

Лояльность и заказы: "в диапазоне".

Связи: "Наличие / отсутствие прямой связи", "Наличие / отсутствие обратной связи".

к сведению

Раскрытие "Не в сегменте" включается администратором платформы (параметры SEGMENT_SQL_SIS_NOT_EXPANSION, SEGMENT_GROUP_EXPANSION). Подробнее в документации администратора.

Условия с "НЕ" по внешним витринам​

Условия сегментации по внешним витринам данных с оператором "НЕ" (например, "Не в таблице данных") приводят к сканированию всей базы профилей. Это происходит потому, что системе необходимо проверить каждый профиль на отсутствие во внешней выборке.

Рекомендации:

  • Сведите количество условий с "НЕ" по внешним данным к минимуму.
  • По возможности заменяйте отрицательные условия на позитивные. Например, вместо "Не в таблице данных" используйте "В таблице данных" с инвертированным запросом на стороне внешней базы.
  • Если условие с "НЕ" необходимо, убедитесь, что внешняя витрина возвращает максимально компактный результат.

Подробнее об операторе "НЕ" в сегментах читайте в статье Рекомендации по работе с сегментами.

Последнее обновление 31 июл. 2026 г.
Предыдущая страница
Сегментация по внешним SQL-таблицам
Следующая страница
Сегментация по структуре профиля
  • Минимизация объёма данных
  • Объединение условий в одном SQL-запросе
  • Автоматическое объединение запросов
    • Раскрытие сегмента в сегменте
    • Раскрытие "Не в сегменте"
  • Условия с "НЕ" по внешним витринам
© 2015 - 2026 Altcraft. Все права защищены.