Recomendaría cargar una tabla de etapas en el servidor de destino y luego combinar los resultados en una tabla de destino en el servidor de destino. Si necesita ejecutar alguna regla de higiene, puede hacerlo a través de un procedimiento almacenado, ya que obtendrá un mejor rendimiento que a través de las tareas de transformación de flujo de datos de SSIS. Además, la deduping es generalmente un proceso de varios pasos. Es posible que desee deducer en:
- Distintas líneas.
- Distintos grupos de columnas como Nombre, Apellido, Dirección de correo electrónico, etc.
- Es posible que desee deducir en una tabla de destino existente. Si ese es el caso, entonces es posible que deba incluir declaraciones NOT EXISTS o NOT IN. O quizás desee actualizar la fila original con nuevos valores. Por lo general, esto se realiza mejor con una instrucción MERGE y una subconsulta para la fuente.
- Tome la primera o la última fila de un patrón en particular. Por ejemplo, puede querer que la última fila ingresada en el archivo aparezca cada vez que aparezca una dirección de correo electrónico o un número de teléfono. Normalmente me baso en CTE con ROW_NUMBER() para generar columnas de orden secuencial y orden inverso como en la muestra siguiente:
.
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;
Hay un montón de opciones para usted en los archivos deduping, pero en última instancia Recomiendo el manejo de este en un procedimiento almacenado, una vez que haya cargado una tabla de etapas en el servidor de destino. Después de limpiar los datos, puede fusionar o INSERTAR en su destino final.
Cuando dices "duplicados", ¿te refieres a registros que son idénticos, o registros donde las claves principales son idénticas? –