Sin embargo, cuando las fuentes de datos son voluminosas (varios terabytes), cargar la tabla completa para usar solo un resumen o un subconjunto es ineficaz. Esto consume innecesariamente ancho de banda de red y RAM.
Aunque PROC CASUTIL ofrece opciones simples (WHERE=, VAR=), existe un método mucho más potente para realizar agregaciones complejas o uniones directamente en la base de datos incluso antes de que los datos lleguen a CAS: el FedSQL Pass-Through.
Este tutorial explora dos métodos para delegar el trabajo a la base de datos: el modo Implícito y el modo Explícito.
Método 1: El Pass-Through Implícito (El método "Estándar")
El Pass-Through implícito permite escribir código FedSQL estándar (cercano al SQL ANSI). El conector de datos CAS (Data Connector) se encarga de traducir su consulta al lenguaje nativo de la base de datos (SQL Postgres, T-SQL, PL/SQL, etc.).
El Ejemplo: Agregación simple
Imaginemos una tabla de Postgres de 2 millones de filas (orders_large). Queremos cargar en CAS únicamente la suma de las ventas por tipo de pedido, filtrada por una fecha.
cas mysession;
/* Définition de la connexion à Postgres */
caslib caspgr datasource=(srctype="postgres", database="DCON", server="...", ...) libref=caspgr;
proc fedsql sessref=mysession;
/* Création de la table résultante directement dans la RAM de CAS */
create table caspgr.revenuesummary{options replace=true} as
select order_type, sum(total_sale) as revenue
from caspgr."orders_large" /* Notez les guillemets pour préserver la casse */
where order_date < date'2015-01-01'
group by order_type;
quit;
/* Création de la table résultante directement dans la RAM de CAS */
7
create TABLE caspgr.revenuesummary{options replace=true} as
8
select order_type, sum(total_sale) as revenue
9
from caspgr."orders_large"/* Notez les guillemets pour préserver la casse */
10
where order_date < date'2015-01-01'
11
group BY order_type;
12
QUIT;
Lo que sucede entre bastidores:
Si la tabla orders_large no está ya cargada en CAS, el motor detecta que es una tabla externa. Traduce la consulta a SQL Postgres, la envía al servidor y solo carga en CAS el resultado agregado (unas pocas líneas).
Ganancia de rendimiento:
Método clásico (Carga total + Agregación CAS) : ~38 segundos.
Método Pass-Through (Agregación en base de datos + Carga de resultado) : ~0.32 segundos.
Método 2: El Pass-Through Explícito (El método "Usuario Avanzado")
A veces, necesita utilizar funcionalidades muy específicas de su base de datos (funciones JSON, funciones geoespaciales, índices particulares) que el FedSQL estándar no conoce.
La sintaxis se basa en la cláusula CONNECTION TO :
SELECT ... FROM CONNECTION TO nom_caslib ( votre_requête_native_ici )
1
SELECT ... FROM CONNECTION TO nom_caslib ( votre_requête_native_ici )
El Ejemplo Avanzado: Parseo de JSON en Postgres
Supongamos que su tabla de Postgres jsonorders contiene una columna de tipo JSON. Quiere extraer información estructurada (estado del cliente, cantidad) almacenada en este JSON y agregarla antes de cargar en CAS.
FedSQL no sabe parsear JSON de forma nativa, pero Postgres sí.
proc fedsql sessref=mysession;
create table caspgr.StateSalesSummary as
select customerstate, minquantity, maxquantity, sumquantity
from connection to caspgr
(
/* DEBUT DU SQL NATIF POSTGRES */
SELECT customerstate,
min(quantity) as minquantity,
max(quantity) as maxquantity,
sum(quantity) as sumquantity
FROM
(
/* Utilisation des opérateurs JSON Postgres -> et ->> */
SELECT orderinfo -> 'customer' ->> 'state' as customerstate,
cast(orderinfo -> 'items' ->> 'qty' as integer) as quantity
FROM jsonorders
) t
GROUP BY customerstate
/* FIN DU SQL NATIF POSTGRES */
);
quit;
Resultado: Postgres realiza la extracción JSON y la agregación pesada. CAS solo recibe una pequeña tabla de resumen lista para usar.
Aviso importante
Los códigos y ejemplos proporcionados en WeAreCAS.eu son con fines educativos. Es imperativo no copiarlos y pegarlos ciegamente en sus entornos de producción. El mejor enfoque es comprender la lógica antes de aplicarla. Recomendamos encarecidamente probar estos scripts en un entorno de prueba (Sandbox/Dev). WeAreCAS no acepta ninguna responsabilidad por cualquier impacto o pérdida de datos en sus sistemas.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.