?>
La acción `addTable` se utiliza para crear una tabla en memoria en el servidor CAS enviando los datos directamente desde el cliente. A diferencia de `loadTable`, que lee datos de un archivo en el servidor, `addTable` transfiere los datos a través de la red desde la sesión del cliente (Python, R, SAS) al servidor CAS. Es un método fundamental para ingestar pequeños volúmenes de datos o datos generados dinámicamente en el cliente para su análisis en CAS. Es importante destacar que esta acción generalmente no es invocada directamente por el usuario, sino por funciones o métodos de alto nivel en los clientes de SAS (como el paso DATA en SAS, el método `upload` o `to_cas` en Python).
| Parámetro | Descripción |
|---|---|
| append | Cuando se establece en TRUE, añade las filas a una tabla ya existente en lugar de crear una nueva. |
| caslib | Especifica la caslib de destino donde se creará o modificará la tabla en el servidor CAS. |
| columnar | Si se establece en TRUE, crea la tabla en memoria en un formato columnar, lo que puede ser más eficiente para ciertas operaciones analíticas. |
| commitRecords | Especifica el número de filas que el servidor debe recibir antes de realizar una operación de 'commit' (confirmación) para escribirlas en la tabla. Útil para gestionar transacciones en cargas de datos grandes. |
| commitSeconds | Especifica el intervalo de tiempo en segundos para que el servidor confirme las filas recibidas en la tabla, incluso si no se ha alcanzado `commitRecords`. |
| compress | Si se establece en TRUE, la tabla de destino se almacena en un formato comprimido para ahorrar memoria. |
| copies | Especifica el número de copias redundantes de los datos (bloques) a mantener en un entorno distribuido para tolerancia a fallos. El valor por defecto es 1. |
| descending | Indica que las variables especificadas en el parámetro `orderBy` deben ordenarse en orden descendente. |
| label | Asigna una etiqueta descriptiva a la tabla en memoria, facilitando su identificación. |
| maxMBytes | Define la cantidad máxima de memoria física (en megabytes) que la tabla puede usar. Si se supera, el servidor utilizará almacenamiento temporal. |
| memoryFormat | Especifica el formato de memoria para la tabla de salida. 'STANDARD' es el formato por defecto. 'DVR' (Duplicate Value Reduction) puede reducir el consumo de memoria si hay muchos valores duplicados. |
| orderBy | Especifica una o más variables por las cuales se ordenarán las filas de la tabla en memoria. |
| partition | Especifica una o más variables para particionar la tabla. Las filas con los mismos valores en estas variables se almacenan juntas, lo que puede acelerar las consultas filtradas por estas variables. |
| promote | Si se establece en TRUE, la tabla se crea con un alcance global, haciéndola visible para otras sesiones CAS (sujeto a permisos de acceso). |
| recLen | Parámetro obligatorio que especifica la longitud total, en bytes, de una fila de datos. |
| repeat | Si se establece en TRUE, la tabla completa se replica en cada nodo del servidor CAS. Es útil para tablas de dimensiones pequeñas usadas frecuentemente en uniones (joins). |
| replace | Si una tabla con el mismo nombre ya existe, este parámetro, si se establece en TRUE, permite sobrescribirla. |
| table | Especifica el nombre de la tabla que se creará en el servidor CAS. |
| vars | Define la estructura de la tabla, especificando una lista de diccionarios, donde cada uno describe una variable (columna) con su nombre, tipo, longitud, formato, etc. |
Para demostrar la carga de datos, primero creamos una tabla SAS local en la librería WORK. Esta tabla, llamada `CLIENT_DATA`, contiene información de ventas de productos y servirá como fuente de datos que enviaremos al servidor CAS.
1 DATA client_data; 2 LENGTH Categoria $ 12 Producto $ 20; 3 INPUT ID Categoria $ Ventas; 4 CARDS; 5 1 Electronica 1500 6 2 Hogar 800 7 3 Electronica 1200 8 4 Ropa 500 9 5 Hogar 950 10 6 Ropa 750 11 ; 12 RUN;
La forma más común de usar la funcionalidad `addTable` desde SAS es a través de un paso DATA. Al especificar una tabla CAS en la declaración `DATA` (por ejemplo, `casuser.mi_tabla`), SAS transfiere automáticamente los datos de la tabla de entrada (`set client_data`) a una nueva tabla en memoria en CAS. La opción `replace=true` asegura que si la tabla ya existe en CAS, será reemplazada.
| 1 | DATA casuser.productos_cargados(replace=true); |
| 2 | SET client_data; |
| 3 | RUN; |
Este ejemplo carga la tabla 'client_data' a CAS, pero esta vez la tabla se promociona a alcance global (`promote=true`) para que otras sesiones puedan verla. También se aplica compresión (`compress=true`) para reducir el uso de memoria en el servidor. Estas opciones se especifican como opciones de conjunto de datos en la tabla de salida.
| 1 | DATA casuser.productos_globales(promote=true compress=true replace=true); |
| 2 | SET client_data; |
| 3 | RUN; |
Para optimizar el rendimiento de las consultas, podemos cargar los datos pre-particionados y ordenados. En este ejemplo, usamos la acción `upload` (que a su vez utiliza `addTable`) para cargar el archivo físico de la tabla SAS. Especificamos que la tabla en CAS debe ser particionada por 'Categoria' y que las filas dentro de cada partición deben estar ordenadas por 'Ventas' en orden descendente. Esto acelera significativamente las operaciones de filtrado y agrupación en estas columnas.
| 1 | PROC CAS; |
| 2 | TABLE.upload path="%sysfunc(pathname(WORK))/client_data.sashdat" |
| 3 | casout={name='productos_particionados', caslib='casuser', replace=true, |
| 4 | partition={'Categoria'}, orderBy={{name='Ventas', order='descending'}}}; |
| 5 | RUN; |
| 6 | QUIT; |
Un equipo de marketing necesita analizar la efectividad de una campaña web. Cada día, se genera un archivo con las interacciones de los clientes. El objetivo es cargar los datos...
Una planta industrial recopila millones de lecturas de sensores de su maquinaria. Para acelerar el análisis predictivo de fallos, los datos deben cargarse en CAS de una manera o...
El departamento de finanzas necesita publicar una tabla de referencia con tasas de cambio. Esta tabla debe ser pequeña, de acceso rápido y visible para múltiples equipos (riesgo...