def carga(self): datos_conx = Util.obt_datos_conx('conx_oracle') prop_conx = Util.obt_prop_driver(datos_conx['driver']) url_jdbc = datos_conx['url_jdbc'] self.df_sp_campanias.write.jdbc(url=url_jdbc, table="ADS_INFO_CAMPANIA", mode='append', properties=prop_conx)
def trace_error(exctype, value, tb): obj_traceback = Traceback(tipo=exctype, valor=value, traceback=tb) dto_logger = Logger(txt_trace=tb, fase_etl='', nom_script='', fec_proceso=Util.obt_fecha_actual(), estatus='') dto_logger.fec_proceso = Util.obt_fecha_actual() dto_logger.txt_trace = tb obj_logger_txt = LoggerTxt(obj_traceback, dto_logger) obj_logger_txt.persiste()
def limpieza_de_anuncios(self): txt_anuncios = Util.lee_fichero_de_configuracion( nom_fichero='anuncios.properties') dao_extrac_prop = adminDao.AdministradorDao(DaoProp.DaoExtraccionProp, txt_anuncios, 'estadistica_anuncios').dao dict_prop_anuncios = dao_extrac_prop.obten() anuncios = Util.pandas_a_spark(self.sql_context, self.anuncios) anuncios.registerTempTable('anuncios') return self.sql_context.sql( "select " + str(dict_prop_anuncios['atributos_estadisticos']) + ' from anuncios')
def extrae(self): dao_anuncio = adminDao.AdministradorDao(daoCon.DaoEstadisticaAnuncio, self.dto_credenciales).dao detalle_de_anuncios = dao_anuncio.obten() detalle_de_anuncios['data_date_part'] = Util.obt_fecha_actual() self.anuncios = Util.pandas_a_spark(self.sql_context, detalle_de_anuncios) # Registro de funciones UDF self.sql_context.udf.register("excluye_carac_espec", lambda x: elimina_carac_especial(x)) self.sql_context.udf.register("obt_nom_atributo", lambda x: obt_nom_atributo(x)) self.sql_context.udf.register("obt_val_atributo", lambda x: obt_val_atributo(x))
def carga(self): datos_conx = Util.obt_datos_conx('conx_oracle') prop_conx = Util.obt_prop_driver(datos_conx['driver']) url_jdbc = datos_conx['url_jdbc'] self.df_sp_detalle_de_campanias.write.jdbc(url=url_jdbc, table="FB_DETALLE_CAMPANIA", mode='append', properties=prop_conx) # Guarda en object storage csv nom_archivo = 'detalle_de_campania_' + Util.obt_cadena_fecha_actual( ) + '.csv' nom_ruta_hdfs = 'oci://bdcsce@axk8tyxiw9wz/facebook/marketing/campania/' + nom_archivo self.df_sp_detalle_de_campanias.coalesce(1).write.format( 'com.databricks.spark.csv').save(nom_ruta_hdfs, header='true')
def limpia_detalle_de_campanias(self): txt_conf_campanias = Util.lee_fichero_de_configuracion( nom_fichero='campanias.properties') dao_extrac_prop = adminDao.AdministradorDao(DaoProp.DaoExtraccionProp, txt_conf_campanias, 'campania').dao dict_conf_campanias = dao_extrac_prop.obten() campanias = Util.pandas_a_spark(self.sql_context, self.detalle_de_campanias) campanias.registerTempTable('campanias') return self.sql_context.sql("select " + str(dict_conf_campanias['atributos']) + ' from campanias')
def carga(self): datos_conx = Util.obt_datos_conx('conx_oracle') prop_conx = Util.obt_prop_driver(datos_conx['driver']) url_jdbc = datos_conx['url_jdbc'] # Guarda a oracle self.estadistica_de_anuncios.write.jdbc( url=url_jdbc, table="FB_ESTADISTICA_ANUNCIOS", mode='append', properties=prop_conx) # Guarda en object storage csv nom_archivo = 'estadistica_de_anuncio_' + Util.obt_cadena_fecha_actual( ) + '.csv' nom_ruta_hdfs = 'oci://bdcsce@axk8tyxiw9wz/facebook/marketing/anuncio/' + nom_archivo self.estadistica_de_anuncios.coalesce(1).write.format( 'com.databricks.spark.csv').save(nom_ruta_hdfs, header='true')
def transforma(self): grupo_campanias = list() for campania in self.listado_de_campanias: dao_campania = adminDao.AdministradorDao(daoCon.DaoCampania, campania, self.dto_credenciales).dao info_campania = dao_campania.obten_info_campania() grupo_campanias.append(info_campania) df_total_campanias = self.concentra_todos_anuncios(grupo_campanias) self.df_sp_campanias = Util.pandas_a_spark(self.sql_context, df_total_campanias) self.df_sp_campanias.show()
def transforma(self): df_acciones = self.obten_acciones(self.anuncios) df_costo_de_acciones = self.obten_costo_por_accion(self.anuncios) self.acciones_y_costos_de_anuncios = df_acciones \ .join(df_costo_de_acciones, (df_acciones.AD_ID == df_costo_de_acciones.AD_ID) & (df_acciones.ATRIBUTO == df_costo_de_acciones.ATRIBUTO)) \ .select(df_acciones.CAMPAIGN_ID, df_acciones.AD_ID, df_acciones.ATRIBUTO.alias('ACTION'), df_acciones.VALOR.alias('VALUE'), df_costo_de_acciones.VALOR.alias("COST_VALUE")).\ withColumn('DATA_DATE_PART', lit(Util.obt_fecha_actual())) self.acciones_y_costos_de_anuncios.show()
def obten(self): fragmentos_desgloses = list() grupo_de_consultas = self.obten_grupo_de_consultas_curl() for nom_desglose, consulta_desglose in grupo_de_consultas: json_desglose = self.ejecuta_curl(consulta_desglose) dict_desglose = json.loads(json_desglose) if 'data' in dict_desglose: df_desglose = pd.DataFrame(dict_desglose['data']) df_desglose['nom_desglose'] = nom_desglose df_desglose['data_date_part'] = Util.obt_fecha_actual() fragmentos_desgloses.append(df_desglose) total_de_desgloses = pd.concat(fragmentos_desgloses, axis=0, ignore_index=True, sort=False) return total_de_desgloses
def persiste(self): ruta = "/u01/app/oracle/tools/home/oracle/facebook_marketing/Ingesta_insumo/" nom_fichero_log = ruta + "logs/log_facebook_" + Util.obt_cadena_fecha_actual( ) + '.log' with adminDao.AdministradorDeFicheros(nom_fichero_log, 'a+') as fichero: fichero.write( '***************************************************\n') fichero.write('Nombre_script:' + str(self.dto_logger.nom_script) + '\n') fichero.write('Fase_etl: ' + str(self.dto_logger.fase_etl) + '\n') fichero.write('Seccion_etl: ' + str(self.dto_logger.estatus) + '\n') fichero.write('Fec_proceso: ' + str(self.dto_logger.fec_proceso) + '\n') fichero.write('Trace: ' + str(self.dto_logger.txt_trace) + '\n') fichero.write('Valor: ' + str(self.obj_traceback.valor) + '\n') fichero.write('Tipo: ' + str(self.obj_traceback.tipo) + '\n')
def obten_prop_de_desglose(self): txt_desglose = Util.lee_fichero_de_desglose() dao_conf_desglose = adminDao.AdministradorDao(DaoProp.DaoExtraccionProp, txt_desglose, 'desglose_generico').dao return dao_conf_desglose
def extrae(self): dao_anuncio = adminDao.AdministradorDao(daoCon.DAOAnuncio, self.dto_credenciales).dao self.anuncios = dao_anuncio.obten() self.anuncios['data_date_part'] = Util.obt_fecha_actual()
return df_total_campanias gpo_anunc_con_detalle = list() dto_credenciales = Dto.DtoCredenciales( id_cuenta='act_804059193122922', token_de_acceso='EAAFqYKPZBGTwBAESZB1MgH3tnZCBt0Ny4LRQ8OhbL' 'sEgXvW7hDddhlHsHUqnrlu3KDlIII7qPgr501HZCJQQuZBK8z' 'vMQegVrBiTB1IILpOI1YYMLd8b5dp25ZCvd7yNZAukSioGZCyH' 'ADl4XE331SRUSZB275Dgav9uXpqfTtMLlbwZDZD', id_usuario='', id_app='', id_pagina='', app_secreta='') nom_archivo = Util.lee_fichero_campanias() dao_conf_campania = adminDao.AdministradorDao(DaoProp.DaoExtraccionProp, nom_archivo, 'campania').dao dict_columnas = dao_conf_campania.obten() # Contador contador = 0 for anuncio in grupo_de_anuncios.values.tolist(): if contador == 4: nom_archivo = 'hist_anuncios_' + Util.obt_fecha_actual() + '.csv' print(nom_archivo) dfrm_total_anuncios = union_de_drfms_pandas(gpo_anunc_con_detalle) df_sp_total_anuncios = Util.pandas_a_spark(sql_context, dfrm_total_anuncios)
def concentra_todos_anuncios(self, grupo_campanias): df_total_campanias = pd.concat(grupo_campanias, ignore_index=True, sort=True) df_total_campanias['data_date_part'] = Util.obt_fecha_actual() return df_total_campanias
def extrae(self): dao_campania = adminDao.AdministradorDao(daoCon.DAOCampania, self.dto_credenciales).dao self.detalle_de_campanias = dao_campania.obten() self.detalle_de_campanias['data_date_part'] = Util.obt_fecha_actual()