|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
Приветствую! Есть источник табличка на serv1 , есть получатель табличка на serv2 (оба сервера MsSql). Проливаю из serv1 в serv2 строки каждые 15 минут из табличку в табличку. В настройках получателя - поставил галочки (контролировать нарушения , лочить табличку). Написал тригер (INSTEAD OF INSERT) на табличке получателе, которые будет игнорировать уже вставленные строки... Но, всё равно дубли проскакивают! :-( Читал, подход, что можно делать буферные таблички на получателе в них вставлять всё, а потом merge с основной таблицей, но что то не хочется замусоривать базу. Есть ли какой нить not exists в самом SSIS, помогите плиз!? П.С. линкованные сервера не предлагать, я о т них ухожу... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 09:59 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
medoed Есть ли какой нить not exists в самом SSIS, помогите плиз!? компонент "соединение слиянием" в руссифицированном SSIS (какой-то из "merge" в англ.) В нём выбираешь нужное соединение 2-х наборов (LEFT к получателю) и, через "условное разбиение", отправляешь на вставку только записи отсутствующие в получателе (isnull(DestKeyField)) Без триггеров и прочих "приседаний" ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 10:52 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
medoed Читал, подход, что можно делать буферные таблички на получателе в них вставлять всё, а потом merge с основной таблицей, но что то не хочется замусоривать базу. Делать так и никак иначе. И это не мусор, а правильная архитектура хранилища данных или ODS. Здесь еще вопрос целостности и транзакций. Сначала вы получаете порцию в буфер, вы уверены, что это полная порция от начала и до конца. Потом вы можете MERGE или DELETE INSERT делать в транзакции. Вы будете уверены, что ничего не потеряете. А что будет, если вы вставляете напрямую и загрузка упадет? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 11:15 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
court, Я делал схему аналогично вашей, но что будет, если загрузка рухнет по середине? Опять же есть смысл DELETE INSERT положить сначала в буфера, а затем в другом блоке в одной транзакции их применить на целевую таблицу. Тут вопрос о том, заботитесь ли о целостности транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 11:22 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
Проще использовать Lookup в таблице приемнике и вставлять несовпадения. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 11:23 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
vborets Проще использовать Lookup в таблице приемнике и вставлять несовпадения. Можно поподробнее, что за компонента? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 11:25 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
a_voronin court, Я делал схему аналогично вашей, но что будет, если загрузка рухнет по середине? Тут вопрос о том, заботитесь ли о целостности транзакции. Дозальётся следующей итерацией, разве нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 11:25 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
medoed, По-русски "Уточняющий запрос" ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 11:42 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
medoed a_voronin court, Я делал схему аналогично вашей, но что будет, если загрузка рухнет по середине? Тут вопрос о том, заботитесь ли о целостности транзакции. Дозальётся следующей итерацией, разве нет? Не факт. Зависит от того как вы порцию выбираете и в какой последовательности записи идут. Вы забирали 1000 записей. Загрузка упала. Есть ли гарантия, что вы взяли первые 500. Вот для этого и нужен буфер, чтобы вы знали, что в буфер все 1000 пришли и только потом начинать апдейтить целевые данные. Тут вы зависите от логики драйвера, который работает в destination. есть ли у него гарантия, что он вставит ровно первые 500 строк. Да и поступали ли из источника данные в отсортированном виде. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 12:00 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
medoed vborets Проще использовать Lookup в таблице приемнике и вставлять несовпадения. Можно поподробнее, что за компонента? Не прокатит на большом объеме и не есть хорошее решение по сравнению с Merge. SCD блок тоже производительностью не блещет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 12:02 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
a_voronin medoed пропущено... Можно поподробнее, что за компонента? Не прокатит на большом объеме и не есть хорошее решение по сравнению с Merge. SCD блок тоже производительностью не блещет. У меня за раз не более 1000 строк проливается, так что хочу попробовать... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 12:04 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
vborets medoed, По-русски "Уточняющий запрос" Понял смастерил, только теперь ругачка не могу вкурить, о чём она ?! ((( lookup transform must contain at least one input column joined to a reference columnlookup transform must contain at least one input column joined to a reference column ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 12:36 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
medoed, Lookup используем для обменов, которые в постоянке (т.е. не большими порциями) а для заливки данных раз в сутки - как a_voronin: буферные таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 12:48 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
StarikNavy medoed, Lookup используем для обменов, которые в постоянке (т.е. не большими порциями) а для заливки данных раз в сутки - как a_voronin: буферные таблицы Я подливаю ежедневно (каждые 15 минут) свежие записи только за день, их кол-во за день не более 5000 , а за (новых) раз не более 500. Но думаю, верхняя ругачка о другом! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 12:50 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
medoed, когда мне лень, я делаю уникальный индекс с опцией "игноре дуп кей" если нужно проверить на соответствие всех столбцов, то сделать вычисляемое поле с binary_checksum по всем полям и по нему индекс Но я чаще всего делаю через буферные таблицы ЗЫЖ нужно учитывать, что при больших объемах binary_checksum может выдавать одинаковый результат ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 13:05 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
medoed, авторНаписал тригер (INSTEAD OF INSERT) на табличке получателе, которые будет игнорировать уже вставленные строки... Надо создать уникальный индекс с ignore_dup_key, обычно создает меньше проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 13:06 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
HandKot medoed, когда мне лень, я делаю уникальный индекс с опцией "игноре дуп кей" если нужно проверить на соответствие всех столбцов, то сделать вычисляемое поле с binary_checksum по всем полям и по нему индекс Но я чаще всего делаю через буферные таблицы ЗЫЖ нужно учитывать, что при больших объемах binary_checksum может выдавать одинаковый результат Спасибо попробую! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 13:17 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
Владислав Колосов medoed, авторНаписал тригер (INSTEAD OF INSERT) на табличке получателе, которые будет игнорировать уже вставленные строки... Надо создать уникальный индекс с ignore_dup_key, обычно создает меньше проблем. А в чем проблема вставить в буфер и написать правильно MERGE и иметь иметь индекс только по первичному ключу? И не париться со всеми остальными костылями, что вы тут городите. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 13:22 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
medoed vborets medoed, По-русски "Уточняющий запрос" Понял смастерил, только теперь ругачка не могу вкурить, о чём она ?! ((( lookup transform must contain at least one input column joined to a reference columnlookup transform must contain at least one input column joined to a reference column Надо соединить входящий столбец со столбцом в котором ищется совпадение. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 13:31 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
Владислав Колосов medoed, авторНаписал тригер (INSTEAD OF INSERT) на табличке получателе, которые будет игнорировать уже вставленные строки... Надо создать уникальный индекс с ignore_dup_key, обычно создает меньше проблем. Вообщем то вставляет записи , но валится с ошибкой SSIS пакет: An OLE DB record is available. Source: "Microsoft OLE DB Provider for SQL Server" Hresult: 0x80004005 Description: "Duplicate key was ignored." ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 13:45 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
vborets medoed пропущено... Понял смастерил, только теперь ругачка не могу вкурить, о чём она ?! ((( lookup transform must contain at least one input column joined to a reference columnlookup transform must contain at least one input column joined to a reference column Надо соединить входящий столбец со столбцом в котором ищется совпадение. Спасибо, да сделал. Но почему то зависает в бесконечность на этапе слияния. Буду дебажить Sql Server Profiler, что за запрос идёт на сервер... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 13:49 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
medoed Владислав Колосов medoed, пропущено... Надо создать уникальный индекс с ignore_dup_key, обычно создает меньше проблем. Вообщем то вставляет записи , но валится с ошибкой SSIS пакет: An OLE DB record is available. Source: "Microsoft OLE DB Provider for SQL Server" Hresult: 0x80004005 Description: "Duplicate key was ignored." поставьте блокирование проброса ошибки на этом шаге пакета SSIS - как погасить ошибку в задаче? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 14:06 |
|
SSIS (исключить задваивание строк в получателе)
|
|||
---|---|---|---|
#18+
HandKot medoed пропущено... Вообщем то вставляет записи , но валится с ошибкой SSIS пакет: An OLE DB record is available. Source: "Microsoft OLE DB Provider for SQL Server" Hresult: 0x80004005 Description: "Duplicate key was ignored." поставьте блокирование проброса ошибки на этом шаге пакета SSIS - как погасить ошибку в задаче? Спасибо! Думаю поможет, у меня пакет расширение SSIS слетело к VS 2019 Community. Эх что то сплошная невезуха! :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 15:01 |
|
|
start [/forum/topic.php?fid=46&fpage=71&tid=1686579]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 149ms |
0 / 0 |