/****************************************************************************** * Programme : Conector de datos Amazon Redshift * Reference : CONECTBF2E * Source : https://www.wearecas.eu/en/sampleCode/CONECTBF2E ******************************************************************************/ /* --- BLOC 1 --- */ /* Establece una conexión sencilla a una base de datos Amazon Redshift. */ caslib redshift_lib_basic desc='Caslib Redshift Básica' dataSource=(srctype='redshift', server='redshift-server.example.com', /* Reemplace por su servidor Redshift */ username='redshift_user', password='your_redshift_password', database='your_redshift_database'); /* Verificar que la caslib esté bien definida */ proc cas; table.caslibinfo caslib='redshift_lib_basic'; run; quit; /* --- BLOC 2 --- */ /* Creación de una caslib básica si no existe */ caslib redshift_lib_load desc='Caslib Redshift para Carga' dataSource=(srctype='redshift', server='redshift-server.example.com', /* Reemplace por su servidor Redshift */ username='redshift_user_load', password='your_redshift_password_load', database='your_redshift_database_load'); /* Cargar una tabla 'my_redshift_table' existente de Redshift en CAS */ /* Las credenciales pueden ser sobrescritas a nivel de procedimiento */ proc casutil; list files incaslib="redshift_lib_load"; /* Lista las tablas disponibles en la caslib Redshift */ load casdata="my_redshift_table" incaslib="redshift_lib_load" outcaslib="casuser" casout="my_cas_table_from_redshift" dataSourceOptions=( username='user_override', /* Sobrescribe el usuario */ password='password_override' /* Sobrescribe la contraseña */ ) ephem=TRUE; /* ephem=TRUE para una tabla temporal */ list files incaslib="casuser"; /* Verifica la presencia de la nueva tabla CAS */ contents casdata="my_cas_table_from_redshift" incaslib="casuser"; quit; /* --- BLOC 3 --- */ /* 1. Crear una tabla SAS en memoria (CAS) para la carga */ data casuser.sample_data; length id 8 name $20 score 8; input id name $ score; datalines; 1 John 85 2 Jane 92 3 Mike 78 4 Emily 95 ; run; /* 2. Establecer una conexión a Redshift con opciones de carga masiva */ caslib redshift_lib_bulk desc='Caslib Redshift para Carga Masiva' dataSource=(srctype='redshift', server='redshift-server.example.com', /* Reemplace */ username='redshift_user_bulk', password='your_redshift_password_bulk', database='your_redshift_database_bulk', bucket='your-s3-bucket-name', /* Reemplace por su bucket S3 */ region='us-east-1', /* Reemplace por su región AWS */ bulkLoad=TRUE, /* Activar la carga masiva */ deleteDataFiles=TRUE, /* Elimina los archivos temporales en S3 después de la carga */ blFormat='PARQUET' /* Utiliza el formato Parquet para la transferencia S3 */ ); /* 3. Cargar la tabla CAS en Amazon Redshift utilizando la carga masiva */ proc casutil; save casdata="sample_data" incaslib="casuser" outcaslib="redshift_lib_bulk" casout="sample_redshift_table" replace; /* replace=TRUE si la tabla Redshift ya existe */ quit; /* --- BLOC 4 --- */ /* Establece una conexión SSO a una base de datos Amazon Redshift */ caslib redshift_lib_sso desc='Caslib Redshift con SSO' dataSource=(srctype='redshift', server='myserver.redshift.amazonaws.com', /* Reemplace */ username='myuserid', /* Reemplace por su ID de usuario */ database='myuserdb', /* Reemplace por su base de datos Redshift */ region='us-east-1', /* Reemplace por su región AWS */ authMethod='IAM', /* Utiliza la autenticación IAM para SSO */ clusterId='dbrs1', /* Reemplace por el ID de su clúster Redshift */ authenticationScope='api://a09827234-93eo-092fjas1-92038498273/awsassumerole', /* Reemplace */ awsIAMassumeRoleARN='arn:aws:iam::129347192347098273:role/myrolename' /* Reemplace */ ); /* Verificar que la caslib esté bien definida */ proc cas; table.caslibinfo caslib='redshift_lib_sso'; run; quit;