Accelera Segments Oracle ETL
Обзор
Accelera Segments Oracle ETL – это интеграционный модуль, предназначенный для получения данных (например: построенный сегмент / промежуточная выборка / сформированный реестр для передачи в каналы, работающие по пакетной логике и тд.) из модуля Accelera Segments с последующим преобразованием в настраиваемую реляционную схему Oracle, и настройки передачи полученных результирующих таблиц в стороннюю систему / канал / базу данных.
Моделирование сегмента
Ниже представлен пример моделирования сегмента с вызовом модуля Accelera Segments Oracle ETL на примере формирования реестра для передачи в канал Email. На схеме вызов модуля происходит в последних блоках действий, которые получают наименование временной таблицы после выполнения блока фильтрации, и позволяют пользователю задать дополнительные атрибуты действия.

Задание дополнительных атрибутов действий выполняется с помощью модального окна, представленного ниже. В примере используются следующие настройки модуля:
Campaign type (Тип кампании)
Campaign goal (Цель кампании)
Business line (Бизнес-линия сегмента)
Segment code (Сегмент)
Segment business line (Бизнес-линия продукта)
Offered product (Предлагаемый продукт)
Provider (Провайдер)
Template ID (Шаблон сообщения)
Channel (Канал)

Модель данных
Настройка сущностей
Ниже представлено описание необходимых сущностей интеграционного модуля. Все сущности интеграционного механизма модуля Accelera Segments по умолчанию создаются в схеме ACCELERA. Сущности не оптимизированы. Задача оптимизации с точки зрения хранения данных и повышения производительности запросов реализуется на стороне Клиента.
Диаграмма связей сущностей

