![]() |
![]() |
![]() |
|
Сравнить данные регистра и ТЗ в запросе | ☑ | ||
---|---|---|---|---|
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. ПакетИдСИзменениямиБД используйте ВыполнитьПакет() Затем выполните запись новых по первому пакету и изменение существующих по второму. Стремление получить все данные(к обработке) в одном результате запроса не принесет выгоды - количество записей будет то же самое. Но вам придется писать дополнительные условия при обработке записи нового или модификации существующего. Думаю, ИИ ответил бы что-то подобное. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |