Перейти к основному содержимому
Altcraft Docs LogoAltcraft Docs Logo
Пользователям iconПользователям
Разработчикам iconРазработчикам
Администраторам iconАдминистраторам
Русский
  • Русский
  • English
Войти
    Документация пользователяС чего начатьFAQТермины
      Обновления платформыarrow
    • v2026.3.79v2026.3.78v2026.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
          Интеграция приложения с Altcraft
            Устаревшее: ручная настройка Pusharrow
          • Устаревшее: настройка и подключениеОбработка и добавление подпискиРегистрация событийПровайдеры: структура push-сообщения
          Web Pusharrow
        • Первая Web push-рассылкаНастройка ресурса и сайта
            Провайдеры Web Pusharrow
          • Firebase Cloud MessagingApple SafariMozilla Services
          Передача данных в платформуМетоды Web Push SDKPWA и Push-уведомления
            Миграция и перенос подписокarrow
          • Перенос push-подписок из стороннего сервисаПеренос push-подписок для SafariМиграция с OneSignal
        Деактивация push-токенов
        SMSarrow
      • Первая SMS-рассылка
        In-Apparrow
      • Первое размещение для In-AppНастройка и подключение SDK
        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-шаблонШаблон для In-AppMAX-шаблон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
    • Facebook Ads Manager
        Yandexarrow
      • Yandex AppMetricaЯндекс.Аудитории
      Аудитории Google AdsWhatsAppСинхронизация статических сегментовViberVK РекламаNotifyMAX
        Захват событийarrow
      • LpgeneratorTildaЗахват событий AltcraftТипы событий для захватаСтруктуры сообщений захвата событийОтправить JSON-запрос батчемОтправить сообщение в очередь RabbitMQОтправить сообщение в exchange RabbitMQОтправить сообщение в Kafka brokerПредварительное тестирование события
        Интеграция сторонних сервисов с Altcraft через Albatoarrow
      • Подключение Altcraft к AlbatoЗапуск приветственного сценария через AlbatoПередача данных о событииОтправка триггерной рассылкиРегистрация событийИмпорт данных из Google Sheets через AlbatoПередача данных из Altcraft
        Дополнительная информацияarrow
      • Область видимости интеграцииПередаваемые при синхронизации данные
      Настройки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). Подробнее в документации администратора.

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

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

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

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

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

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