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.
Important Disclaimer
The codes and examples provided on WeAreCAS.eu are for educational purposes. It is imperative not to blindly copy-paste them into your production environments. The best approach is to understand the logic before applying it. We strongly recommend testing these scripts in a test environment (Sandbox/Dev). WeAreCAS accepts no responsibility for any impact or data loss on your systems.
SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. ® indicates USA registration. WeAreCAS is an independent community site and is not affiliated with SAS Institute Inc.
This site uses technical and analytical cookies to improve your experience.
Read more.