Удалить данные из таблиц назначения перед выполнением операции копирования данных - PullRequest
2 голосов
/ 13 марта 2020

Я пытаюсь создать конвейер, который перемещает данные между некоторыми Oracle базами данных. Я успешно создал и протестировал действия copy data . Моя проблема в том, что я хочу очистить таблицы назначения до запуска «копирования», и я не вижу способа сделать это (сейчас он добавляет данные в таблицы).

Сначала я попытался использовать Хранимая процедура , но поддерживает только SQL Источники, связанные с сервером. Ни одна из других операций, предлагаемых фабрикой данных, не работает для этого варианта использования. Даже общее действие c "execute SQL" могло бы работать для меня, но ничего подобного, по-видимому, не доступно.

РЕДАКТИРОВАТЬ: я разместил ответ ниже, но он не идеален. Пожалуйста, напишите ответ, если вы думаете, что у вас есть лучшее решение!

Ответы [ 3 ]

2 голосов
/ 13 марта 2020

Я нашел немного хакерское решение. В части Sink операции копирования данных есть конфигурация, называемая Pre-copy script . Документация говорит, что использовать его для манипулирования входящими данными, поэтому я думал, что это будет работать только на входящие данные, но на самом деле это SQL, который выполняется в целевой базе данных (по-видимому, в транзакции, которая фиксируется)

В общем, это работает:

sql in copy data activity

Я не большой поклонник этого решения, потому что трудно настроить поток. Я бы предпочел отдельное действие, чтобы подготовить варианты успеха / неудачи, но при этом вся операция «Копирование данных» не удалась. Пожалуйста, оставьте ответ, если у вас есть идея получше!

1 голос
/ 18 марта 2020

Я использую «TRUNCATE TABLE xxx» в сценарии предварительной копии. (Усечение происходит быстрее, чем удаление)

Также, на ваш взгляд, нет «Выполнить SQL задание», но в качестве хака мы можем использовать действие «Поиск» для выполнения ad-ho c скрипты. Ссылка на один из моих предыдущих ответов на тот же: { ссылка }

0 голосов
/ 18 марта 2020

Я всегда использовал хранимую процедуру для очистки данных таблицы как части моих конвейеров. Я делаю это потому, что у меня обычно есть спецификация c where для данных [которая обычно совпадает с разделом таблицы] вместо усечения всей таблицы.

В качестве альтернативы операции копирования вы можете использовать действие потока данных (ADFDF). В настройках ADFDF Sink показано, что вы можете обрезать таблицу:

enter image description here

Этот снимок экрана предназначен для Sink для SQLDW, поэтому я не знаю, используется ли для ADFDF Sink Oracle позволяет это или нет.

...