Boîte à outils SAS/ACCESS to Netezza

Vous trouverez, sur cette page, quelques PROC SQL SAS, en explicit SQL Pass-Through, prete à l'emploi. Ces extraits de code SAS sont utiles pour obtenir un certain nombre d'informations sur votre base de données , lorsque vous travaillez avec SAS/ACCESS interface to Netezza. Sessions utilisateurs 
%let netezza_server='server';
%let netezza_database='base';
%let netezza_user='login';
%let netezza_password='mot_de_passe';
proc sql; 
 connect to netezza(
SERVER=netezza_server 
database=netezza_database 
USER=netezza_user 
PASSWORD=netezza_password); 
 create table _t_sessctx as 
 select * from connection to netezza 
 (select * from _t_sessctx;); 
quit;
table_netezza Vous pouvez ajouter des conditions à la requete :
select * from _t_sessctx WHERE session_state_name='active'
AND client_type_name='sql-odbc' AND client_os_username='sasdemo';
Dans l'exemple ci-dessus, je liste les sessions actives pour l'utilisateur système "sasdemo" et utilisant "sql-odbc". Sasdemo est l'utilisateur exécutant le workspace SAS.   L'id de la session courante
select current_sid;
Liste des tables systèmes Netezza et description
proc sql; 
 connect to netezza(SERVER=netezza_server 
database=netezza_database 
USER=netezza_user 
PASSWORD=netezza_password); 
 create table table_system as 
 select * from connection to netezza 
 (SELECT sr.objname, v.virdescr, v.virprevname, v.virstatus 
FROM _v_sys_relation sr
 INNER JOIN _t_virtual v 
ON sr.objid = v.virrelid); 
quit;

Avoir une estimation du nombre de ligne d'une table Netezza

Il s'agit d'une estimation basée sur les tables systèmes Netezza. 
proc sql; 
 connect to netezza(SERVER=netezza_server 
database=netezza_database 
USER=netezza_user 
PASSWORD=netezza_password); 
 SELECT TABLENAME, RELTUPLES FROM NTZ_ECD._V_TABLE where objtype = 'TABLE' ORDER BY RELTUPLES;
quit;
RELTUPLES-estimation-taille-table-netezza

Décrire les métadonnées d'une table/vue Netezza ( describe d'une table/vue Netezza)

Il n'y a pas d'option descirbe pour décrire les métadonnées de colonne dans Netezza. Il est toutefois possible d'utiliser le code SAS ci-dessous :
proc sql; 
 connect to netezza(
SERVER=netezza_server 
database=netezza_database 
USER=netezza_user 
PASSWORD=netezza_password); 
 create table ntz_table as 
 select * from connection to netezza 
 (SELECT  
tablename,
   attname       AS COL_NAME,
   b.FORMAT_TYPE AS COL_TYPE,
   attnum        AS COL_NUM
FROM _v_table a
   JOIN _v_relation_column b
   ON a.objid   = b.objid
WHERE a.tablename = 'NOM_DE_LA_TABLE'
ORDER BY attnum;); 
quit;
sas-describe-table-netezza   La même proc sql pour les vues (requete sur la table système netezza _v_view ) Exemple avec la vue _V_VIEW_STORAGE_STAT
proc sql; 
 connect to netezza(
SERVER=netezza_server 
database=netezza_database 
USER=netezza_user 
PASSWORD=netezza_password); 
 create table ntz_view as 
 select * from connection to netezza 
 (SELECT  
*
FROM _v_view a
   JOIN _v_relation_column b
   ON a.objid   = b.objid
   WHERE a.VIEWNAME = '_V_VIEW_STORAGE_STAT'
ORDER BY attnum;); 
quit;
Ce qui donne : sas-netezza-describe-vue

Vérifier les sessions / requêtes actives Netezza

proc sql; 
 connect to netezza(
SERVER=netezza_server 
database=netezza_database 
USER=netezza_user 
PASSWORD=netezza_password); 
 create table _t_sessctx as 
 select * from connection to netezza 
 (select q.qs_sessionid,
q.qs_planid,
q.qs_clientid,
s.dbname,
s.username,
s.TYPE SESSION_TYPE,
s.STATUS SESSION_STATUS,
s.PRIORITY SESSION_PRIORITY,
q.qs_cliipaddr,
q.QS_STATE,
substr(q.qs_sql,1,200),
case
when q.qs_state = 1 then 'pending'
when q.qs_state = 2 then 'queued'
when q.qs_state = 3 then 'running'
when q.qs_state = 4 then 'aborted'
when q.qs_state = 5 then 'done'
else 'unknown'
end QS_STATE_DESCRIPTION,
q.qs_tsubmit+t.tzoffset qs_tsubmit,
q.qs_tstart+t.tzoffset tzoffset,
case when q.qs_tstart = t.EPOCH then 0 else abstime 'now' - q.qs_tstart end running_duration,
q.qs_pritxt,
q.qs_estcost,
q.qs_estdisk,
q.qs_estmem,
q.qs_snippets,
q.qs_cursnipt,
q.qs_resrows,
q.qs_resbytes
from _v_qrystat q,
_v_session s,
_vt_pg_time_offset t
where q.qs_sessionid = s.id); 
quit;

Notes

Vous pouvez exécuter ces requêtes dans SAS ou dans un outil SQL ( en supprimant le code SAS nécessaire à l’exécution de la proc SQL). J'utilise Dbeaver et le jar jdbc nzjdbc.jar pour permettre la connexion.

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.