?> addTable - WeAreCAS
table

addTable

Descripción

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).

proc cas; table.addTable / append=TRUE|FALSE, caslib="string", columnar=TRUE|FALSE, copies=integer, label="string", memoryFormat="DVR"|"INHERIT"|"STANDARD", orderBy={"variable-1" <, "variable-2", ...>}, partition={"variable-1" <, "variable-2", ...>}, promote=TRUE|FALSE, replace=TRUE|FALSE, table="nombre-tabla", vars={{name="nombre-variable", length=entero, offset=entero, rType="CHAR"|"NUMERIC" <, ...>}}; quit;
Parámetros
ParámetroDescripción
appendCuando se establece en TRUE, añade las filas a una tabla ya existente en lugar de crear una nueva.
caslibEspecifica la caslib de destino donde se creará o modificará la tabla en el servidor CAS.
columnarSi 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.
commitRecordsEspecifica 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.
commitSecondsEspecifica el intervalo de tiempo en segundos para que el servidor confirme las filas recibidas en la tabla, incluso si no se ha alcanzado `commitRecords`.
compressSi se establece en TRUE, la tabla de destino se almacena en un formato comprimido para ahorrar memoria.
copiesEspecifica 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.
descendingIndica que las variables especificadas en el parámetro `orderBy` deben ordenarse en orden descendente.
labelAsigna una etiqueta descriptiva a la tabla en memoria, facilitando su identificación.
maxMBytesDefine la cantidad máxima de memoria física (en megabytes) que la tabla puede usar. Si se supera, el servidor utilizará almacenamiento temporal.
memoryFormatEspecifica 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.
orderByEspecifica una o más variables por las cuales se ordenarán las filas de la tabla en memoria.
partitionEspecifica 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.
promoteSi se establece en TRUE, la tabla se crea con un alcance global, haciéndola visible para otras sesiones CAS (sujeto a permisos de acceso).
recLenParámetro obligatorio que especifica la longitud total, en bytes, de una fila de datos.
repeatSi 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).
replaceSi una tabla con el mismo nombre ya existe, este parámetro, si se establece en TRUE, permite sobrescribirla.
tableEspecifica el nombre de la tabla que se creará en el servidor CAS.
varsDefine la estructura de la tabla, especificando una lista de diccionarios, donde cada uno describe una variable (columna) con su nombre, tipo, longitud, formato, etc.
Preparación de datos
Creación de Datos de Ejemplo en el Cliente

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.

1DATA client_data;
2LENGTH Categoria $ 12 Producto $ 20;
3INPUT ID Categoria $ Ventas;
4CARDS;
51 Electronica 1500
62 Hogar 800
73 Electronica 1200
84 Ropa 500
95 Hogar 950
106 Ropa 750
11;
12RUN;

Ejemplos

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.

Código SAS® / CAS
¡Copiado!
1DATA casuser.productos_cargados(replace=true);
2 SET client_data;
3RUN;
Resultado :
La tabla 'productos_cargados' se crea en la caslib 'Casuser' del servidor CAS. El log de SAS mostrará una nota confirmando que la tabla WORK.CLIENT_DATA fue cargada exitosamente en CAS, junto con el número de filas y columnas.

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.

Código SAS® / CAS
¡Copiado!
1DATA casuser.productos_globales(promote=true compress=true replace=true);
2 SET client_data;
3RUN;
Resultado :
Se crea una tabla global llamada 'productos_globales' en la caslib 'Casuser'. La tabla está comprimida, lo que es visible en los detalles de la tabla (`table.tableDetails`). Otras sesiones CAS pueden ahora acceder a esta tabla (sujeto a las reglas de control de acceso).

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.

Código SAS® / CAS
¡Copiado!
1PROC CAS;
2TABLE.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'}}};
5RUN;
6QUIT;
Resultado :
Se crea la tabla 'productos_particionados' en CAS. Al inspeccionar los detalles de la tabla, se confirmará que está particionada por 'Categoria' y ordenada por 'Ventas'. Las consultas que agrupen o filtren por 'Categoria' serán mucho más rápidas.

FAQ

¿Cuál es el propósito de la acción addTable en SAS Viya?
¿Cómo puedo añadir filas a una tabla existente en lugar de crear una nueva?
¿Cómo especifico la caslib de destino para la tabla que estoy añadiendo?
¿Es posible crear la tabla en un formato columnar?
¿Cómo puedo controlar la frecuencia con la que se guardan los datos en la tabla durante la carga?
¿Se puede comprimir la tabla en memoria al añadirla?
¿Cómo se gestiona la tolerancia a fallos para una tabla en memoria?
¿Cómo puedo ordenar las variables en orden descendente?
¿Qué es el parámetro `label`?
¿Cómo limito la cantidad de memoria física que puede usar una tabla?
¿Qué formatos de memoria están disponibles para las tablas en CAS?
¿Cómo puedo especificar el orden de las filas dentro de las particiones de una tabla?
¿Es posible particionar una tabla al añadirla?
¿Cómo hago que una tabla esté disponible para otras sesiones de CAS?
¿Qué especifica el parámetro `recLen`?
¿Qué hace el parámetro `repeat`?
¿Cómo puedo reemplazar una tabla existente con el mismo nombre?
¿Cómo defino las variables y sus atributos al añadir una tabla?

Escenarios asociados

Caso de uso
Análisis de Campaña de Marketing: Carga y Acumulación de Interacciones Diarias

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...

Caso de uso
Optimización de Ingesta de Datos de Sensores IoT para Análisis de Fallos

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...

Caso de uso
Gestión de Tabla de Referencia Global con Control de Sobrescritura

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...