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™.
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.