Code Monkey home page Code Monkey logo

huemulsolutions / huemul-bigdatagovernance Goto Github PK

View Code? Open in Web Editor NEW
11.0 4.0 8.0 1.3 MB

Huemul BigDataGovernance, es una framework que trabaja sobre Spark, Hive y HDFS. Permite la implementación de una estrategia corporativa de dato único, basada en buenas prácticas de Gobierno de Datos. Permite implementar tablas con control de Primary Key y Foreing Key al insertar y actualizar datos utilizando la librería, Validación de nulos, largos de textos, máximos/mínimos de números y fechas, valores únicos y valores por default. También permite clasificar los campos en aplicabilidad de derechos ARCO para facilitar la implementación de leyes de protección de datos tipo GDPR, identificar los niveles de seguridad y si se está aplicando algún tipo de encriptación. Adicionalmente permite agregar reglas de validación más complejas sobre la misma tabla.

License: Apache License 2.0

Scala 97.72% Shell 2.28%
bigdata spark-sql spark hive parquet data data-governance hadoop data-warehouse datamart

huemul-bigdatagovernance's Introduction

Huemul BigDataGovernance, es una librería que trabaja sobre Spark, Hive y HDFS. Permite la implementación de una estrategia corporativa de dato único, basada en buenas prácticas de Gobierno de Datos.

Permite implementar tablas con control de Primary Key y Foreing Key al insertar y actualizar datos utilizando la librería, Validación de nulos, largos de textos, máximos/mínimos de números y fechas, valores únicos y valores por default. También permite clasificar los campos en aplicabilidad de derechos ARCO para facilitar la implementación de leyes de protección de datos tipo GDPR, identificar los niveles de seguridad y si se está aplicando algún tipo de encriptación. Adicionalmente permite agregar reglas de validación más complejas sobre la misma tabla.

Facilita la configuración y lectura de las interfaces de entrada, permitiendo ajustar los parámetros de lectura en esquemas altamente cambientes, crea trazabilidad de las interfaces con las tablas en forma automática, y almacena los diccionarios de datos en un repositorio central.

Finalmente, también automatiza la generación de código a partir de las definiciones de las interfaces de entrada, y la creación del código inicial de lógica de negocio.

¿Cómo Funciona?

El diseño de Huemul BigDataGovernance está pensado en optimizar el tiempo de desarrollo de los analistas de datos, y al mismo tiempo aumentar la calidad y gobierno de los datos.

Utilizando una metodología sólida que permite a los ingenieros de tu equipo centrar sus esfuerzos en la definición de las interfaces de entrada, la definición de las tablas y la construcción de los procesos de masterización robustos.

Branching

¿Cómo se genera el código?

