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™.
Die auf WeAreCAS.eu bereitgestellten Codes und Beispiele dienen Lehrzwecken. Es ist zwingend erforderlich, sie nicht blind in Ihre Produktionsumgebungen zu kopieren. Der beste Ansatz besteht darin, die Logik zu verstehen, bevor sie angewendet wird. Wir empfehlen dringend, diese Skripte in einer Testumgebung (Sandbox/Dev) zu testen. WeAreCAS übernimmt keine Verantwortung für mögliche Auswirkungen oder Datenverluste auf Ihren Systemen.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.