Fedsql

Tutoriel Avancé : Manipuler du JSON natif dans SAS Viya avec FedSQL

Simon 40 views
Niveau de difficulté
Confirmé
Published on :
Michael

Le mot de l'Expert

Par Michael

Le Pass-Through Explicite est une arme de précision. Voici ma checklist pour décider quand l'activer :

Complexité spécifique : Utilisation de fonctions non supportées par le SQL ANSI (JSON, XML, calculs géographiques).

Volume massif : Tables sources de plusieurs dizaines de Go où seul un petit sous-ensemble de colonnes ou de lignes est nécessaire.

Jointures complexes : Si vous devez joindre deux tables massives situées sur le même serveur distant, forcez la jointure côté base de données avant de ramener le résultat dans CAS.

Dans l'environnement SAS© Viya, le langage FedSQL est le standard pour interagir avec les données. S'il excelle pour traduire des requêtes standards (SQL ANSI) vers les bases de données (Pass-Through Implicite), il montre ses limites dès que l'on souhaite utiliser des fonctionnalités propriétaires du moteur de base de données, comme des fonctions géospatiales ou le parsing de JSON.

Cet article se penche sur une technique puissante : le Pass-Through Explicite, illustré ici par l'extraction de données JSON stockées dans PostgreSQL.

Le Défi : Les limites de la traduction automatique

Lorsque vous écrivez une requête FedSQL classique, SAS© tente de la traduire en SQL natif pour l'envoyer à la base de données. Cependant, si votre requête contient des opérateurs que SAS© ne connaît pas, la traduction échoue ou SAS© tente de rapatrier toutes les données pour les traiter localement.

Prenons le cas de PostgreSQL, qui possède d'excellentes capacités de traitement JSON via des opérateurs spécifiques comme -> ou ->>. Si vous utilisez ces symboles directement dans une requête FedSQL standard, vous obtiendrez une erreur de syntaxe, car l'interpréteur SAS© ne les reconnaît pas.

La Solution : Le Pass-Through Explicite

La solution consiste à utiliser la clause CONNECTION TO. Cette syntaxe crée un "tunnel" direct vers la base de données.

Le principe est simple : Tout ce qui est écrit à l'intérieur de la clause de connexion est invisible pour l'interpréteur SAS©/FedSQL. SAS© se contente de prendre la chaîne de caractères et de la passer telle quelle au moteur PostgreSQL.

Syntaxe Générale

1PROC FEDSQL sessref=ma_session;
2 create TABLE cas.ma_table_cible as
3 select * from CONNECTION TO nom_de_la_caslib
4 (
5 /* Code SQL Natif (Postgres, Oracle, etc.) */
6 /* Invisible pour SAS */
7 );
8QUIT;

Cas Concret : Analyse de données JSON

Imaginons une table PostgreSQL contenant une colonne data_json stockant des informations brutes. Nous voulons extraire un champ spécifique de ce JSON et calculer une agrégation, sans jamais charger le JSON brut dans CAS (ce qui serait lourd et inutile).

Le Code

1PROC FEDSQL sessref=mysession;
2 create TABLE cas.synthese_ventes as
3 select region, total_ventes
4 from connection to ma_lib_postgres
5 (
6 /* Début du code natif PostgreSQL */
7 SELECT
8 /* Extraction de la clé 'region' dans l'objet JSON */
9 data_json ->> 'region' as region,
10 /* Extraction et conversion de la clé 'montant' */
11 SUM(CAST(data_json ->> 'montant' as INTEGER)) as total_ventes
12 FROM
13 ventes_brutes_json
14 GROUP BY
15 data_json ->> 'region'
16 /* Fin du code natif PostgreSQL */
17 );
18QUIT;

Analyse Technique

Voici pourquoi cette approche est optimale :

  1. L'Invisibilité pour l'interpréteur (Black Box) : L'interpréteur FedSQL ne "voit" pas les opérateurs -> et ->>. Il ne tente donc pas de les valider. S'il les voyait, il renverrait une erreur de syntaxe car ces symboles n'existent pas dans le standard SQL ANSI supporté par SAS©. C'est PostgreSQL qui reçoit la chaîne brute et l'interprète.

  2. Utilisation des Opérateurs Natifs :

    • -> : Récupère un champ d'objet JSON sous forme d'objet JSON.

    • ->> : Récupère un champ d'objet JSON sous forme de texte (String). Ces opérateurs permettent de naviguer dans la structure hiérarchique des données directement au niveau du moteur de stockage.

  3. Performance et "Data Movement" : C'est le point crucial.

    • Sans Pass-Through Explicite : Il faudrait charger toute la table (avec le JSON lourd) dans CAS, puis essayer de parser le texte avec des fonctions SAS© complexes. Cela consomme énormément de mémoire et de réseau.

    • Avec Pass-Through Explicite : PostgreSQL effectue l'extraction JSON et l'agrégation ("lourde"). Le serveur CAS ne reçoit que le résultat final : une petite table de synthèse ("petite table prête à l'emploi").

Le Pass-Through Explicite via CONNECTION TO est indispensable pour les utilisateurs avancés de SAS© Viya. Il permet de briser les barrières du langage FedSQL standard pour exploiter 100% des capacités de vos bases de données (parsing JSON, XML, indexation spécifique), tout en minimisant drastiquement les mouvements de données vers le serveur CAS.