Cependant, lorsque les sources de données sont volumineuses (plusieurs téraoctets), charger l'intégralité de la table pour n'en utiliser qu'un résumé ou un sous-ensemble est inefficace. Cela consomme inutilement de la bande passante réseau et de la RAM.
Bien que PROC CASUTIL offre des options simples (WHERE=, VAR=), il existe une méthode beaucoup plus puissante pour effectuer des agrégations complexes ou des jointures directement dans la base de données avant même que les données n'arrivent dans CAS : le FedSQL Pass-Through.
Ce tutoriel explore deux méthodes pour déléguer le travail à la base de données : le mode Implicite et le mode Explicite.
Méthode 1 : Le Pass-Through Implicite (La méthode "Standard")
Le Pass-Through implicite permet d'écrire du code FedSQL standard (proche du SQL ANSI). Le connecteur de données CAS (Data Connector) se charge de traduire votre requête en langage natif de la base de données (SQL Postgres, T-SQL, PL/SQL, etc.).
L'Exemple : Agrégation simple
Imaginons une table Postgres de 2 millions de lignes (orders_large). Nous voulons charger dans CAS uniquement la somme des ventes par type de commande, filtrée sur une date.
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;
Ce qui se passe en coulisses :
Si la table orders_large n'est pas déjà chargée dans CAS, le moteur détecte qu'il s'agit d'une table externe. Il traduit la requête en SQL Postgres, l'envoie au serveur, et ne charge dans CAS que le résultat agrégé (quelques lignes).
Gain de performance :
Méthode classique (Chargement total + Agrégation CAS) : ~38 secondes.
Méthode Pass-Through (Agrégation en base + Chargement résultat) : ~0.32 secondes.
Méthode 2 : Le Pass-Through Explicite (La méthode "Power User")
Parfois, vous devez utiliser des fonctionnalités très spécifiques à votre base de données (fonctions JSON, fonctions géospatiales, index particuliers) que le FedSQL standard ne connaît pas.
SELECT ... FROM CONNECTION TO nom_caslib ( votre_requête_native_ici )
1
SELECT ... FROM CONNECTION TO nom_caslib ( votre_requête_native_ici )
L'Exemple Avancé : Parsing JSON dans Postgres
Supposons que votre table Postgres jsonorders contienne une colonne de type JSON. Vous voulez extraire des informations structurées (état du client, quantité) stockées dans ce JSON et les agréger avant le chargement dans CAS.
FedSQL ne sait pas parser du JSON nativement, mais Postgres si.
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;
Résultat : Postgres effectue l'extraction JSON et l'agrégation lourde. CAS ne reçoit qu'une petite table de synthèse prête à l'emploi.
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.