ACCELERA_OUTPUT_SEGMENTS_REGISTRY
Реестр выгружаемых на отправку в каналы сегментов. Физически в базе данных каждый сегмент представлен в виде таблицы с уникальным именем. Таблица может быть расширена дополнительными параметрами, которые могут быть заданы пользователем на уровне интерфейса в случае разработки кастомного действия (Accelera action с использованием Accelera SDK).
| Название поля | Тип данных | Описание |
|---|---|---|
| REQUEST_ID | VARCHAR2(255) | Уникальный идентификатор записи, генерируется триггером до вставки или обновления записи. |
| SEG_OUT_TBL | VARCHAR2(255) | Название таблицы, содержащей сегмент. Генерируется в Segments и передается как параметр. |
| SEG_ID | VARCHAR2(255) | Уникальный идентификатор сценария сегментации. Генерируется в Segments и передается как параметр. |
| SEG_TRACKING_CODE | NUMBER | Уникальный идентификатор сегмента. Генерируется интеграционным механизмом. |
| SEG_STATUS | VARCHAR2(255) | Информация о состоянии сегмента. Генерируется интеграционным механизмом. Не является статусной моделью. |
| SEG_VOLUME | NUMBER | Объем сегмента (кол-во уникальных субъектов сегментации). Рассчитывается интеграционным механизмом. |
| SEG_CG_TRACKING_CODE | NUMBER | Уникальный идентификатор контрольной группы сегмента. Генерируется интеграционным механизмом в случае наличия признака контрольной группы в сегменте. |
| SEG_CG_VOLUME | NUMBER | Объем контрольной группы сегмента (кол-во уникальных субъектов сегментации контрольной группы). Рассчитывается интеграционным механизмом в случае наличия признака контрольной группы в сегменте. |
| SEG_RUN_TYPE | NUMBER | Тип действий, которые нужно применить к сегменту. Для проверки, обработки и загрузки сегмента в интеграционные таблицы каналов используется значение 1. Значения 2 и 3 зарезервированы на будущее и в данный момент используются в целях тестирования выгрузки. Передается как параметр. |
| SEG_SUBJECT | VARCHAR2(255) | Субъект сегментации (название ключевой бизнес-сущности, относительно которой строится сегмент). Субъект сегментации задается в глобальной параметрической таблице ACCELERA_SEGMENTS_GLOBAL_PARAMS. Если заданный субъект найден в сегменте, то после проверок он будет записан в это поле интеграционным механизмом. |
| SEG_PLACEHOLDERS | VARCHAR2(2000) | В таблице сегмента список имен полей, разделенных символом ',' (например, name, lastname, city и т. д.), значения которых будут подставлены в текст шаблона сообщения. Передается как параметр. |
| CHANNEL_CODE | VARCHAR2(255) | Код, идентифицирующий канал.. Передается как параметр. |
| CREATED_BY | VARCHAR2(255) | Пользователь, создавший запись. Генерируется триггером до вставки или обновления записи. |
| CREATED_ON | TIMESTAMP WITH LOCAL TIME ZONE | Время создания записи. Генерируется триггером до вставки или обновления записи. |
| LAST_UPDATED_BY | VARCHAR2(255) | Пользователь, обновивший запись. Генерируется триггером до вставки или обновления записи. |
| LAST_UPDATED_ON | TIMESTAMP WITH LOCAL TIME ZONE | Время обновления записи. Генерируется триггером до вставки или обновления записи. |
| ROW_VERSION | NUMBER | Версия записи. Генерируется триггером до вставки или обновления записи. |
ACCELERA_INTEGRATION_LOGS
Лог интеграционного механизма.
| Название поля | Тип данных | Описание |
|---|---|---|
| SEG_TRACKING_CODE | NUMBER | Уникальный идентификатор сегмента. Генерируется интеграционным механизмом. |
| PROGRAM_NAME | VARCHAR2(255) | Наименование программы, которая выполняется в данный момент времени. Имена программ заданы в исходном коде интеграционного механизма. |
| PROGRAM_TYPE | VARCHAR2(255) | Наименование типа программы, которая выполняется в данный момент времени. Имена типов программ заданы в исходном коде интеграционного механизма. |
| STEP_NAME | VARCHAR2(255) | Наименование шага программы. Имена шагов программ заданы в исходном коде интеграционного механизма. |
| STEPN | NUMBER | Номер шага. Вычисляется интеграционным механизмом. |
| ERROR_CODE | VARCHAR2(255) | Код ошибки. Может принимать значения 0, 1, 2, которые порождаются логикой интеграционного механизма и соответствуют статусам SUCCESS, ERROR, WARNING. Также код ошибки может быть в виде отрицательного целого числа, которое порождается в результате исключений, не обрабатываемых логикой интеграционного механизма. |
| ERROR_DESC | VARCHAR2(255) | Описание ошибки. Кроме кода 0, для кодов 1,2 заданы в исходном коде интеграционного механизма, для остальных кодов генерируется базой данных. |
| STATUS | VARCHAR2(255) | Статус выполнения шага. Может принимать значения: SUCCESS, ERROR, WARNING. Статусная модель. |
| CREATED_BY | VARCHAR2(255) | Пользователь, создавший запись. Генерируется триггером до вставки или обновления записи. |
| CREATED_ON | TIMESTAMP WITH LOCAL TIME ZONE | Время создания записи. Генерируется триггером до вставки или обновления записи. |
| LAST_UPDATED_BY | VARCHAR2(255) | Пользователь, обновивший запись. Генерируется триггером до вставки или обновления записи. |
| LAST_UPDATED_ON | TIMESTAMP WITH LOCAL TIME ZONE | Время обновления записи. Генерируется триггером до вставки или обновления записи. |
| ROW_VERSION | NUMBER | Версия записи. Генерируется триггером до вставки или обновления записи. |
ACCELERA_SEGMENTS_GLOBAL_PARAMS
Таблица глобальных параметров, использующихся для параметризации интеграционной логики.
| Название поля | Тип данных | Описание |
|---|---|---|
| PARAM | VARCHAR2(255) | Название параметра. |
| VALUE | VARCHAR2(255) | Значение параметра. |
| CREATED_BY | VARCHAR2(255) | Пользователь, создавший запись. Генерируется триггером до вставки или обновления записи. |
| CREATED_ON | TIMESTAMP WITH LOCAL TIME ZONE | Время создания записи. Генерируется триггером до вставки или обновления записи. |
| LAST_UPDATED_BY | VARCHAR2(255) | Пользователь, обновивший запись. Генерируется триггером до вставки или обновления записи. |
| LAST_UPDATED_ON | TIMESTAMP WITH LOCAL TIME ZONE | Время обновления записи. Генерируется триггером до вставки или обновления записи. |
| ROW_VERSION | NUMBER | Версия записи. Генерируется триггером до вставки или обновления записи. |
ACCELERA_SEGMENTS_LOGS
Лог сегментов (тестовые группы), выгруженных в каналы. Таблица может быть дополнена в рамках кастомизации.
| Название поля | Тип данных | Описание |
|---|---|---|
| SEG_TRACKING_CODE | NUMBER | Уникальный идентификатор сегмента. Генерируется интеграционным механизмом. |
| SEG_SUBJECT_ID | NUMBER | Идентификатор субъекта. |
| CREATED_BY | VARCHAR2(255) | Пользователь, создавший запись. Генерируется триггером до вставки или обновления записи. |
| CREATED_ON | TIMESTAMP WITH LOCAL TIME ZONE | Время создания записи. Генерируется триггером до вставки или обновления записи. |
ACCELERA_SEGMENTS_CG_LOGS
Лог сегментов (контрольные группы). Таблица может быть дополнена в рамках кастомизации.
| Название поля | Тип данных | Описание |
|---|---|---|
| SEG_TRACKING_CODE | NUMBER | Уникальный идентификатор сегмента. Генерируется интеграционным механизмом. |
| SEG_CG_TRACKING_CODE | NUMBER | Уникальный идентификатор контрольной группы сегмента. Генерируется интеграционным механизмом в случае наличия признака контрольной группы в сегменте. |
| SEG_SUBJECT_ID | NUMBER | Идентификатор субъекта. |
| CREATED_BY | VARCHAR2(255) | Пользователь, создавший запись. Генерируется триггером до вставки или обновления записи. |
| CREATED_ON | TIMESTAMP WITH LOCAL TIME ZONE | Время создания записи. Генерируется триггером до вставки или обновления записи. |
Установка модели
Установочный скрипт представлен файлом accelera_oracle_batch_model.sql. Его можно запустить в графическом клиенте (клиент должен поддерживать prompt), предварительно открыв файл и выделив весь код, либо с помощью клиента командной строки, например, SQL*Plus.
При запуске скрипта потребуется задать параметры (см.ниже)
| Название параметра | Сообщение на экране | Описание |
|---|---|---|
| base_schema_name prompt | Enter the base schema name [default: accelera] > | Основная схема, в которой располагается интеграционный механизм. По умолчанию accelera |
| segments_global_params_table_name | Enter the segment global parameters table name [default: &&base_schema_name..accelera_segments_global_params] > | Имя таблицы глобальных параметров, использующихся для параметризации интеграционной логики. По умолчанию accelera.accelera_segments_global_params |
| segments_registry_table_name | Enter the segment registry table name [default: &&base_schema_name..accelera_output_segments_registry] > | Имя таблицы, содержащей реестр выгружаемых на отправку в каналы сегментов. По умолчанию, accelera.accelera_output_segments_registry |
| log_table_name | Enter the integration logs table name [default: &&base_schema_name..accelera_integration_logs] > | Имя таблицы, содержащей интеграционный лог. По умолчанию accelera.accelera_integration_logs |
| segments_log_table_name | Enter the segments logs table name [default: &&base_schema_name..accelera_segments_logs] > | Имя таблицы, содержащей лог сегментов (тестовые группы), выгруженных в каналы. По умолчанию accelera. accelera_segments_logs |
| segments_cg_log_table_name | Enter the segments control group logs table name [default: &&base_schema_name..accelera_segments_cg_logs] > | Имя таблицы, содержащей лог сегментов (контрольные группы). По умолчанию accelera. accelera_segments_cg_logs |
| subject | Enter the subject name [default: SUBJECT_ID] > | Наименование субъекта сегментации (ключевой бизнес-сущности, относительно которой строится сегмент). По умолчанию SUBJECT_ID |
| grouptype | Enter the group type column name [default: GRP_TYPE] > | Название колонки, в которой происходит разметка тестовых и контрольных групп. По умолчанию GRP_TYPE |
DDL модели
create table &&segments_registry_table_name (
request_id varchar2(255),
seg_out_tbl varchar2(255),
seg_id varchar2(255),
seg_tracking_code number,
seg_status varchar2(255),
seg_volume number,
seg_cg_tracking_code number,
seg_cg_volume number,
seg_run_type number,
seg_subject varchar2(255),
seg_placeholders varchar2(2000),
channel_code varchar2(255),
created_by varchar2(255),
created_on timestamp with local time zone,
last_updated_by varchar2(255),
last_updated_on timestamp with local time zone,
row_version number
);
alter table &&segments_registry_table_name add constraint seg_reg_pk primary key (seg_tracking_code);
create or replace trigger biu_seg_reg
before insert or update on &&segments_registry_table_name
for each row
begin
if inserting and :new.request_id is null then
:new.request_id:=sys_guid();
end if;
if inserting then
:new.created_by:=USER();
:new.created_on:=localtimestamp;
:new.row_version:=1;
end if;
if updating then
:new.last_updated_by:=USER();
:new.last_updated_on:=localtimestamp;
:new.row_version:=nvl(:new.row_version,0)+1;
end if;
:new.seg_status:= trim(upper(:new.seg_status));
:new.seg_subject:= trim(upper(:new.seg_subject));
:new.seg_placeholders:= trim(upper(:new.seg_placeholders));
:new.seg_out_tbl:= trim(upper(:new.seg_out_tbl));
:new.channel_code:= trim(upper(:new.channel_code));
end;
/
create table &&log_table_name(
seg_tracking_code number,
program_name varchar2(255),
program_type varchar2(255),
step_name varchar2(255),
stepn number,
error_code varchar2(255),
error_desc varchar2(255),
row_version number,
status varchar2(255),
created_by varchar2(255),
created_on timestamp with local time zone,
last_updated_by varchar2(255),
last_updated_on timestamp with local time zone
);
alter table &&log_table_name
add constraint logs_pn_ck check (upper(program_name) = program_name);
alter table &&log_table_name
add constraint logs_pt_ck check (upper(program_type) = program_type);
alter table &&log_table_name
add constraint logs_sn_ck check (upper(step_name) = step_name);
alter table &&log_table_name
add constraint logs_status_ck check (upper(status) = status);
create or replace trigger biu_logs
before insert or update on &&log_table_name
for each row
begin
if inserting then
:new.created_by:=USER();
:new.created_on:=localtimestamp;
:new.row_version:=1;
end if;
if updating then
:new.last_updated_by:=USER();
:new.last_updated_on:=localtimestamp;
:new.row_version:=nvl(:new.row_version,0)+1;
end if;
:new.program_name:= trim(upper(:new.program_name));
:new.program_type:= trim(upper(:new.program_type));
:new.step_name:= trim(upper(:new.step_name));
:new.status:= trim(upper(:new.status));
end;
/
create table &&segments_global_params_table_name (
param varchar2(255),
value varchar2(255),
created_by varchar2(255),
created_on timestamp with local time zone,
last_updated_by varchar2(255),
last_updated_on timestamp with local time zone,
row_version number
);
alter table &&segments_global_params_table_name add constraint seg_glb_par_pk primary key (param);
create or replace trigger biu_glb_params
before insert or update on &&segments_global_params_table_name
for each row
begin
if inserting then
:new.created_by:=USER();
:new.created_on:=localtimestamp;
:new.row_version:=1;
end if;
if updating then
:new.last_updated_by:=USER();
:new.last_updated_on:=localtimestamp;
:new.row_version:=nvl(:new.row_version,0)+1;
end if;
:new.param:= trim(upper(:new.param));
:new.value:= trim(upper(:new.value));
end;
/
- -Set global parameters
insert into &&segments_global_params_table_name(param, value) values ('SUBJECT', '&&subject');
insert into &&segments_global_params_table_name(param, value) values ('GROUP_TYPE', '&&grouptype');
create table &&segments_log_table_name(
seg_tracking_code number,
seg_subject_id number,
created_by varchar2(255),
created_on timestamp with local time zone
);
create table &&segments_cg_log_table_name(
seg_tracking_code number,
seg_cg_tracking_code number,
seg_subject_id number,
created_by varchar2(255),
created_on timestamp with local time zone
);Интеграционный механизм
Спецификация интеграционного механизма
Интеграционный механизм состоит из 16 подпрограмм:
- В подпрограммах 1-13 происходят проверки и преобразования датасета с сегментом
- Подпрограмма 14 кастомизируемая и отвечает за интеграцию, а именно за запись в промежуточные интеграционные таблицы
- Подпрограмма 15 — за запись лога контактов
- Подпрограмма 16 — за сбор «мусора»
| # | Подпрограмма | Описание |
|---|---|---|
| 1 | CHECK_OUTPUT_DATASET | Проверка, что таблица с сегментом, название которой передается в параметре p_seg_out_tbl, существует. Если таблица не найдена в базе данных, то будет вызвано исключение. В интеграционный лог запишется сообщение вида: 'MISSING DATASET '|upper(p_seg_out_tbl) с кодом 1. Функция вернет сообщение следующего вида: '[ERROR] MISSING DATASET '|upper(p_seg_out_tbl)|' (tcid: '|v_seg_tracking_code|')'. Где tcid — это seg_tracking_code. Любые другие исключения на этом шаге, не связанные с этой проверкой, обрабатываются как others в терминологии Oracle. При возникновении исключений на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 2 | CHECK_UNIQUE_SEGMENT_IDENTIFIER | Проверка, что уникальный идентификатор сценария сегментирования, который передается в параметре p_seg_id, задан. Если идентификтор не задан, то будет вызвано исключение. В интеграционный лог запишется сообщение вида: 'SEGMENT UNIQUE IDENTIFIER IS NOT SET' с кодом 1. Функция вернет сообщение следующего вида: '[ERROR] SEGMENT UNIQUE IDENTIFIER IS NOT SET'|' (tcid: '|v_seg_tracking_code|')'. Где tcid — это seg_tracking_code. Любые другие исключения на этом шаге, не связанные с этой проверкой, обрабатываются как others в терминологии Oracle. При возникновении исключений на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 3 | CHECK_SEGMENT_RUN_TYPE | Проверка, что тип запуска, который передается в параметре p_seg_run_type, задан и имеет значение в диапазоне 1-3. Если проверка не выполняется, то вызывается исключение. В интеграционный лог запишется сообщение вида: 'SEGMENT RUN TYPE IS NOT SET OR NOT ALLOWED' с кодом 1. Функция вернет сообщение следующего вида: '[ERROR] SEGMENT RUN TYPE IS NOT SET OR NOT ALLOWED'|' (tcid: '|v_seg_tracking_code|')'. Где tcid — это seg_tracking_code. Любые другие исключения на этом шаге, не связанные с этой проверкой, обрабатываются как others в терминологии Oracle. При возникновении исключений на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 4 | CHECK_CHANNEL_CODE | Проверка, что код канала, который передается в параметре p_channel_code, задан и соответствует значениям, заданным в атрибутах кампании. Если проверка не выполняется, то вызывается исключение. В интеграционный лог запишется сообщение вида: 'CHANNEL IS NOT SUPPORTED' с кодом 1. Функция вернет сообщение следующего вида: '[ERROR] CHANNEL IS NOT SUPPORTED'|' (tcid: '|v_seg_tracking_code|')'. Где tcid — это seg_tracking_code. Любые другие исключения на этом шаге, не связанные с этой проверкой, обрабатываются как others в терминологии Oracle. При возникновении исключений на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 5 | CHECK_GLOBAL_PARAM_SUBJECT | Проверка, что глобальный параметр SUBJECT существует и задан в таблице глобальных параметров. Если параметр не задан, то вызывается исключение. В интеграционный лог запишется сообщение вида: 'GLOBAL PARAMETER "SUBJECT" IS NOT SET' с кодом 1. Функция вернет сообщение следующего вида: '[ERROR] GLOBAL PARAMETER "SUBJECT" IS NOT SET'|' (tcid: '|v_seg_tracking_code|')'. Где tcid — это seg_tracking_code. Если параметр не существует, то вызывается исключение. В интеграционный лог запишется сообщение вида: 'MISSING GLOBAL PARAMETER "SUBJECT"' с кодом 1. Функция вернет сообщение следующего вида: '[ERROR] MISSING GLOBAL PARAMETER "SUBJECT"'|' (tcid: '|v_seg_tracking_code|')'. Где tcid — это seg_tracking_code. Любые другие исключения на этом шаге, не связанные с этой проверкой, обрабатываются как others в терминологии Oracle. При возникновении исключений на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 6 | CHECK_GLOBAL_PARAM_GROUP_TYPE | Проверка, что глобальный параметр GROUP_TYPE существует и задан в таблице глобальных параметров. Если параметр не задан, то вызывается исключение. В интеграционный лог запишется сообщение вида: 'GLOBAL PARAMETER "GROUP TYPE" IS NOT SET' с кодом 2. Если параметр не существует, то вызывается исключение. В интеграционный лог запишется сообщение вида: 'MISSING GLOBAL PARAMETER "GROUP TYPE"' с кодом 1. Функция вернет сообщение следующего вида: '[ERROR] MISSING GLOBAL PARAMETER "GROUP TYPE"'|' (tcid: '|v_seg_tracking_code|')'. Где tcid — это seg_tracking_code. Любые другие исключения на этом шаге, не связанные с этой проверкой, обрабатываются как others в терминологии Oracle. При возникновении исключений (кроме исключений с кодом 2) на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 7 | FIND_THE_<<SUBJECT_VALUE>> COLUMN_IN_DATASET<<OUTPUT_DATASET>> | Проверка, что значение глобального параметра SUBJECT, присутствует среди полей входной таблицы с сегментом. Если поле с таким именем отсутствует, то вызывается исключение. В интеграционный лог запишется сообщение вида: 'COLUMN '|upper(v_seg_subject)|' IS NOT FOUND с кодом 1. Функция вернет сообщение следующего вида: '[ERROR] '|'COLUMN '|upper(v_seg_subject)|' IS NOT FOUND'|' (tcid: '|v_seg_tracking_code|')'. Где tcid — это seg_tracking_code. Любые другие исключения на этом шаге, не связанные с этой проверкой, обрабатываются как others в терминологии Oracle. При возникновении исключений на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 8 | FIND_THE_<<GROUP_TYPE_COLUMN>> COLUMN_IN_DATASET<<OUTPUT_DATASET>> | Проверка, что значение глобального параметра GROUP_TYPE, присутствует среди полей входной таблицы с сегментом. Если значение параметра задано, но поле с таким именем не найдено во входной таблице с сегментом, то вызывается исключение. В интеграционный лог запишется сообщение вида: 'COLUMN '|upper(v_seg_group_type)|' IS NOT FOUND' с кодом 2. Если значение параметра GROUP_TYPE не задано, что проверялось на одгом из предыдущих шагов, то вызывается исключение и в интеграционный лог продублируется сообщение вида: 'GLOBAL PARAMETER "GROUP TYPE" IS NOT SET' с кодом 2. Если колонка найдена, то будет задан флаг is_seg_group_type:=1. Любые другие исключения на этом шаге, не связанные с этой проверкой, обрабатываются как others в терминологии Oracle. При возникновении исключений (кроме исключений с кодом 2) на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 9 | COUNT_SEGMENT_VOLUMES | Расчет объема сегмента целиком и объема контрольной группы. Если условие is_seg_group_type=1 выполняется, то расчитывается объем контрольной группы (кол-во уникальных субъектов). Если объем контрольной группы равен 0, то вызывается исключение. В интеграционный лог запишется сообщение вида: 'EMPTY CONTROL GROUP IN DATASET '|upper(p_seg_out_tbl) с кодом 2. Расчитывается объем сегмента. Если объем сегмента равен 0, то вызывается исключение. В интеграционный лог запишется сообщение вида: 'EMPTY DATASET'|upper(p_seg_out_tbl) с кодом 1. Функция вернет сообщение следующего вида: '[ERROR] '|'EMPTY DATASET'|upper(p_seg_out_tbl)|' (tcid: '|v_seg_tracking_code|')'. Любые другие исключения на этом шаге, не связанные с расчетом, обрабатываются как others в терминологии Oracle. При возникновении исключений (кроме исключений с кодом 2) на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 10 | ADD_METADATA_TO_REGISTRY | Если все проверки и расчеты на предыдущих шагах прошли успешно (не было исключений с кодом 1), то на данном шаге метаданные сегмента запишутся в реестр сегментов. Любые исключения на этом шаге обрабатываются как others в терминологии Oracle. При возникновении исключений на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 11 | CHECK_SEGMENT_PLACEHOLDERS | Проверка плейсхолдеров, передающихся в параметре p_seg_placeholders. Если плейсхолдеры не заданы, вызывается исключение. В интеграционный лог запишется сообщение вида: 'PLACEHOLDERS ARE NOT SET' с кодом 2. В таком случае сегмент считается полностью верифицированным. В реестр сегментов в поле статус будет записано VERIFIED. Если плейсхолдеры заданы, то проверяется наличие соответстующих колонок во входном датасете. Если соответствие не полное, то будет вызвано исключение. В интеграционный лог запишется сообщение вида: 'PLACEHOLDERS ARE NOT MATCHED PARTLY' с кодом 2. Будет задан флаг is_use_placeholders:=1. Если соответствие полное также будет задан флаг is_use_placeholders:=1. Если ни один из плейсхолдеров не найден среди полей входного датасета, то будет вызвано исключение. В интеграционный лог запишется сообщение вида: 'PLACEHOLDERS ARE NOT MATCHED' с кодом 1. Функция вернет сообщение '[ERROR] PLACEHOLDERS ARE NOT MATCHED'|' (tcid: '|v_seg_tracking_code|')'. Где tcid — это seg_tracking_code. При возникновении исключений (кроме исключений с кодом 2) на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. В реестр сегментов в поле статус будет записано NOT VERIFIED BECAUSE OF ERRORS. |
| 12 | DEDUP_SEGMENT_BY_SUBJECT | Шаг дедупликации сегмента в разрезе субъекта. При возникновении исключений на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 13 | EXTRACT_CONTROL_AND_TEST_GROUPS | Шаг извлечения контрольной группы из сегмента. При возникновении исключений на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 14 | ETL_SEGMENT_TO_MSG_SAS | Шаг подготовки и загрузки дедуплицированного сегмента с тестовой группой в промежуточные интеграционные таблицы. Общий алгоритм: На данном шаге поочердно происходит заполнение коллекций, построенных на пользовательских типах, соответствующих структурам интеграционных таблиц и массовая вставка данных в эти таблицы. При успешной отработке шага, в реестр сегментов в поле статус запишется SUCCESS TO UPLOAD. При возникновении исключений на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. В промежуточных интеграционных таблицах произойдет удаление всех записей, sas_isn которых соответствует текущему seg_tracking_code. В реестр сегментов в поле статус запишется FAILED TO UPLOAD. |
| 15 | WRITE_DOWN_SEGMENTS_LOGS | Запись тестового и контрольного сегментов в соотвествующие логи сегментов. При возникновении исключений на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
| 16 | COLLECT_GARBAGE | Сбор «мусора». Удаление всех врменных таблиц, созданных во время работы интеграционного механизма. При возникновении исключений на этом шаге происходит выход из функции. Функция вернет сообщение '[ERROR] '|substr(sqlerrm, 1, 200)|' (tcid: '|v_seg_tracking_code|'). В интеграционный лог запишется substr(sqlerrm, 1, 200) с кодом sqlcode. |
Пример вызова функции
select
accelera.accelera_integration_tools.send_segment_to_channel
(
p_seg_out_tbl => 'tmp_segments_mzbux67243',
p_seg_id => 'seg_vbhyk234',
p_seg_run_type => 1,
p_seg_placeholders => 'FIRSTNAME, FATHERNAME',
p_channel_code => 'SMS',
)
from
dual