Publié le :
ETL EXTERNE

Chargement de données PostgreSQL vers CAS avec PROC CASUTIL et options multi-nœuds

En attente de validation
Le script initialise une session CAS, configure une caslib pour se connecter à une base de données PostgreSQL, puis charge la table 'film' dans CAS. Il démontre l'utilisation de `PROC CASUTIL` pour charger des données avec des options spécifiques telles que `sliceColumn` et `sliceExpressions` pour optimiser le chargement multi-nœuds. Il inclut également des étapes pour afficher et nettoyer les fichiers de trace du connecteur de données.
Analyse des données

Type : EXTERNE


Les données proviennent de la base de données PostgreSQL 'dvdrental' sur le serveur 'myserver', spécifiquement de la table 'film'. La connexion est établie via une caslib nommée 'caspg' avec des identifiants et des paramètres de trace spécifiés.

1 Bloc de code
CAS COMMAND / MACRO EXECUTION
Explication :
Initialise une session CAS nommée 'mySession' avec les options de métriques activées. Définit des variables macro pour spécifier le chemin et le préfixe des fichiers de trace du connecteur de données SAS. Affiche l'ID utilisateur actuel. Configure les options SAS pour le niveau de message `i` (informatif). Exécute la macro `%deleteTraceFiles` (supposée nettoyer les traces précédentes) et supprime la caslib 'caspg' si elle existe.
Copié !
1cas mySession sessopts=(metrics=true) ;
2 
3%let dclogpath=/gelcontent/demo/DM/DATA/LOG ;
4%let logprefix=&sysuserid._sasdcpg_ ;
5 
6%put My Userid is: &sysuserid ;
7 
8options msglevel=i ;
9 
10%deleteTraceFiles(dclogpath=&dclogpath,logprefix=&logprefix) ;
11caslib caspg drop ;
12 
2 Bloc de code
CASLIB DEFINITION
Explication :
Définit une caslib nommée 'caspg' pour établir une connexion avec une base de données PostgreSQL. Elle spécifie les paramètres de connexion tels que le serveur, la base de données, le schéma et les identifiants. Les options `numreadnodes` et `numwritenodes` sont réglées pour tenter une configuration multi-nœuds. Des options de traçage détaillées pour le pilote de données sont activées, spécifiant le fichier de trace et les options d'enregistrement.
Copié !
1/* Set the numreadnodes parameter high so the log tells us CAS is attempting multi-node load */
2/* Set some tracing options */
3caslib caspg datasource=(srctype="postgres",username="myuser",password="mypw",server="myserver",
4 database="dvdrental",schema="public",numreadnodes=10,numwritenodes=10,
5 DRIVER_TRACE="SQL",
6 DRIVER_TRACEFILE="&dclogpath/&logprefix.$SAS_CURRENT_HOST.log",
7 DRIVER_TRACEOPTIONS="TIMESTAMP|APPEND") libref=caspg ;
8 
3 Bloc de code
PROC CASUTIL
Explication :
Utilise `PROC CASUTIL` pour lister les fichiers et les tables disponibles via la caslib 'caspg'. Cela permet de vérifier la connexion et de voir les objets accessibles dans la source de données externe.
Copié !
1/* List source files and target tables */
2PROC CASUTIL incaslib="caspg" ;
3 list files ;
4 list tables ;
5QUIT ;
6 
4 Bloc de code
PROC CASUTIL Data
Explication :
Supprime la table CAS cible si elle existe (pour éviter les conflits). Charge ensuite la table 'film' depuis la source PostgreSQL vers la caslib CAS 'caspg', en créant une table CAS nommée avec le nom d'utilisateur. La commande `list tables` confirme le chargement.
Copié !
1/* Load the FILM PostgreSQL table in CAS in multi-node mode */
2/* Drop the CAS table before in case it exists */
3/* List target tables */
4PROC CASUTIL incaslib="caspg" outcaslib="caspg" ;
5 droptable casdata="&sysuserid._PG_film" quiet ;
6 load casdata="film" casout="&sysuserid._PG_film" ;
7 list tables ;
8QUIT ;
9 
5 Bloc de code
MACRO CALLS
Explication :
Affiche le contenu des fichiers de trace générés par le connecteur de données SAS pour la session en cours. Ensuite, supprime ces fichiers de trace pour nettoyer. `%displayTrace` et `%deleteTraceFiles` sont des macros personnalisées.
Copié !
1/* Display SAS Data Connector trace files */
2%displayTrace(dclogpath=&dclogpath,logprefix=&logprefix) ;
3 
4/* Delete the SAS Data Connector trace files */
5%deleteTraceFiles(dclogpath=&dclogpath,logprefix=&logprefix) ;
6 
6 Bloc de code
PROC CASUTIL Data
Explication :
Charge à nouveau la table 'film' depuis PostgreSQL vers CAS, en utilisant l'option `replace` pour écraser la table existante. L'option `sliceColumn='length'` est utilisée pour spécifier une colonne qui peut être utilisée pour le partitionnement ou le découpage des données, potentiellement pour améliorer les performances multi-nœuds.
Copié !
1/* Force the multi-node mode to use the LENGTH column */
2PROC CASUTIL incaslib="caspg" outcaslib="caspg" ;
3 load casdata="film" casout="&sysuserid._PG_film" options=(sliceColumn="length") replace ;
4 list tables ;
5QUIT ;
6 
7 Bloc de code
MACRO CALLS
Explication :
Affiche et supprime les fichiers de trace du connecteur de données SAS. `%displayTrace` et `%deleteTraceFiles` sont des macros personnalisées.
Copié !
1/* Display SAS Data Connector trace files */
2%displayTrace(dclogpath=&dclogpath,logprefix=&logprefix) ;
3 
4/* Delete the SAS Data Connector trace files */
5%deleteTraceFiles(dclogpath=&dclogpath,logprefix=&logprefix) ;
6 
8 Bloc de code
PROC CASUTIL Data
Explication :
Charge à nouveau la table 'film', en spécifiant explicitement `numreadnodes=2` pour utiliser deux nœuds de lecture. L'option `sliceExpressions` est utilisée pour définir des conditions de découpage (`length < 100` et `length >= 100`), ce qui permet de répartir le chargement des données en fonction de ces expressions. `replace` écrase la table existante et `copies=0` évite la création de copies inutiles.
Copié !
1/* Force the multi-node mode to use slicing expressions on the LENGTH column */
2PROC CASUTIL incaslib="caspg" outcaslib="caspg" ;
3 load casdata="film" casout="&sysuserid._PG_film" options=(numreadnodes=2 sliceExpressions=("length < 100","length >= 100")) replace copies=0 ;
4 list tables ;
5QUIT ;
6 
9 Bloc de code
MACRO CALLS
Explication :
Affiche et supprime les fichiers de trace du connecteur de données SAS. `%displayTrace` et `%deleteTraceFiles` sont des macros personnalisées.
Copié !
1/* Display SAS Data Connector trace files */
2%displayTrace(dclogpath=&dclogpath,logprefix=&logprefix) ;
3 
4/* Delete the SAS Data Connector trace files */
5%deleteTraceFiles(dclogpath=&dclogpath,logprefix=&logprefix) ;
6 
10 Bloc de code
CAS COMMAND
Explication :
Termine la session CAS nommée 'mySession' et libère les ressources associées.
Copié !
1cas mysession terminate ;
2 
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« Choisissez toujours une colonne numérique indexée dans PostgreSQL (comme une clé primaire ou une date) pour votre sliceColumn. Cela permet à la base de données de répondre beaucoup plus vite aux requêtes segmentées envoyées par les différents nœuds de calcul CAS. »