Обработка данных пакетами#
Показывает подход для массового изменения большого объёма данных, когда обработка всех записей за один проход может привести к переполнению памяти. Записи выбираются и обрабатываются пачками, после каждой пачки выполняется commit().
Место применения: Сервис > Инструменты > Выполнить JEXL-скрипт
Внимание
Перед использованием замените SQL-запрос, размер пачки и логику обработки на значения, подходящие для вашей задачи.
Тип: JEXL-скрипт
// Обработка данных по пачкам
var batchSize = 200;
var nCount = 0;
var nOffset = 0;
var sqlText = `
<запрос>
`;
while (true) {
// offset не нужен, если после каждой пачки отдается commit в БД
// и запрос исключает уже обработанные записи
var listSQL = sql(sqlText + " offset " + nOffset + " limit " + batchSize).asList();
// Условие выхода из цикла
if (listSQL.isEmpty()) {
break;
}
for (data : listSQL) {
var ropPlacement = Bs_PlacementApi.load(data.id);
Bs_PlacementApi.setObjAttrValue(ropPlacement, "idMonitorTrainLocationType", data.idtype);
nCount += 1;
}
commit();
nOffset += batchSize;
}
// Результат
if (nCount == 0) {
dialogs.showMessage("Исправлять нечего.");
} else {
dialogs.showMessage("Исправлено " + nCount + " записей.");
}