Я бы рекомендовал загрузить промежуточную таблицу на целевом сервере, а затем объединить результаты в целевую таблицу на целевом сервере. Если вам нужно выполнить какие-либо правила гигиены, вы можете сделать это с помощью хранимой процедуры, поскольку вы обязательно получите лучшую производительность, чем с помощью задач преобразования потока данных SSIS. Кроме того, дедупликация - это, как правило, многоэтапный процесс. Вы можете сделать дедупликацию на:
- Четкие линии.
- Четкие группы столбцов, такие как имя, фамилия, адрес электронной почты и т. Д.
- Вы можете выполнить дедупликацию из существующей целевой таблицы. В этом случае вам может потребоваться включить операторы NOT EXISTS или NOT IN. Или вы можете обновить исходную строку новыми значениями. Обычно это лучше всего выполняется с помощью оператора MERGE и подзапроса для источника.
- Возьмите первый или последний ряд определенного узора. Например, вам может потребоваться вводить последнюю строку в файл для каждого вхождения адреса электронной почты или номера телефона. Я обычно полагаюсь на CTE с ROW_NUMBER () для создания столбцов с последовательным и обратным порядком, как в следующем примере:
.
WITH
sample_records
( email_address
, entry_date
, row_identifier
)
AS
(
SELECT '[email protected]'
, '2009-10-08 10:00:00'
, 1
UNION ALL
SELECT '[email protected]'
, '2009-10-08 10:00:01'
, 2
UNION ALL
SELECT '[email protected]'
, '2009-10-08 10:00:02'
, 3
UNION ALL
SELECT '[email protected]'
, '2009-10-08 10:00:00'
, 4
UNION ALL
SELECT '[email protected]'
, '2009-10-08 10:00:00'
, 5
)
, filter_records
( email_address
, entry_date
, row_identifier
, sequential_order
, reverse_order
)
AS
(
SELECT email_address
, entry_date
, row_identifier
, 'sequential_order' = ROW_NUMBER() OVER (
PARTITION BY email_address
ORDER BY row_identifier ASC)
, 'reverse_order' = ROW_NUMBER() OVER (
PARTITION BY email_address
ORDER BY row_identifier DESC)
FROM sample_records
)
SELECT email_address
, entry_date
, row_identifier
FROM filter_records
WHERE reverse_order = 1
ORDER BY email_address;
У вас есть много вариантов дедупликации файлов, но в конечном итоге я рекомендую обрабатывать это в хранимой процедуре, как только вы загрузили промежуточную таблицу на целевой сервер. После очистки данных вы можете либо ОБЪЕДИНЯТЬ, либо ВСТАВИТЬ в конечный пункт назначения.
person
Registered User
schedule
08.10.2009