Sus datos se particionan en varios nodos (workers) y threads.
El Data Step se ejecuta en paralelo en cada thread.
Cada thread posee su propia instancia local de la Hash Table.
El problema: Si el duplicado de la clave "A" se encuentra en el Thread 1 y el original está en el Thread 2, sus Hash Tables respectivas no se comunican. Cada thread pensará que tiene una clave única. Resultado: los duplicados persisten en la tabla final consolidada.
Solución 1: El método nativo (Recomendado)
La forma más eficiente de eliminar duplicados en Viya™ es usar la acción CAS dedicada. Está optimizada para el motor distribuido y gestiona la mezcla de datos (shuffling) necesaria para comparar registros entre nodos.
Contrariamente a las creencias populares, el viejo y fiable PROC SORT con la opción NODUPKEY es muy eficiente en CAS.
El motor CAS intercepta la sintaxis de PROC SORT y la traduce en operaciones distribuidas optimizadas. No devuelve los datos localmente para ordenarlos; todo ocurre en memoria en el clúster.
proc sort data=casuser.ma_table_source out=casuser.ma_table_dedoublonnee nodupkey;
by var_cle1 var_cle2;
run;
Veredicto: Las pruebas muestran que este método es casi tan rápido como la acción deduplicate. A menudo es la mejor opción para migrar código existente sin una reescritura compleja.
Si insiste en usar un Data Step, debe abandonar la lógica de Hash Table para volver a la lógica secuencial BY + FIRST..
¿Por qué funciona esto sin un ordenamiento previo?
En CAS, la instrucción BY fuerza una reorganización de los datos: el controlador asegura que todas las filas con la misma clave BY se envían al mismo hilo (agrupación).
data casuser.ma_table_dedoublonnee;
set casuser.ma_table_source;
by var_cle1 var_cle2;
if first.var_cle2; /* Garde la première occurrence */
run;
1
DATA casuser.ma_table_dedoublonnee;
2
SET casuser.ma_table_source;
3
BY var_cle1 var_cle2;
4
IF first.var_cle2; /* Garde la première occurrence */
5
RUN;
Advertencia: Aunque es funcional, este método implica un movimiento masivo de datos (network shuffle) para agrupar las claves, lo que puede ser menos eficiente que la acción dedicada en volúmenes muy grandes.
Single-threaded: Forzar la ejecución en un solo hilo (/single=yes) resolvería el problema de las Hash Tables, pero anularía el rendimiento al eliminar todo el propósito del procesamiento paralelo de Viya™.
Los códigos y ejemplos proporcionados en WeAreCAS.eu son con fines educativos. Es imperativo no copiarlos y pegarlos ciegamente en sus entornos de producción. El mejor enfoque es comprender la lógica antes de aplicarla. Recomendamos encarecidamente probar estos scripts en un entorno de prueba (Sandbox/Dev). WeAreCAS no acepta ninguna responsabilidad por cualquier impacto o pérdida de datos en sus sistemas.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.