Package: dataflowutil
**DataFlowUtil**DataFlowUtiles una libreria que facilita la interacción con los servicios de Google Cloud Platform (GCP). A través de una serie de módulos y funciones, proporciona funcionalidades para conectarse y trabajar con diferentes servicios de GCP, Adicionalmente,DataFlowUtilofrece capacidades de procesamiento y verificación de datos para garantizar la calidad y utilidad de la información manejada.Actualmente SoportaConexión a Buckets de GCPConexión a BigQuery GCP:Conexión a Google Sheets APIProcesamiento de DatosComprobación de DatosImportacion de ClasesLas clases que posee la libreria son:fromdataflowutil.configimportextra_varasextra_vfromdataflowutil.libsimportapp_structasappFunciones de la Libreriaload_data(db,reduce_memory=False)get_load_data()get_load_data_local()get_only_data(tag="")get_only_data_local(tag="")get_data_compare(tag="")get_list_blobs()upload_data_buckets()upload_load_data()start_check_historic(tag="")start_check_new(tag="")run_routine(name_project,dataset,procedure)run_transfer(project_number,location,transfer_config_id)select_query(query)Explicación Funcionesload_data :Encargada en la carga de datos, el cual recibe 2 argumentos: 'db' y 'reduce_memory', cuandoreduce_memoryesta enTRUEevitara guardar todas las bases en memoria lo cual procede a cargar la base y subirla a bigquery directamente. reduciendo el consumo de memoria.IMPORTANTELas funciones mencionadas a continuacion funcionan unicamente si el reduce_memory estan en FALSEget_load_data :Devuelve una lista con las datas obtenidas del bucket.get_load_data_local :Devuelve una lista con las datas obtenidas de nuestra maquina localget_only_data :Devuelve unicamente 1 data del bucket basada en el tag otorgadoget_only_data_local :Devuelve unicamente 1 data local basada en el tag otorgadoget_data_compare :Devuelve 2 elementos, data local y data bucket la cual nos ayuda a hacer comparaciones de las 2 datasget_list_blobs :Devuelve una lista de las rutas y archivos .xlsx y .csv que tenemos en nuestro bucket.upload_data_buckets :Se encarga de almacenar la data local al bucketupload_load_data :Se encarga de obtener la data del bucket y subirla a bigquerystart_check_historic :Es la encargada de hacer comprobaciones de correracion , dtype, nulos, entre otras verificaciones entre la data del bucket y nuestra data local. (unicamente comprobaciones con datos historicos.)start_check_new:Se encarga en comprobar los nuevos registros de la data, verificando unicamente los nuevos registros, dejando a un lado datos historicosrun_routine:Esta funciona se conecta  al cuenta de servicios y se encarga en correr rutinas de BigQuery.run_transfer:Es la encarga de correr el servicio de trasferencia de datos de BigQueryselect_query:Esta funcion realiza consultas sql que se envian a bigquery.Configuracion y Creacion Del ProyectoPara la creacion y configuracion de un nuevo proyecto es necesito ciertos pasos para el funcionamiento de la libreria.Se necesita configurar el proyecto con los siguientes pasos mencionados:Adentro del siguienterepositoriose encontraran 2 subfolders
1.files_configuration: el cual posee los 2 spreadsheet de configuracion que estaran ubicados en el google drive.2.project_template: los archivos de esta carpeta son esenciales a la hora de crear un nuevo proyecto, en esta carpeta se encuentranCarpetas:Credentials,UploadPy:main_process_1,main_process_2,main_process_comprobation,dataLink RepositorioConfiguracion SpreadSheetsEstos archivos van ubicados en google drive.En la carpetafiles_configurationestara 2 spreadsheets llamadosDataFlowUtil Production.xlsxyDataFlowUtil Production.xlsxlos cuales tienen la misma estructura solo que uno se usa para produccion y el otro para testing. Estos archivos contienen 3 Hojas, las cuales son :DATA_LOCAL_TO_BUCKETSe encarga de configurar el upload de nuestra data local al bucket:DATA_BUCKET_TO_BIGQUERYSe encarga de configurar el upload de nuestra data bucket a bigqueryDATA_COMPARESe encarga de comparar la data del bucket con la data localPATH_LOCAL :Esta variable tendra la dirrecion y el nombre de la data que esta ubicada en la carpetauploadPATH_BUCKET :Esta variable tendra la ruta donde el proceso envia la data local al bucket.UPDATE :Esta variable esta basada en 2 status , status 0 / 1 , cuando el status es 0 quiere decir que el proceso solo aplicara cambios a esa data no a todas, y si status es 1 el proceso no tomara esa data.TAG/DB_NAME :Esta variable se encarga de otorgarle un tag a esa data , la cual tomara como refenrencia y a la hora de subir la data a bigquery creara la tabla basado en ese tagSHEET_PAGE :Se define en que pagina del excel esta la data que se quiere carga a bigquery, si se quiere concatenar 2 paginas en 1 , el valor seria ejemplo : 0-3, quiere decir que va a concatenar la pagina 0 y la pagina 3 y creara 1 dataframe.Configuracion Carpeta CredentialsEn la carpetacredentialsse encontrara 2 archivos llamadosconnection_testing.iniyconnection_production.inilos cuales se encargan en la configuracion de las conexiones de BigQuery, Buckets, Google Sheets. Y dentro de esa misma carpeta es necesario colocar lascuentas de serviciode google.Ejemplo:Los archivosconnection_testing.iniyconnection_production.inimanejan la misma estructura lo unico que cambia son las conexiones a las cuales van dirigidas.Estructura:[Config.Credentials]credentials_path=cuenta_servicio_production.json[Config.Bucket]bucket_path=gs://bucket_path/bucket_name=bucket_name[Config.BigQuery]project_id=project_id_bigqueryname_db_bigquery=name_db_bigquery[Config.SpreadSheets]id_spread_sheets=0000000page_sheet_local_to_bucket=DATA_LOCAL_TO_BUCKETpage_sheet_bucket_to_bigquery=DATA_BUCKET_TO_BIGQUERYpage_sheet_data_compare=DATA_COMPAREConfiguracion Carpeta UploadAdentro de la carpetauploadvan nuestras bases de datos locales, ya sea.xlsxo.csvlas cuales se van a subir a nuestro bucketConfiguracion Archivos PythonEn la carpeta encontraran 3 archivos python los cuales son:main_process_1main_process_2main_process_comprobationdataImportante:  antes de ejecutar los siguientes procesos se tiene que tener configurado las credenciales en el proyecto y los spreedsheet ubicados en google driveNota: Todos estos procesos va de la mano con los spreedsheet de configuracion.Main_Process_1SpreedSheet de configuracion: DATA_LOCAL_TO_BUCKETEste proceso sera el encargado de detectar la data que esta guardada en la carpeta upload y subirla a nuestro bucketMain_Process_2######SpreedSheet de configuracion: DATA_BUCKET_TO_BIGQUERY
Este proceso sera el encargado de detectar la data que esta guardada en bucket y subirla a bigqueryMain_Process_Comprobation######SpreedSheet de configuracion: DATA_COMPARE
Este proceso sera el encargado mediante diferente funciones de hacer comprobaciones de correacion, entre la data local y la data del bucket, garantizando un upload de data al bucket sin errores.dataEste .py va en conjunto con los procesos mencionados anteriormente, este archivo sera el encargado de hacerle transformaciones a la data cargada.La estructura default de este archivo sera:Si queremos hacerle un ETL a una data antes de subirla a bigquery, lo podemos hacer teniendo de referencia el *TAG/DB_NAMEmencionado anteriormente, Teniendo ya nuesto *TAG/DB_NAMEubicado, procedemos a crear el ETL, en este caso se usara el tagnew_data_kpis, los pasos seran los siguientes:Importante: Estos pasos se adaptaran a cualquier otra data, Solo cambiaria el *TAG/DB_NAMECreamos unselfcon el nombre del *TAG/DB_NAME, nos quedaria ,self.new_data_kpis()Copiamos la plantilla del def y editamos lo que dicename_datapor el nombre de nuestro *TAG/DB_NAMEAntes:@dp.DataProcessing.transformation(name_tag="name_data")defname_data(self,data):# Var "data" is dataframe variable# use var "data" for transformationsreturndataDespues:@dp.DataProcessing.transformation(name_tag="new_data_kpis")defnew_data_kpis(self,data):# Var "data" is dataframe variable# use var "data" for transformationsreturndataTeniendo nuestra funcion creada procedemos a hacerle el ETL correspondiente, en este caso vamos a agregarle 3 columnas nuevas llamadaskpi1,kpi2ysumdonde el def nos quedaria de la siguiente manera:@dp.DataProcessing.transformation(name_tag="new_data_kpis")defnew_data_kpis(self,data):# Var "data" is dataframe variable# use var "data" for transformationsdata["kpi1"]=1data["kpi2"]=10data["sum"]=data["kpi1"]+data["kpi2"]returndataNuestro codigo final nos quedaria de esta manera:Si queremos agregar otra data para hacerle un ETL especifico , el codigo final nos quedaria de la siguiente manera: