Wenn jedoch Datenquellen groß sind (mehrere Terabytes), ist es ineffizient, die gesamte Tabelle zu laden, um nur eine Zusammenfassung oder eine Teilmenge davon zu verwenden. Dies verbraucht unnötig Netzwerkbandbreite und RAM.
Obwohl PROC CASUTIL einfache Optionen bietet (WHERE=, VAR=), gibt es eine viel leistungsfähigere Methode, um komplexe Aggregationen oder Joins direkt in der Datenbank durchzuführen, noch bevor die Daten in CAS gelangen: das FedSQL Pass-Through.
Dieses Tutorial untersucht zwei Methoden, um die Arbeit an die Datenbank zu delegieren: den impliziten Modus und den expliziten Modus.
Methode 1: Das implizite Pass-Through (Die „Standard“-Methode)
Das implizite Pass-Through ermöglicht das Schreiben von Standard-FedSQL-Code (ähnlich ANSI-SQL). Der CAS Data Connector ist dafür verantwortlich, Ihre Abfrage in die native Sprache der Datenbank (Postgres-SQL, T-SQL, PL/SQL usw.) zu übersetzen.
Das Beispiel: Einfache Aggregation
Stellen wir uns eine Postgres-Tabelle mit 2 Millionen Zeilen (orders_large) vor. Wir möchten nur die Summe der Verkäufe nach Bestelltyp, gefiltert nach einem Datum, in CAS laden.
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;
Was hinter den Kulissen geschieht:
Wenn die Tabelle orders_large noch nicht in CAS geladen ist, erkennt das Modul, dass es sich um eine externe Tabelle handelt. Es übersetzt die Abfrage in Postgres-SQL, sendet sie an den Server und lädt nur das aggregierte Ergebnis (wenige Zeilen) in CAS.
Methode 2: Das explizite Pass-Through (Die „Power User“-Methode)
Manchmal müssen Sie sehr datenbankspezifische Funktionen (JSON-Funktionen, Geodaten-Funktionen, bestimmte Indizes) verwenden, die dem Standard-FedSQL nicht bekannt sind.
SELECT ... FROM CONNECTION TO nom_caslib ( votre_requête_native_ici )
1
SELECT ... FROM CONNECTION TO nom_caslib ( votre_requête_native_ici )
Das fortgeschrittene Beispiel: JSON-Parsing in Postgres
Angenommen, Ihre Postgres-Tabelle jsonorders enthält eine JSON-Spalte. Sie möchten strukturierte Informationen (Kundenstatus, Menge) aus diesem JSON extrahieren und vor dem Laden in CAS aggregieren.
FedSQL kann JSON nicht nativ parsen, Postgres aber schon.
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;
Ergebnis: Postgres führt die JSON-Extraktion und die aufwendige Aggregation durch. CAS erhält nur eine kleine, gebrauchsfertige Übersichts-Tabelle.
Avertissement important
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.