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™.
The codes and examples provided on WeAreCAS.eu are for educational purposes. It is imperative not to blindly copy-paste them into your production environments. The best approach is to understand the logic before applying it. We strongly recommend testing these scripts in a test environment (Sandbox/Dev). WeAreCAS accepts no responsibility for any impact or data loss on your systems.
SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. ® indicates USA registration. WeAreCAS is an independent community site and is not affiliated with SAS Institute Inc.
This site uses technical and analytical cookies to improve your experience.
Read more.