|
Сравнить данные регистра и ТЗ в запросе
Шурик71, Олдж, maxab72, sxfoxi, 2S, Amra, unenu, nextssbt, Arbuz, Fish, sansys, SleepyHead, Волшебник, Мультук, Eugene555, okmail, boozin, Terrixus, DimR_71, Доминошник, Климов Сергей, Толич, timurhv, Михаил Козлов, Ногаминебить, takefive, NorthWind, Ivanich, Шаграм, Timon1405, Prog_man, Kigo_Kigo, d4rkmesa, maxar, mortal, Elf_80_lvl, Гипервизор, АгентБезопаснойНацио, alexxx961503, craxx, abfm, lucky_, obs191, Vostochnick, formista2000, DeeK, ReaLg, yurikmellon2, Gucci76, АнализДанных, orakool, strange2007, Asmody
| ☑ |
0
Elf_80_lvl
14.08.25
✎
15:39
|
Возникла задача. Нужно периодически загружать некий файл csv с примитивными типами данных условно Идентификатор, Дата в периодический независимый регистр сведений с теми же измерениями Идентификатор, Дата.
При этом в файле могут быть как новые данные так и ранее уже загруженный Идентификатор с другой датой.
Смысл в том, чтобы из файла вычленить только новые и измененные данные по сравнению с данными регистра.
Проблема в том, что файл довольно большой несколько миллионов записей, нужен максимально производительный алгоритм.
Я читаю файл, парсю его в таблицу значений, передаю это в запрос, там же выбираю срез последних с регистра и не могу сообразить как их связать. При связи же отсекутся данные которых нет в обоих источниках, правильно же?
|
|
1
Fish
гуру
14.08.25
✎
15:42
|
" При связи же отсекутся данные которых нет в обоих источниках" - Смотря как соединять.
|
|
2
Elf_80_lvl
14.08.25
✎
15:45
|
Да как обычно, написал и понял, как решить. Надо уже просто в блокнотик писать свой вопрос, может, озарение будет работать, как и с форумом =)
Конечно, надо просто левое соединение к файлу делать.
|
|
3
Fish
гуру
14.08.25
✎
15:50
|
(2) Тогда ты потеряешь новые данные, которые есть только в файле.
|
|
4
Волшебник
14.08.25
✎
15:52
|
Fish намекает, что здесь подойдёт ПОЛНОЕ СОЕДИНЕНИЕ
|
|
5
Elf_80_lvl
14.08.25
✎
15:54
|
Так, похоже надо освежить в памяти главу по соединениям в запросе. Спасибо.
|
|
6
Fish
гуру
14.08.25
✎
15:58
|
(4) Нет, подойдёт левое, но смотря как понять фразу "левое соединение к файлу "
Я понял так, что основная таблица - это регистр, а левым соединением файл.
А правильно будет наоборот.
|
|
7
Волшебник
14.08.25
✎
15:59
|
(6) тоже вариант
|
|
8
Elf_80_lvl
14.08.25
✎
16:04
|
Нет, основная таблица это файл который на текущий момент актуален и надо регистр привести в соответствие с этим файлом. Тоесть дописать в регистр не 5 миллионов записей, а только изменения
|
|
9
Fish
гуру
14.08.25
✎
16:05
|
(8) Ну тогда всё верно. Левым соединением по ИД цепляешь регистр, а дальше отбираешь только те, которые не соединились и те, у которых есть изменения.
|
|
10
Fish
гуру
14.08.25
✎
16:06
|
(8) "надо регистр привести в соответствие с этим файлом" - А вот это несколько расходится с (0) "вычленить только новые и измененные данные по сравнению с данными регистра."
Что делать с записями, которых нет в файле? Если надо "привести в соответствие с этим файлом", то их надо бы удалять, тогда (9) не пойдёт.
|
|
11
Elf_80_lvl
14.08.25
✎
16:08
|
(10) Да этот вопрос у меня тоже возник и я задал его заказчику. Он задаст его ещё куда то... Короче дело не быстрое =)
Но на данный момент хочу хотя бы изменения и добавления выловить.
Спасибо за подсказку.
|
|
12
unenu
14.08.25
✎
17:04
|
Относительно Источника и Приемника у вас два вида данных к обработке:
1. ПакетНовыхИд
2. ПакетИдСИзменениямиБД
используйте ВыполнитьПакет()
Затем выполните запись новых по первому пакету и
изменение существующих по второму.
Стремление получить все данные(к обработке) в одном
результате запроса не принесет выгоды - количество записей будет то же самое. Но вам придется писать дополнительные условия при обработке записи нового или модификации существующего.
Думаю, ИИ ответил бы что-то подобное.
|
|