Hay dos formas de generar el código de tu solución

  1. La primera forma es generar el código desde cero utilizando los template que están disponibles acá.
  2. En la segunda forma solo debes crear la definición de tu interfaz de entrada utilizando el código de ejemplo "raw_entidad_mes.scala" (https://github.com/HuemulSolutions/BigDataGovernance_2.6.1_TemplateBase/blob/master/src/main/scala/com/yourcompany/yourapplication/datalake/raw_entidad_mes.scala), y luego puedes generar el código de tu tabla y el código de masterización en forma automática!. En el código de la tabla se implementa en forma automática validaciones de calidad de datos, y te permite agregar fácilmente otras validaciones más complejas.

Branching

Acelera los desarrollos en 5X y mejora la calidad de datos!

¿Sabías que, en promedio, deberías aplicar como mínimo 3 reglas de calidad de datos por cada columna?, es decir, en una tabla con 10 columnas deberías programar más de 30 reglas de validación (son más de 300 líneas de código si programas cada regla en 10 líneas). y esto es solo para asegurar la validez de tus datos, sin contar reglas de integridad, completitud y precisión.... y aún no has aplicado ninguna regla de transformación de negocio

Con Huemul BigDataGovernance, esas 300 líneas de código se reducen a 30 (1 línea por cada validación)... y además te entrega de forma automática documentación de tu proyecto.

Simplicidad y Eficiencia

Huemul BigDataGovernance permite reducir en forma importante el tiempo de desarrollo de tus proyectos BigData, aumentando la calidad de los datos, en el mismo código se definen las estructuras de datos, se crea automáticamente el diccionarios de datos, trazabilidad de la información, reglas de data quality, planes de pruebas y criterios de negocio, TODO AL MISMO TIEMPO!

Toda la documentación del proyecto siempre estará actualizada, cada vez que se ejecuta el código en producción se actualizan los diccionarios y respositorios de trazabilidad, nunca más tendrás que preocuparte por actualizar manualmente la documentación.

Modelo de Operación Basado en Buenas Prácticas de Gobierno de Datos

La implementación de todas estas etapas puede tardar más de una semana, con Huemul BigDataGovernance lo puedes hacer en unas pocas horas.

Branching

Debido al tiempo que demora implementar todas estas estapas, en la práctica solo se logra trabajar en la lógica de negocio sin DataQuality, los planes de pruebas y documentación de los procesos nunca se complentan adecuadamente, esto poniendo en riesgo el éxito de las soluciones analíticas.

La construcción de Huemul BigDataGovernance está basada en las buenas prácticas descritas en el DAMA-DMBOK2 (Data Management Body Of Knowledge), y permite agilizar el desarrollo de proyectos de BigData a nivel corporativo.

Metodología Flexible

El uso de la librería permite desarrollar en forma flexible tus proyectos de BigData. Trabajar directamente sobre los datos en bruto es una buena opción si tienes un proyecto puntual sobre una interfaz en particular, las transformaciones y validaciones que hagan no serán utilizadas por el resto de la organización (desde "A" hasta "D"). Si quieres juntar muchos datos desde distintas fuentes, la mejor estrategia será generar una base consolidada, donde el DataQuality sea implementado una sola vez, y toda la organización pueda acceder a los datos a validados.

Nuestra metodología permite implementar ambas estrategias a la vez

Branching

huemul-bigdatagovernance's People

Contributors

christian-sattler avatar dependabot[bot] avatar huemuldeveloper avatar sebasrod avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

huemul-bigdatagovernance's Issues

Agrega SortBy usando PK Definida

Para el SortBy utiliza el primer campo definido como PK que no sea la clave de partición (en caso de tablas transaccionales)

Log DQ

El log de DQ no guarda todos los casos con error

Expected behavior
Registrar en el Log de DQ los casos con error.

(P) Agregar campo con Info de DataQuality

Cuando se aplica DataQuality con warnings, el resultado de cada fila/campo se pierde (no se guarda en ninguna parte).

La idea de esta nueva funcionalidad es crear un campo en las tablas maestras y transaccionales, que permita agregar los warnings de dataquality, el campo se llamaría MDM_DataQualityResult y guardaría la información de la siguiente forma: [[NombreCampo]]=ReglaDQ;[[Nombrecampo2]]=OtraReglaDQ;[[NombreTabla]]=ReglaDQTabla

Si el campo está poblado, es porque alguna regla no se cumplió.

Las reglas solo se pueden guardar a nivel de filas, a nivel agrupado no tiene sentido, ya que todas las filas tendrían esa regla repetida

Agregar opción de cache en resultado final de masterización

Es necesario mejorar el rendimiento de la ejecución de DQ, por tanto cuando termina el proceso de generar el DF final, se debe dar la opción de dejar en cache.

Se debe agregar parámetro de cache en métodos executeOnlyInsert, ExecuteFull, executeOnlyUpdate, executeSelectiveUpdate

Si no se especifica o se envía null, no aplica cache.

El desarrollador que utilice esta opción, debe conocer las limitantes de memoria

(P) Aplicar DataQuality al Stock

Pueden haber tablas que ya existen en el ambiente, o datos que fueron cargados sin aplicar el 100% del DQ, para estos casos se debe ejecutar un DataQuality a nivel de stock.

Se debe evaluar si el resultado de este DQ se debe guardar en la misma estructura de PostreSQL, o generar una nueva tabla para almacenar exclusivamente este resultado.

Optimizar tiempo de uso de tablas al volver a cargarlas.

En vez de sobreescribir directamente el parquet al guardar una tabla, se puede crear una versión _new del parquet nuevo, luego borrar la anterior y luego cambiar el nombe de _new a la oficial. de esta forma se maximiza el tiempo de uso de este archivo, se evita que otros procesos que lo necesitan fallen.

Evaluar.

Abrir archivos RAW y devolver Dataset

Actualmente el método open de DataLake devuelve un objeto RDD. Esta nueva funcionalidad agrega un método que abre el archivo devolviendo un objeto DataSet.

Se debe crear un nuevo método similar a OpenFile.

Mostrar tiempo transcurrido en finalización de proceso

Al terminar el proceso, se muestra la fecha de término, sin embargo el tiempo transcurrido no se muestra.

También es necesario cambiar el orden del mensaje, primero se debe mostrar el nombre del proceso, luego el id y finalmente el tiempo transcurrido.

Detalle de DQ para PK y FK

Actualmente cuando se guarda el detalle de registros que falla una prueba de DQ solo lo hace cuando la validación es a nivel detallada, para el caso de PK y FK no guarda nada.

Se requiere guardar este detalle, ya sea en una estructura del modelo de control nueva o en alguna ya existente

Excluir registros al fallar reglas de DQ con detalle.

Agregar una nueva opción a las reglas de DQ, que permita identificar qué hacer con los registros fallidos en DQ. Actualmente hay dos posibles comportamientos: Error (el proceso falla completamente) y warning (el proceso no falla). En ambos casos se registra en el modelo de control, y al fallar la regla de DQ se registran los casos fallidos en la tabla de detalle.

Lo que busca esta nueva funcionalidad, es agregar un nuevo tipo llamado "EXCLUDE", que permita excluir los registros fallidos a una tabla de "cuarentena", en este caso el proceso no se cae, pero registra los casos fallidos en el modelo de control de calidad, asociados al proceso que falló.

Una vez que se hayan resuelto los problemas,

Para esto se debe hacer lo siguiente:

  1. modificar enumeración, para agregar el tipo "EXCLUDE"
  2. Incluir nuevo path en global Settings, donde se puedan guardar estos registros por cada proceso
  3. agregar parámetro en cada método "set" de DQ, de modo tal que permita identificar el tipo de acción (actualmente solo error), a Error, warning y exclude
  4. Agregar un método en la tabla, llamado "ExecuteRetry", donde reciba el Id del proceso que falló. Esta función debe juntar el DF malo con el DF bueno, y volver a aplicar todas las reglas de calidad, en caso de ser erroneo, volverá a generar una nueva tabla de cuarentena, en el caso de ser correcto, el proceso anterior quedará "cerrado".

Adicionalmente, se debe modificar el modelo de control, para agregar un nuevo campo en la tabla "control_tablesuse", que permita identificar si la tabla tuvo registros excluidos o no.

Resumen de Plan de Pruebas

Se requiere una forma de determinar rápidamente si el 100% del plan de pruebas se ejecutó en forma correcta o no

Agregar funciones en Control para permitir validaciones del desarrollador y QA

Agregar las siguientes funciones públicas:

  1. getDQResult: retornar los campos de la tabla DQ filtrados por processExec_Id, devolver en un DF
  2. getErrors: retornar los campos de la tabla errores filtrados por processExec_Id, devolver en un DF
  3. Implementar funciones en huemulBigDataGovernance (clase principal), que replique el getPath y getDataBase, sin la necesidad de enviar el parámetro de conexión de huemul.

Validación en seteo de GlobalSettings

Incluir validaciones al inicializar HuemulDataGovernance, de tal forma de validar si todos los métodos requeridos en globalSettings están con valores.

Mejorar trazabilidad de archivos temporales

Cambiar nombre de archivos temporales a id autogenerado, y eso guardarlo en un arreglo con las querys usadas.

Agregar una tabla a modelo PostgreSQL para que se puedan visualizar, con link en ejecución de procesos y steps

Considerar saltos de línea en campos de un archivo de texto

En ocasiones algunos campos pueden tener un salto de línea incluido en el texto, esto hace que la lectura del fichero interprete erróneamente como una nueva línea.

La idea de esta nueva funcionalidad es forzar la lectura de las N columnas, independiente que existan saltos de línea en un campo en particular.

Lecture de RAW con posición, pero ultimo campo largo variable

La lectura de interfaces RAW con posición fija requiere considerar que el último campo puede venir con largo variable.

Ejemplo
campo1Campo2Campo3
Campo4CAmpo5Campo66

En este ejemplo, el último campo puede tener un largo dinámico, por tanto la lectura por posición fija no funciona, debido a que la primera fila tiene un largo menor que la segunda.

La solución implica enviar un -1 al campo en cuestión, eso significa que el largo del último campo será igual al largo desde la posición inicial especificada en la configuración, hasta el largo de la fila.

Incluir Id en Plan de pruebas

Actualmente solo está la descripción del plan de pruebas, se debe agregar un identificador de usuario, de esta forma el usuario puede tomar el resultado y cruzar con su sistema local de control de DQ/QA. Esto implica una modificación en el modelo de datos del modelo de control.

Nuevas funciones para planes de pruebas

Se requiere la creación de nuevas funciones para apoyar la ambientación del plan de pruebas:

  1. Función para saber si existe una tabla creada: esto permite saber si la tabla existe o no
  2. Función para crear la estructura vacía de la tabla: en caso que la tabla no exista, se puede crear la tabla

Numero de particiones al guardar archivos parquet

Actualmente no hay un parámetro para indicar el número de particiones para almacenar los datos en cada tabla.

Se deben agregar parámetros en la definición de la tabla para indicar nuevas particiones (para usar con coalesce o repartition).

Esta mejora es importante para administrar de mejor forma las tablas con tamaño menor al bloque definido en HDFS

[Bug] - Controlar error en linea 99 de huemul_control

Cuando intenta agregar un registro al modelo de control no puede, el error es porque el usuario no tiene acceso a escribir, pero eso se pudo ver en modoDebug, cuando estaba en modo normal el programa se cae con nullException y no hay mayor detalle del error.

El bug no es crítico

(P) Backup de tablas maestras

Dado que los catálogos maestros son imprescindibles para la gestión de la organización, es importante mantener N cantidad de copias de seguridad. Estas copias pueden ser restituidas en caso de procesamiento erroneo.

Actualmente se guarda la última versión en la carpeta temporal, lo ideal sería tener una carpeta de backup configurada en GlobalSettings, o en su defecto generar un archivo de backup en la misma ruta donde está el archivo vigente (evaluar qué es mejor), y además agregar un campo en la tabla control_tables que indique el N° de copias de seguridad, y crear una tabla en PostgreSQL que administre estas versiones, así se puede ir eliminando las versiones más antiguas.

(P) modelo de bloqueo de ejecución de procesos

Agregar una tabla que indica el nombre del proceso, y los valores de parámetros que están bloqueados para ejecutar.

Supongamos que el cierre de mes ya fue realizado, para prevenir que esto se vuelva a ejecutar, se pueden ingresar los datos a esta tabla, y el proceso (usando el mismo modelo de control) puede evitar que se vuelva a ejecutar.

No tendría ningún tipo de �modificación a nivel de codificación del lado del usuario, solo se deben ingresar los datos en la tabla del modelo de control (postgreSQL).

(P) Agregar Nivel de compresión en Tablas

Al almacenar la información en HDFS no se está especificando el nivel de compresión (se deja el que trae por default).

Se debe agregar esta característica, para que los usuarios la definan.

Si no se especifica, el comportamiento debe ser el mismo que el actual (el default definido por la configuración).

Modelo de control en JDBC

Hacer script para crear las tablas del modelo de control en cualquier motor que soporte jdbc.
Modificar funciones en huemul_control y agregar parámetro para definir en qué motor de datos se �guardará el modelo de control (postgresql, mysql, sql server, etc).
Se debe eliminar el uso de procedimientos almacenados

Está relacioando con tarea de mejorar búsquedas en modelo de control #12

Integración con Atlas

Integrar modelo de control con Atlas, de tal forma que linaje y DQ pueda ser visualizado por Atlas.

MDM_StatusReg no actualiza a 2

El campo MDM_StatusReg queda en 2 al insertar un registro, cuando se elimina queda con -1, sin embargo cuando el registro vuelve a existir el campo MDM_StatusReg queda con -1, debe quedar con valor 2

Para reproducir
Seguir los siguientes pasos

  1. crear una tabla tipo master
  2. insertar un registro en interfaz txt, cargar la tabla con interfaz
  3. eliminar el registro de interfaz y cargar en tabla
  4. volver a cargar la interfaz del paso 2, el campo MDM_StatusReg está con valor -1

Comportamiento esperado
Se espera que el campo MDM_StatusReg tenga valor 2 después del ejemplo.

Create TestHuemul method to test all settings

it's important to know if all settings are ok before start to use HuemulLibrary, for that, the library must have a Test method to:

  1. test PostgreSQL connection (for example a select now() and select top 1 from some table)
  2. test Hive Conection (for example select now() from hive), the database must be created before?
  3. create a tempfile in hdfs path.

In this way, it's important to create a method to enable the system, for instance:

  1. create all PostgreSQL tables and functions in the DataBase (must be the database created before?)
  2. create hive databases?
  3. create HDFS directory?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.