Las normas expuestas son de obligado cumplimiento. La STIC podrá estudiar los casos excepcionales los cuales serán gestionados a través de los responsables del proyecto correspondiente y autorizados por el Área de Gobernanza de la STIC.
La STIC se reserva el derecho a la modificación de la norma sin previo aviso, tras lo cual, notificará del cambio a los actores implicados para su adopción inmediata según la planificación de cada proyecto.
En el caso de que algún actor considere conveniente y/o necesario el incumplimiento de alguna de las normas y/o recomendaciones, deberá aportar previamente la correspondiente justificación fehaciente documentada de la solución alternativa propuesta, así como toda aquella documentación que le sea requerida por la STIC para proceder a su validación técnica.
Contacto Dpto: Oficina Técnica Business Intelligence
Los cambios en la normativa vendrán acompañados de un registro de las modificaciones. De este modo se podrá realizar un seguimiento y consultar su evolución.
A continuación se recoge en una tabla un resumen de las normativas del presente documento:
Nombre Normativa | Descripción |
Criterios de subida a producción - Normativa para el paso a producción | Listado de requisitos a verificar para confirmar que un activo cumple todas las condiciones para su promoción. |
Criterios de subida a producción - Normativa para el control de versiones | Se exponen las normas para el cambio de versiones del entorno productivo. |
Criterios de subida a producción - Normativa para definición de linaje | Se recoge a nivel general las obligaciones acerca del linaje que hay que tener en cuenta en la subida a producción. |
Criterios de subida a producción - Circuito de subida a producción | Flujograma del circuito de subida a producción. |
Se definen los metadatos que deben incluir los diferentes elementos que se den de alta en Governance. | |
Se definen los metadatos que deben incluir los diferentes elementos que se den de alta en Rocket. | |
Listado de buenas prácticas generales a seguir para el nombramiento de cualquier asset que se desee dar de alta. | |
Estructura que debe seguir la nomenclatura de una asset. | |
Se recogen todas las reglas de nomenclaturas que debe seguir cualquier elemento específico de Governance. | |
Se recogen todas las reglas de nomenclaturas que debe seguir cualquier elemento específico de Rocket. | |
Se exponen las normas relacionadas con la documentación que se debe realizar al incorporar una nueva fuente de datos. | |
Se incluyen las normas relacionadas con la documentación que se debe realizar al incorporar una nueva regla de calidad. | |
Se incluyen las normas que han de cumplirse para la gestión de las relaciones de los assets que se recogen en la herramienta de Governance. | |
Se recogen las normas y políticas a seguir para el uso de la herramienta Airflow en el contexto del proyecto. | |
Se definen pautas para la correcta creación y gestión de los ficheros generados por las ingestas/curaciones realizadas en el sistema de almacenamiento HDFS de Stratio. |
Esta tabla es un documento vivo, es decir, se irá actualizando conforme se vayan añadiendo o modificando las normativas.
Todos los proyectos desarrollados para la STIC deben construirse y desarrollarse en base a los requisitos técnicos y tecnológicos que la infraestructura del SAS soporta. En caso contrario deberá especificarse de forma clara y concisa durante la reunión de lanzamiento del proyecto. A continuación se detalla el conjunto de requisitos a contemplar por parte de los proveedores.
En esta sección se recogen los requisitos mínimos necesarios y los pasos a seguir para asegurar su cumplimiento a la hora de pasar del entorno preproductivo al de producción. En concreto, este documento abarca todos aquellos elementos que se pueden dar de alta en la herramienta de Big Data Stratio. Mediante el cumplimiento de esta normativa, se consigue disponer de un entorno productivo estandarizado, de fácil entendimiento y dispuesto en todo momento a ser explotado, cumpliendo los estándares mínimos en materia de calidad establecidos.
Nota: Esta normativa puede no ser cumplida siempre y cuando la OTBI de su aprobación explícita en caso de ser necesario su incumplimiento.
Para que un conjunto de activos sea cargado en un entorno de producción, deberá cumplir con una serie de requisitos en función del activo que se desee promocionar. Estos requisitos quedan recogidos en el documento específico para ello, el cual deberá ser cumplimentado por el solicitante y validado por el responsable acordado durante el proceso definido para la promoción entre entornos.
A continuación, se listan a modo resumen los diferentes requisitos que han de tenerse en cuenta para verificar que el activo cumple con todas las condiciones establecidas para su promoción. En función del activo que se desee promocionar, determinados requisitos serán de carácter obligatorio.
N-01. Se cumple con la estructura del activo establecida por la organización.
N-02. Se ha definido el propietario del dato.
N-03. Se ha definido el administrador del dato.
N-04. El nombre cumple con la normativa establecida por la organización.
N-05. El campo de descripción del activo se encuentra completo.
N-06. Los permisos de acceso y consumo han sido definidos y validados.
N-07. Contiene los metadatos mínimos asociados.
N-08. El formato de los metadatos asociados es el correcto.
N-09. La sensibilidad de la información ha sido definida y validada.
N-10. Las reglas de calidad han sido aprobadas por el responsable correspondiente.
N-11. Se ha definido y validado el umbral necesario para las diferentes reglas de calidad.
N-12. Los resultados de los perfilados de datos son tratados correctamente
N-13. La frecuencia de ejecución de las reglas de calidad ha sido definida y validada por el responsable correspondiente.
N-14. La tipología de relaciones utilizada está dentro de las establecidas por la organización.
N-15. La tipología de activos de negocio utilizados se recoge en las acordadas por la organización.
N-16. Los términos de negocio han sido definidos y validados por el responsable acordado.
En este apartado se exponen las normas de obligado cumplimiento para el cambio de versiones del entorno productivo.
Este concepto se refiere al registro y seguimiento detallado de la procedencia y los cambios que experimentan los datos a lo largo de su ciclo de vida. Es fundamental para garantizar la transparencia, conocer la trazabilidad y evaluar la confiabilidad de los datos en una organización. En este contexto, es imperativo la añadidura de unos metadatos, tanto a Business Views como a Technicals Views que recojan la información relacionada con el linaje. Concretamente, estos metadatos han sido creados como atributos personalizados en la herramienta (Governance) y cumpliendo la normativa de nomenclatura expuesta en siguientes apartados.
Para recoger el linaje de los datos, se necesitan dos atributos personalizados descritos a continuación, que deberán completarse para todos los datos que se suban a producción:
A través de estos metadatos, se construye un cuadro de mando en Discovery que refleja el linaje de Technicals y Business Views:
A continuación, se muestra el flujograma del circuito de subida a producción de una nueva Mejora en el entorno Big Data Stratio.
En este proceso se identifican tres tipos de roles en los cuales pueden existir diferentes grupos:
Actualmente, se ha identificado que una PL debe contener la siguiente información relacionada con el asset a promocionar:
Toda esta información debe ser la que presenta el asset en el entorno de preproducción. Para su validación respecto a la normativa, se deberán usar los Cuadros de Mando de promociones y el Borrador PID.
Para la creación de una PL, se debe considerar el flujo normal de creación de PLs, por lo que se debe tener presente que este paso abarca la creación de una mejora (por parte del Usuario solicitante), la creación de la versión (por parte de la OTBI) y la creación de la SVE (por parte de los Desarrolladores). Una vez creado todo lo anterior, se procederá a la creación de la PL.
Además, hay que tener en cuenta que para nombrar los workflows en Rocket para la promoción de los assets correspondientes, se debe usar letras minúsculas y espacios, incluyendo el tipo de promoción y el número de la PL correspondiente. Ejemplo: bigusu19 promocion devpre.
En esta sección se establecen los metadatos mínimos y recomendados que deben ir asociados a cada tipo de asset dentro de la plataforma Big Data para que estos se promocionen desde el entorno de preproducción al de producción. Se entiende por assets a todos aquellos elementos que pueden ser creados dentro de la plataforma Big Data. En el caso del SAS la solución es Stratio, por lo que la definición de estos metadatos se realiza en función de los elementos que se pueden crear en los diferentes módulos que la componen. Es por ello que esta sección se subdivide en los tres módulos principales de Stratio, estableciendo para ellos un conjunto de metadatos comunes a todos los tipos de assets del módulo así como los específicos de cada uno de ellos.
Nota: Esta normativa puede no ser cumplida siempre y cuando la OTBI de su aprobación explícita en caso de ser necesario su incumplimiento.
Metadatos comunes
A continuación, se presenta una tabla con los metadatos que son comunes a todos los assets que se encuentran en la herramienta de Governance. Algunos de ellos se encuentran establecidos en el activo de forma automática por la herramienta. En aquellos casos en los que el metadato no se grabe de automáticamente por la herramienta, se deben establecer mediante la creación de los atributos adicionales que sean necesarios.
Los assets que se generan automáticamente en la herramienta a partir de las bases de datos orígenes (Data Dictionary) son muy numerosos y, por tanto, no es necesario generar los metadatos de descripción, estado, obsoleto. No obstante, para todos aquellos activos que se vayan generando con el uso de la herramienta sí deben presentar de forma obligatoria en el entorno de producción los metadatos marcados con dicha etiqueta.
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínseco |
|---|---|---|---|---|
Descripción | Descripción textual del activo. Debe ser lo más escueta posible al mismo tiempo que ofrezca las características generales del tipo de activo. | Obligatorio | Sí | |
Estado | Metadato que indica el estado de inactividad del asset asociado. | Obligatorio en los intrínsecos. | Sí ( en Business Views, Business rules y Business terms ) | |
Fecha de creación | Establece la fecha de creación del asset pertinente en la herramienta. | Obligatorio en los intrínsecos | Sí (En todos exceptuando las ontologías) | |
Fecha de actualización | Indica la fecha en la que se realizó la última modificación del activo. | Obligatorio | Sí | |
Tipo | Metadato que indica a qué tipo de activo (colecciones, reglas de calidad, vistas técnicas…) pertenece el elemento pertinente. | Obligatorio | Sí | |
Obsoleto | atr_obsoleto | Este metadato indicará si el activo es útil o no independientemente de su estado. De esta manera se identifica con facilidad cuándo el activo debe ser borrado o mantenido en la herramienta. Este campo no se incorporará de forma integral en la herramienta, sino que se irá creando conforme los assets vayan quedando obsoleto. | Obligatorio | No |
Responsable | atr_responsable | Contacto del responsable del mantenimiento y uso del activo asociado. | Recomendable | No |
| Propietario | atr_propietario | Contacto del propietario del activo asociado. | Recomendable | No |
Usuario actualización | atr_usu_act | Metadato que identifica el miembro que ha actualizado por última vez el activo en cuestión. | Recomendable | No |
Metadatos específicos
En este apartado, se especifican los metadatos que son únicos de cada tipo de activo presentes en la herramienta. Es decir, cada asset debe presentar tanto los metadatos comunes como los definidos en este apartado que se encuentren categorizados como obligatorios.
A continuación, se muestra una tabla con los metadatos exclusivo del asset de colecciones.
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínseco |
|---|---|---|---|---|
Ámbito | atr_ambito | Departamento dentro del SAS que requiere el uso de la colección pertinente. | Obligatorio | No |
Además, existe un conjunto de metadatos asociados a los procesos de ingestas.
Todos los metadatos de este tipo comienzan con los caracteres "dlc".
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínseco |
|---|---|---|---|---|
dlc.replication | Indica si la Collection o Technical View debe ser ingestada. Una vista técnica es ingestada sí se cumplen estas dos condiciones:
| Obligatorio | Sí | |
dlc.entity.alias | Este nombre es utilizado para definir el nombre de la entidad en el servicio DLC siguiendo el formato {dlc.entity_alias}-technicalViewName. En la actualidad, se indica como valor el nombre de la colección. | Obligatorio | Sí | |
dlc.instance | Nombre del servicio DLC que va a orquestar el proceso de ingesta para la colección. Por motivos de arquitectura puede existir más de un servicio DLC en un entorno. Actualmente existen 3 instancias DLC, una por entorno:
De este modo,
| Obligatorio | Sí | |
dlc.cron | Indica la planificación de la ejecución de la ingesta en formato de tarea programada Spring. Está formado por 6 campos:
Estos campos siguen la siguiente sintáxis: Sintáxis Cuándo Ejemplo Explicación ----------------------------------------------------------------------------------------- | Obligatorio | Sí | |
dlc.workflow_path | Directorio donde se ubica el workflow en Rocket. El formato del path es el siguiente: /home/{nombre_proyecto}/{path} Donde:
De este modo, si se establece el parámetro a /home/dlc/dlc significa que queremos utilizar un workflow ubicado en el path /dlc del proyecto dlc. En la actualidad, el parámetro se establece con el valor /home/dlc/dlc. | Recomendado | Sí | |
dlc.workflow_name | Nombre del workflow en Rocket. Por defecto, dlc-crossdata-parquet En la actualidad, se realizan dos tipos de ingesta:
Atendiendo a los tipos de ingesta, se utilizan los siguientes workflows:
| Recomendado | Sí | |
dlc.workflow_version | Versión del workflow de Rocket. Por defecto, 1. En la actualidad, las versiones utilizadas para los workflows arriba indicados son los siguientes:
| Recomendado | Sí | |
dlc.table_filter | Filtro where que se desea incluir en la migración, debe incluir la palabra where. Este atributo se realiza cuando la ingesta de la tabla se realiza de forma incremental – por deltas – en lugar de completa - snapshots. Si no existe, la ingesta de la tabla será completa. | Recomendado | Sí | |
dlc.table_fields | Campos de la tabla que se desean migrar, si no se incluye se migrarán todos. | Recomendado | Sí | |
dlc.execution_context | Permite que dlc comunique a Rocket un contexto de ejecución específico. Se utiliza fundamentalmente para realizar la ingesta con unos recursos más elevados para aquellas tablas que, debido a su volumetría, se hace más complicada su ingesta. En el caso de ingestas automáticas, los contextos de ejecución Environment y SparkConfigurations permanecerán con sus valores por defecto, mientras que si se desean modificar, se define un contexto específico mediante el valor SparkResources, que puede tomar los siguientes valores.
Este parámetro no está habilitado para establecerse a nivel Vista Técnica si el parámetro dlc.group_entities es true. En tales casos, se recomienda crear una colección diferenciada y establecer el contexto de ejecución específico a nivel de colección. | Recomendado | Sí | |
dlc.referential_integrity | Permite la ejecución de la ingesta sin tener en cuenta la integridad referencial entre las tablas de la fuente de datos. De este modo, la colección se ingesta en tres fases dependiendo de las constraints referenciadas existentes en la fuente de origen con el siguiente orden: en primer lugar, las tablas sin referencias, en segundo lugar las tablas referenciadas por las tablas de la primera fase y, en tercer lugar, las tablas restantes. Para bases de datos replicadas, es recomendable marcar el parámetro a false. Si el parámetro no es false, al incluir una tabla en la colección, se debe incluir también sus tablas referenciadas, de lo contrario la parametrización será errónea. | Recomendado | Sí | |
dlc.group_entities | Indica si la ejecución se realiza ejecutando la ingesta de varias tablas de forma simultánea para la colección. Esto acelera el proceso de ingesta acortando considerablemente el tiempo total del proceso para una determinada colección. | Recomendado | Sí | |
dlc.group_entities_max_per_wf | Si dlc.group_entities es true, define cuántas entidades se ingestan de forma simultánea. Un valor recomendado depende de las condiciones específicas de cada colección (talla de SparkResources con la que se ejecutan las ingestas, ventana de disponibilidad de la ingesta en el entorno de analítica, etc). Un buen valor inicial puede ser de 10. | Recomendado | Sí | |
dlc.clone_gr | Indica si dlc copia las Quality Rules del asset origen en el asset destino. | Recomendado | Sí | |
dlc.clone_gr_overwrite | Indica a dlc si debe sobreescribir las Quality Rules en destino al realizar la copia de QRs desde origen. | Recomendado | Sí | |
dlc.spark_user | Indica el usuario spark con el que ejecutar el workflow de Rocket para ingestar la entidad. | Recomendado | Sí | |
| dlc.table_partition | Permite especificar una clave de partición al escribir los datos en hdfs. Esta clave de partición debe ser un campo de la tabla a ingestar (o generado en el proceso de ingesta). | Recomendado | Sí | |
| dlc.extra_options | Define parámetros adicionales necesarios para la ejecución de la ingesta. El formato a indicar como valor es el siguiente: [{"clave_1":"valor_1", …, “clave_n”:”valor_n”}] | Recomendado | Sí | |
| dlc.replicates_into | Path de hdfs donde se replicará la colección. | Obligatorio | Sí (Related Asset) |
En la siguiente tabla se presenta el listado de los metadatos únicos que deben presentar las vistas técnicas de una colección determinada.
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínseco |
|---|---|---|---|---|
Data Dictionary | Campo que hace referencia al asset del Data Dictionary del que proviene la tabla o columna que compone la technical view. | Obligatorio | Sí | |
Fuente de datos | Nombre de la base de datos del sistema origen en el que se encuentran almacenadas las tablas. | Obligatorio | Sí | |
Alias | Acrónimo breve que permite reconocer con facilidad el activo. | Recomendado | Sí | |
Fecha actualización de los datos en el origen | atr_fec_act_ori | Campo que indica cuál fue la última fecha de actualización de los datos en el origen. Este metadato es diferente al de actualización del activo dentro de la propia plataforma. | Recomendado | No |
Tipo de esquema | Establece el tipo de esquema del sistema origen de los datos. | Obligatorio | Sí | |
Modo de descubrimiento | Mecanismo mediante el cual se ha autodescubierto la fuente de datos origen. | Recomendado | Sí | |
Origen | atr_origen | Indica el asset del cuál proviene la tabla. Este atributo se usa para la definición del linaje. | Obligatorio | No |
Transformación | atr_transformacion | Da información acerca de las posibles transformaciones que puede sufrir una tabla. Este atributo se usa para la definición del linaje. |
Dentro de las Technical Views, a nivel de trabla existen unos atributos que son propios de la base de datos origen en la que se encuentran almacenados dichos datos y también otros metadatos que facilitan la parametrización y el trabajo con los procesos de ingesta. Para facilitar la lectura de dichos metadatos, se dividen en las dos tablas siguientes.
Todos los metadatos de este tipo comienzan con los caracteres "bdl".
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínseco |
|---|---|---|---|---|
bdl.partition | Establece si la tabla se encuentra o no particionada. | Recomendado | Sí | |
bdl.businessSchema | - | Obligatorio | Sí | |
bdl.forcedPartitionColumn | En modo automático, el usuario especifica qué columna quiere usar como columna de partición. | Obligatorio | Sí | |
bdl.limit | Sirve para definir un límite para todas las consultas sobre la tabla. | Obligatorio | Sí | |
bdl.lowerBound | El mínimo valor de PartitionColumn para decidir el número de particiones. | Obligatorio | Sí | |
bdl.numPartitions | Número de particiones. Junto a lowerBound (inclusivo) y upperBound (exclusivo), determinan las distintas particiones que formarán la cláusula where que se usan para dividir la columna partitionColumn de manera uniforme | Obligatorio | Sí | |
bdl.optimization | Define que tipo de optimización se aplicará. Valores posibles:
Si el atributo no se usa, el agente BDL no hará nada. | Obligatorio | Sí | |
bdl.optimizationFailure | BDL ha intentado poner toda la información de partición en el catálogo, pero algo no es correcto. | Obligatorio | Sí | |
bdl.optimized | Indica si el agente ha terminado la optimización. | Obligatorio | Sí | |
bdl.options.customSchema | - | Obligatorio | Sí | |
bdl.options.oracle.jdbc.mapDateToTimeStamp | Metadato booleano cuyo valor false implica que no se realiza el mapeo automático entre los valores Date a Timestamp. | Obligatorio | Sí | |
bdl.options.sessionInitStatement | Establece el formato el formato de fechas en el acceso a Oracle. Para editar este formato es necesario que el metadato bdl.options.oracle.jdbc.mapDateToTimeStamp presente el valor false. | Obligatorio | Sí | |
bdl.partitionColumn | Nombre de la columna que se utilizará para realizar la partición. | Obligatorio | Sí | |
bdl.technicalSchema | - | Obligatorio | Sí | |
bdl.upperBound | El mínimo valor de PartitionColumn para decidir el número de particiones. | Obligatorio | Sí | |
bdl.whereClause | Cláusula where que se utiliza para realizar el número de particiones totales junto con el resto de atributos. | Obligatorio | Sí |
Todos los metadatos de este tipo comienzan con los caracteres "dlc".
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínseco |
|---|---|---|---|---|
dlc.replication | Indica si la Collection o Technical View debe ser ingestada. Una vista técnica es ingestada sí se cumplen estas dos condiciones:
| Obligatorio | Sí | |
dlc.workflow_path | Directorio donde se ubica el workflow en Rocket. El formato del path es el siguiente: /home/{nombre_proyecto}/{path} Donde:
De este modo, si se establece el parámetro a /home/dlc/dlc significa que queremos utilizar un workflow ubicado en el path /dlc del proyecto dlc. En la actualidad, el parámetro se establece con el valor /home/dlc/dlc. Nota: En caso de tener habilitado el metadato dlc.group_entities a nivel de colección, este metadato no estará disponible a nivel de vista técnica. | Recomendado | Sí | |
dlc.workflow_name | Nombre del workflow en Rocket. Por defecto, dlc-crossdata-parquet En la actualidad, se realizan dos tipos de ingesta:
Atendiendo a los tipos de ingesta, se utilizan los siguientes workflows:
| Recomendado | Sí | |
dlc.workflow_version | Versión del workflow de Rocket. Por defecto, 1. En la actualidad, las versiones utilizadas para los workflows arriba indicados son los siguientes:
| Recomendado | Sí | |
dlc.table_filter | Filtro where que se desea incluir en la migración, debe incluir la palabra where. Este atributo se realiza cuando la ingesta de la tabla se realiza de forma incremental – por deltas – en lugar de completa - snapshots. Si no existe, la ingesta de la tabla será completa. | Recomendado | Sí | |
dlc.table_fields | Campos de la tabla que se desean migrar, si no se incluye se migrarán todos. | Recomendado | Sí | |
dlc.execution_context | Permite que dlc comunique a Rocket un contexto de ejecución específico. Se utiliza fundamentalmente para realizar la ingesta con unos recursos más elevados para aquellas tablas que, debido a su volumetría, se hace más complicada su ingesta. En el caso de ingestas automáticas, los contextos de ejecución Environment y SparkConfigurations permanecerán con sus valores por defecto, mientras que si se desean modificar, se define un contexto específico mediante el valor SparkResources, que puede tomar los siguientes valores.
Este parámetro no está habilitado para establecerse a nivel Vista Técnica si el parámetro dlc.group_entities es true. En tales casos, se recomienda crear una colección diferenciada y establecer el contexto de ejecución específico a nivel de colección. Nota: En caso de tener habilitado el metadato dlc.group_entities a nivel de colección, este metadato no estará disponible a nivel de vista técnica. | Recomendado | Sí | |
dlc.clone_gr | Indica si dlc copia las Quality Rules del asset origen en el asset destino. Actualmente se establece siempre a false a nivel Colección. Nota: En caso de tener habilitado el metadato dlc.group_entities a nivel de colección, este metadato no estará disponible a nivel de vista técnica. | Recomendado | Sí | |
dlc.clone_gr_overwrite | Indica a dlc si debe sobreescribir las Quality Rules en destino al realizar la copia de QRs desde origen. Nota: En caso de tener habilitado el metadato dlc.group_entities a nivel de colección, este metadato no estará disponible a nivel de vista técnica. | Recomendado | Sí | |
dlc.spark_user | Indica el usuario spark con el que ejecutar el workflow de Rocket para ingestar la entidad. | Recomendado | Sí | |
| dlc.table_partition | Permite especificar una clave de partición al escribir los datos en hdfs. Esta clave de partición debe ser un campo de la tabla a ingestar (o generado en el proceso de ingesta). | Recomendado | Sí | |
| dlc.extra_options | Define parámetros adicionales necesarios para la ejecución de la ingesta. El formato a indicar como valor es el siguiente: [{"clave_1":"valor_1", …, “clave_n”:”valor_n”}] | Recomendado | Sí |
Para las columnas que conforman las tablas dentro de la vista técnica, existen una serie de metadatos que son exclusivos de ellos. En la siguiente tabla, se muestran dichos metadatos.
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínseco |
|---|---|---|---|---|
type | Establece el tipo del objeto de la columna en cuestión, de forma que pueda identificarse con facilidad si es un entero, un string u otro tipo de objeto. | Obligatorio | Sí | |
nullable | Este metadato establece cuando la columna admite valores nulos. | Obligatorio | Sí | |
ordinal | Establece la posición ordinal de la columna en la tabla. | Obligatorio | Sí | |
typeId | Establece el tipo de indicador que presenta la columna. | Obligatorio | Sí | |
precision | Valor entero que establece la precisión de variables numéricas. | Obligatorio | Sí | |
scale | Establece la escala de una variable numérica. | Obligatorio | Sí | |
isSigned | Valor booleano que establece si la columna está o no firmada. | Obligatorio | Sí | |
Sensibilidad | atr_sensibilidad | Indica el nivel de sensibilidad en materia de seguridad de la tabla o columna. La sensibilidad de los datos puede tomar uno de estos tres valores: “publico”, “personal_identificable” o “personal_especial”. Además, debe tener marcado la característica “Security” que aparece en las opciones de custom attributes. | Obligatorio | No |
A continuación, se presenta una tabla con los metadatos específicos para las vistas de negocio que componen una colección determinada.
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínsecos |
|---|---|---|---|---|
Modo | Metadato que puede tomar un conjunto de valores predeterminados y que establece automáticamente la plataforma. | Obligatorio | Sí | |
Ontología | Nombre de la ontología en la que se construye la vista de negocio. | Obligatorio | Sí | |
Enlace ontología | Enlace a la ontología en la que se basa el activo. | Obligatorio | Sí | |
Colección | Nombre de la colección a la que pertenece el activo. | Obligatorio | Sí | |
Origen | atr_origen | Indica el asset del cuál proviene la tabla. Este atributo se usa para la definición del linaje. | Obligatorio | No |
Transformación | atr_transformacion | Da información acerca de las posibles transformaciones que puede sufrir una tabla. Este atributo se usa para la definición del linaje. |
Reglas de calidad
En la siguiente tabla se muestran los metadatos específicos de las reglas de calidad tanto genéricas como específicas.
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínseco |
|---|---|---|---|---|
Auditoría | Campo seleccionable a la hora de crear reglas de calidad que define si los datos llevan, adicionalmente, a una tabla de auditoría. | Obligatorio | Sí | |
Umbral | Valor umbral por encima del cual los datos analizados cumplen con los criterios de calidad. | Obligatorio | Sí | |
Tipo de ejecución | Puede tomar dos valores, programado o embebido en función de cuándo y cómo se ejecuta la regla. | Obligatorio | Sí | |
Fuente de datos | Datos sobre los que se aplica la regla de calidad. | Obligatorio | Sí | |
Recursos | Exclusiva de las reglas de calidad planificadas. Tamaño de los recursos computacionales asociados al cálculo de la regla de calidad. | Obligatorio | Sí | |
Frecuencia de ejecución | Exclusiva de las reglas de calidad planificadas. Frecuencia con la que se ejecuta la regla de calidad en caso de que sea periódica. | Obligatorio | Sí | |
Tipo de medida | atr_medida | Establece el tipo de regla de calidad según los valores: completitud, actualidad, consistencia, precisión y unicidad. | Obligatorio | No |
Carácter(*) | atr_caracter | Metadato binario que indica cuándo la regla de calidad es de carácter técnico o de negocio. Puede tomar los valores “tec” o “neg”. | Obligatorio | No |
(*) El metadato carácter se creará o no a todas las reglas de calidad ya definidas en la herramienta en función al volumen de estas y el coste de recursos de dichas definiciones. Cualquier regla de calidad nueva que se cree deberá contener este metadato.
A continuación, se muestran los metadatos que son exclusivos de los elementos que componen una ontología.
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínseco |
|---|---|---|---|---|
Ontología | Nombre de la ontología a la que pertenece el elemento en cuestión. | Obligatorio | Sí | |
About | Enlace a la definición de la ontología correspondiente. | Obligatorio | Sí | |
Versión | atr_version | Versión de la ontología a la que pertenece. | Obligatorio | No |
Fecha actualización | atr_fec_act | Última fecha de actualización de la ontología a la que pertenece el elemento. | Obligatorio | No |
A continuación, se muestran en una tabla los metadatos específicos de los assets de las comunidades que componen el glosario de negocio.
Es importante destacar que el metadato que establece el estado ya se encuentra especificado en el apartado de metadatos comunes. No obstante, en el caso de las comunidades este metadato no es intrínseco en la herramienta y, por tanto, es necesario generarlo a través del concepto de atributos adicionales.
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínseco |
|---|---|---|---|---|
Versión | atr_version | Valor de la versión de la comunidad. | Recomendado | No |
Estado | atr_estado | Estado que indica la posible inactividad de la comunidad. | Obligatorio | No |
En la siguiente tabla se muestran los metadatos específicos de los assets de los dominios que componen un dominio concreto dentro del glosario de negocio que se encuentra en la plataforma de Stratio.
Es importante destacar que el metadato que establece el estado ya se encuentra especificado en el apartado de metadatos comunes. No obstante, al igual que en el caso de las comunidades, este metadato no es intrínseco en la herramienta para los dominios y, por tanto, es necesario generarlo a través del concepto de atributos adicionales.
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínseco |
|---|---|---|---|---|
Versión | atr_version | Valor de la versión del dominio. | Recomendado | No |
Estado | atr_estado | Estado que indica la posible inactividad de la comunidad. | Obligatorio | No |
Community | atr_community | Nombre de la comunidad a la que pertenece el dominio. | Obligatorio | No |
En este apartado se agrupan en una tabla los metadatos específicos tanto de los términos como de las reglas de negocio que componen un dominio determinado.
Metadato | Nombre Custom Attribute | Descripción | Obligatoriedad | Intrínseco |
Responsable actualización | Usuario responsable de la última actualización del término o regla de negocio. | Obligatorio | Sí | |
Versión | atr_version | Valor de la versión del dominio al que pertenece. | Recomendado | No |
Community | Nombre de la comunidad a la que pertenece la regla o el término de negocio. | Obligatorio | Sí | |
Dominio | Nombre del dominio al que pertenece el término o regla de negocio. | Obligatorio | Sí |
Esta sección recoge la normativa aplicable para la gestión del módulo de Rocket de la herramienta Stratio, y al igual que en Governance, se distinguen dos grandes bloques para los metadatos. Por un lado, aquellos metadatos comunes a cualquier tipo de asset y, por otro lado, los metadatos específicos para cada uno de ellos.
Cabe destacar que, en Rocket, no se cuenta con la posibilidad de añadir metadatado adicional, al contrario que en Governance.
Existe un conjunto de metadatos que se repiten a lo largo de todos los assets de la herramienta. Estos se generan automáticamente al crear el asset en cuestión, no obstante, el metadato “descripción” se debe rellenar manualmente de forma obligatoria.
Metadato | Descripción | Obligatoriedad | Intrínseco |
Descripción | Descripción textual del activo. Debe ser lo más escueta posible al mismo tiempo que ofrezca las características generales del tipo de activo. También se debe incorporar información extra a modo de metadato excepcional. | Obligatorio | Sí |
Name | Nombre del asset | Obligatorio | Sí |
Type | Establece la tipología del asset, pudiendo ser: AutoMLPipeline, Batch, Hybrid, Mlproject, Notebook, Streaming. | Obligatorio | Sí |
Last modified | Fecha de la última modificación sufrida por el asset. | Obligatorio | Sí |
Folder | Ruta de la carpeta en la que se encuentra ubicado el asset. | Obligatorio | Sí |
Asset ID | Identificador del asset. | Obligatorio | Sí |
Assets relacionados | Nombre del asset con los que se relaciona. | Opcional | Sí |
Versión | Número de versión en la cual se encuentra el asset. | Obligatorio | Sí |
Además, dentro del metadato de descripción, se deberán añadir los datos mostrados en la siguiente tabla. Estos se indicarán con el nombre mostrado en la tabla seguido de “: “, separándose entre sí con el carácter “; “.
Nombre | Descripción | Obligatoriedad |
Descripcion | Descripción textual del activo. Debe ser lo más escueta posible al mismo tiempo que ofrezca las características generales del tipo de activo. | Obligatorio |
Creacion | Fecha en la que se crea el asset en formato “dd/mm/aaaa" de la útlima versión del asset. | Obligatorio |
Responsable | Usuario que se responsabiliza del funcionamiento de la última versión del asset. | Obligatorio |
Es decir, una descripción genérica tendrá la siguiente apariencia:
<<"Descripcion: Primera etapa del proceso de carga de usuario"; "Creacion: 01/10/2023"; "Responsable: Juan Antonio González Pérez">>.
En esta sección se establecen las normas que deben seguirse para nombrar los assets que se creen dentro de la plataforma Big Data. Estas normas están enfocadas a los assets que componen la solución Stratio implantada en el SAS, encontrándose divididos en función del módulo al que pertenecen.
A su vez, se definen un conjunto de buenas prácticas para que sirvan como guía para cualquier usuario que quiera cualquier elemento de forma general.
Nota: Esta normativa puede no ser cumplida siempre y cuando la OTBI de su aprobación explícita en caso de ser necesario su incumplimiento.
A continuación, se expone un listado de las buenas prácticas generales que deben seguirse para el nombramiento de cualquier asset que se desee dar de alta en la plataforma Big Data.
Como añadido a todas estas buenas prácticas, es recomendable disponer de una tabla con todas las abreviaturas que se van a usar en los diferentes assets. En dicha tabla, se deben considerar, también, todos los ámbitos y subámbitos de información a los que pertenezcan los diferentes conjuntos de datos. De esta forma, se consigue que todos los usuarios miembros de la organización puedan acceder con facilidad a un determinado asset, comprendiendo sin dificultades el contexto de este.
De forma general, se establece que el nombre de un asset contiene una serie de elementos comunes, los cuales se listan a continuación y en el orden en el que aparecen dentro del nombre.
A continuación, se presenta el orden de los elementos comunes que pueden aparecer en el nombre de un asset.
Donde ZZ es una secuencia numérica ilustrativa de dos dígitos.
Es posible que para un asset en concreto sea necesario añadir una descripción extra a la estructura general aquí presentada. Cada una de estas particularidades se detallan en los apartados de los assets concretos en los que aparecen. Un ejemplo de esto es el carácter técnico o de negocio que presenta una regla de calidad.
Toda regla de calidad empezará con los caracteres “rc” (regla calidad). El siguiente término indica el carácter técnico o de negocio de la propia regla de calidad, por lo tanto, debe presentar uno de los dos valores siguientes:
Los siguientes elementos que lo componen constituirán la descripción del contexto de la regla de calidad. Esta descripción cambia en función de la información a la que se le aplica la regla de calidad. A continuación, se indica el tipo de regla de calidad, la cual puede tomar cinco valores diferentes, que se listan a continuación.
Seguidamente, se indica si la regla de calidad es planificada o proactiva.
Además, se indica qué se hace con los datos que no cumplen la regla de calidad. Existen tres valores distintos.
Finalmente, se indicará una breve descripción que contextualice el tipo de dato al que se está aplicando dicha regla.
Entonces, un ejemplo de regla de calidad técnica presentará la siguiente estructura:
rc_[t/n]_[com/act/con/pre/uni/for]_[pr/pl]_[pt/mf/au][Descripción breve]
Por ejemplo: rc_n_uni_pr_mf_dni_paciente
Para nombrar las diferentes Technical Views, es necesario tener en cuenta las diferentes tablas que la van a constituir y, a partir de las mismas, constituir un nombre que permita conocer sin ambigüedades toda la información que comprende el asset.
Siempre que la cantidad total de tablas no sea muy elevada, se recomienda indicar en el nombre del asset las abreviaturas de las tablas que lo componen. Cuando, en caso contrario, el número de tablas es muy elevado, el nombre debe ser capaz de describir el ámbito de información que contiene la Technical View.
Para este asset en concreto, no es necesario indicar un prefijo que indique el tipo de activo que constituye. Esto es debido a las siguientes dos razones.
Por lo tanto, el nombre debe seguir las buenas prácticas descritas en el tercer apartado del presente documento.
[Descripción Technical View]
Por ejemplo: diagnost_domici_usuario
Los nombres de las Business Views dependen tanto del conjunto de datos técnicos como del significado funcional concreto que se le dé a los mismos. Por lo tanto, el nombre debe contener la información necesaria para conocer los dos elementos que componen el asset.
El nombre de estos activos debe contener una descripción que indique los datos técnicos y el significado funcional que componen el activo. Esta descripción ha de ser sencilla y significativa, de manera que cualquier usuario de negocio sea capaz de entender el contexto de los datos técnicos que componen la Business View pertinente.
Para este asset en concreto, no es necesario indicar un prefijo que indique el tipo de activo que constituye. Esto es debido a las siguientes dos razones.
Por lo tanto, el nombre debe seguir las buenas prácticas descritas en el tercer apartado del presente documento.
[Descripción Business View]
Por ejemplo: multicontagio_covid
Las colecciones son combinaciones de Business y Technical Views, por lo tanto, en su nombre se debe establecer la información necesaria para poder identificar qué activos lo componen.
Inicialmente, se indica a cuál de las tres capas que se muestran a continuación pertenece la colección.
Es importante destacar que, para las capas de origen y raw, la herramienta Stratio no permite modificar los nombres de las tablas y columnas que se leen de forma automática de las fuentes orígenes. En este sentido, como los orígenes de datos se encuentran en Oracle, los nombres de sus tablas y columnas aparecerán en mayúsculas y con los nombres originales de las mismas.
Después de indicar la capa a la que pertenece la colección, se establece una descripción que sea capaz de contextualizar las Technical y Business Views que componen la propia colección. A continuación, se puede observar cuál es la estructura de nombramiento de este asset.
[raw/cur/con/ori]_[Descripción Colección]
Por ejemplo: cur_historia_salud
Para los casos de uso de analítica avanzada, se crean diferentes tipos de tabla en la capa de curado. Cada una de ellas presenta una finalidad específica y un sufijo al final de su nombre para identificarlo. Por este motivo, las colecciones que se generen para los casos de uso de analítica avanzada presentarán los siguientes sufijos.
Las constantes son unos elementos que, una vez definidos, se pueden usar en cualquier punto de la plataforma, por lo tanto, su nombre será específico del uso que se le quiera dar.
El nombre debe comenzar siempre por el prefijo “cons”, el cual indica que corresponde a una constante de la herramienta. La descripción del nombre debe ser suficientemente clara como para que cualquier usuario pueda entender el significado de esta. Al mismo tiempo, debe procurarse utilizar abreviaturas, siempre que sean entendibles, para reducir la longitud del nombre.
Cabe destacar que existen ciertas constantes que son intrínsecas de la herramienta y que, por tanto, no son modificables. Este tipo de activo conserva su nombre original, por lo que esta normativa no aplicaría en dichos casos.
A continuación, se muestra la estructura de nombramiento que debe presentar este activo.
cons_[Descripción Constante]
Por ejemplo: cons_edad_min_vacu_cov
La herramienta Stratio permite añadir atributos personalizados a los elementos que componen su Data Catalog, estos son, las fuentes de datos, las colecciones y las Technical y Business Views.
Estos atributos dependen en gran medida de las necesidades del usuario que las defina y de los activos a los que complementa. Por lo tanto, los elementos que aparezcan en su nombre son muy variados.
Como regla general, se debe establecer un prefijo “atr” para indicar que ese atributo ha sido añadido de forma manual por un usuario concreto. Además, como en el resto de assets, el nombre ha de seguir las buenas prácticas establecidas en el tercer apartado del presente documento.
La estructura que presenta este activo es la que se muestra a continuación.
atr_[Atributo Adicional]
Por ejemplo: atr_cantidad_traumato
Cabe destacar que existen ciertos atributos adicionales que son intrínsecos de la herramienta y que, por tanto, no son modificables. Este tipo de activo conserva su nombre original, por lo que esta normativa no aplicaría en dichos casos. A continuación, se muestra un listado de las abreviaturas que puede presentar.
Existen ciertos activos que no están relacionados con otros elementos de la plataforma ni tampoco se puede acceder que no sea el propio menú de la herramienta. Por este motivo, no es necesario aplicar las normas expuestas en el presente documento. No obstante, se recomienda que todos los nombres que se establezcan no sean excesivamente largos y siempre se deben acortar lo máximo posible al mismo tiempo que se conserva su significado.
A continuación, se muestra un listado de estos activos que son exclusivamente de negocio.
Dentro de este orden jerárquico, es necesario que cada uno de los elementos definidos sean coherentes con la estructura establecida. Por lo tanto, se debe prestar especial atención a la estructura del glosario para que la información sea fácilmente localizable.
Las ontologías deben ser nombradas de tal manera que cualquier usuario con perfil de negocio sea capaz de comprender con facilidad y sin ambigüedad las clases y relaciones establecidas en la ontología.
Al igual que ocurre para el conjunto de activos de negocio anterior, no es necesario establecer en el nombre de las ontologías ningún prefijo concreto. Sin embargo, el nombre debe describir de forma breve y concisa, de forma que sea fácilmente legible para cualquier usuario de negocio. Al final del nombre debe indicarse la versión de la ontología, aunque, contrario a lo que se indica en el apartado de buenas prácticas, no se debe indicar la revisión de la versión. Esto ocurre porque la ontología evoluciona como una única entidad a la que no se le puede cambiar el nombre. Solamente se debe crear otra ontología con una nueva versión cuando se cambie profundamente la estructura de esta.
A continuación, se establece la estructura que debe tener una ontología.
[Descripcion Ontología]_XX
Por ejemplo: sas_03
El módulo de Rocket se divide en diferentes elementos que presentan una posición o estructura determinada en la herramienta. Estos son:
Actualmente, los proyectos se encuentran definidos de forma previa. Estos proyectos han sido definidos en función de la capa de datos a la que pueden acceder y de los diferentes contratos que acceden a la plataforma Big Data. A continuación, se muestra una tabla con los diferentes proyectos definidos.
| Nombre | Capa de la que lee | Proyecto | Creación | #Cores |
|---|---|---|---|---|
| cur_otbi | Raw | Gobernanza | Sí | 64 |
| ana_otbi | Curado / Consumo | Gobernanza | Sí | 64 |
| ana_gobernanza | Curado / Consumo | Gobernanza | Sí | 64 |
| ana_asistencial | Curado / Consumo | Asistencial | Sí | 64 |
| ana_siglo | Curado / Consumo | SIGLO | Sí | 32 |
| ana_farmacia | Curado / Consumo | Farmacia | Sí | 32 |
| ana_sshh | Curado / Consumo | Servicios Horizontales | Sí | 32 |
| ana_rrhh | Curado / Consumo | Recursos Humanos | Sí | 32 |
| ana_subdire_prov_se | Curado / Consumo | Subdirección Provincial Sevilla | Sí | 32 |
| ana_subdire_prov_ma | Curado / Consumo | Subdirección Provincial Málaga | No | - |
| ana_subdire_prov_ja | Curado / Consumo | Subdirección Provincial Jaén | No | - |
| ana_subdire_prov_co | Curado / Consumo | Subdirección Provincial Córdoba | No | - |
| ana_subdire_prov_hu | Curado / Consumo | Subdirección Provincial Huelva | Sí | 32 |
| ana_subdire_prov_gr | Curado / Consumo | Subdirección Provincial Granada | Sí | 32 |
| ana_subdire_prov_al | Curado / Consumo | Subdirección Provincial Almería | No | - |
| ana_subdire_prov_ca | Curado / Consumo | Subdirección Provincial Cádiz | No | - |
Los directorios dentro de cada proyecto deben seguir las buenas prácticas establecidas en esta normativa. En concreto, se debe poner especial foco en los siguientes aspectos:
La estructuración de cada proyecto se debe dividir en función de los equipos y trabajos típicos que desarrollen en ese espacio, estando siempre enfocado en la optimización de la accesibilidad y entendimiento por parte de nuevos usuarios que carezcan del conocimiento experto.
Los trabajos de manipulación de datos se definen a través de los assets, que pueden ser de diferentes tipos.
Por norma general, el nombre debe componerse de unas palabras descriptivas seguidos de su orden de ejecución y la versión del workflow. Estos dos últimos elementos se incorporan por los siguientes motivos.
A continuación, se establece la estructura que debe tener un asset de Rocket.
[Nombre workflow]_OEXX_YYrZZ
Dentro de la metodología de trabajo establecida en el Marco de Trabajo de Governance, se encuentran diferentes procesos en los que es de obligado cumplimiento la elaboración de documentación que permita llevar un control de la información almacenada. Se distinguen dos normativas, siendo estas las referentes a documentación de nuevas fuentes de datos y de reglas de calidad
Siempre que una nueva fuente de datos sea incorporada a la plataforma, los usuarios deben registrar dicha incorporación, así como posibles actualizaciones en fuentes de datos ya existentes. Para ello, en caso de una nueva fuente de datos o actualización de una existente, es necesario recoger determinada información específica referente a la misma que será registrada en el espacio destinado a ello, el cual debe mantenerse actualizado constantemente. La información que se debe recoger es la siguiente:
Campo | Descripción |
Fuente origen | Nombre de la nueva fuente de datos origen. |
Descripción | Detalle de la información contenida en la fuente de datos. |
Responsable | Nombre de la persona responsable de la fuente de datos. |
Fecha de creación | Fecha en la que la fuente de datos es incorporada a la herramienta. |
Fecha de actualización | Si aplica, fecha en la que se realizó algún tipo de modificación a la fuente de datos. |
Frecuencia de actualización | Indica cada cuánto tiempo tiene que actualizarse la fuente de datos ante la posibilidad de nuevos cambios. |
Solicitante | Nombre de la persona solicitante de la nueva fuente de datos. |
Solicitante actualización | En caso de que se necesite una actualización puntual, nombre de la persona solicitante de la misma. |
Fuente | Indica la fuente de la cual proceden los datos. |
Información técnica | Cadena de conexión a la fuente de datos |
Reglas de calidad
En lo que respecta a la definición de nuevas reglas de calidad, se debe llevar a cabo la documentación de las mismas, con el objetivo de realizar una buena gestión y mantenimiento de estas, contando así con un espacio que aúne toda la información relevante de las distintas reglas de calidad definidas y que permita, por tanto, evitar duplicidades, identificar nuevas necesidades, realizar seguimientos, etc.
La información que debe recogerse de cada una de las reglas identificadas es la siguiente:
Campo | Descripción |
Nombre | Nombre de la regla de calidad. |
Descripción | Detalle del objetivo principal de cada regla de calidad. |
Tipo | Tipología de la regla de calidad, pudiendo ser: completitud, actualidad, consistencia, precisión, unicidad, y formato. |
Responsable | Nombre de la persona responsable de la regla de calidad. |
Ejecución | Tipología de la regla de calidad, pudiendo ser: Planificada o proactiva. |
Fecha de creación | Fecha en la que la regla de calidad ha sido creada. |
Fecha de modificación | Si aplica, fecha en la que se realizó algún tipo de modificación a la regla de calidad |
Frecuencia de ejecución | En caso de ser planificada, indica cada cuánto tiempo tiene que ejecutarse la regla de calidad definida. |
Solicitante | Nombre de la persona solicitante de la nueva regla de calidad. |
Solicitante modificación | Nombre de la persona que solicita una modificación de la regla de calidad |
Durante la definición de las distintas reglas de calidad dentro de la herramienta, es necesario establecer un umbral mínimo a partir del cual la regla de calidad reportará un error. Ante esto, existe la necesidad de identificar un umbral por defecto para las diferentes reglas creadas, siendo este el 90%. En determinados casos, será posible solicitar la modificación de dicho umbral mediante el proceso pertinente.
A lo largo de la metodología definida en el Marco de Trabajo de Governance, se identifican una serie de normas que han de cumplirse para la gestión de los diferentes assets que presenta la herramienta. A continuación, se detallan dichas normas en función del asset al que afectan.
A lo largo del proceso de identificación y creación de relaciones entre los diferentes activos de la herramienta, es necesario regirse por una serie de normativas que garanticen la correcta gestión y mantenimiento de estas. Estas normativas giran en torno a dos aspectos fundamentales que se detallan a continuación.
En primer lugar, es necesario conocer entre que activos es necesario realizar el proceso de definición de relaciones, así como el sentido de estas. Esto es, no definir relaciones que sean generadas de forma automática y respetar aquellas que se hayan establecido por la organización como obligatorias.
A continuación, se detalla entre qué tipo de activos es posible la definición de relaciones.
Asset desde el que se establece la relación | Asset relacionado |
Glosario de términos | Ontología |
Vista de negocio | Vista técnica |
Glosario de términos | Colección |
Vista técnica | Asset de diccionario |
Vista de negocio | Asset de diccionario |
Por otro lado, se deben seguir una serie de directrices acerca de la tipología de relaciones que se han de crear. Esto es, en función de los activos que se quieran relacionar, así como el objetivo de cada una de estas relaciones, la tipología de estas estará determinada según se establece en la siguiente tabla.
Asset desde el que se establece la relación | Asset con el que se relaciona | Tipo de relación |
Glosario de términos | Ontología | Define a |
Glosario de términos | Colección | Define a |
Vista técnica | Asset de diccionario | atr_origen |
Vista de negocio | Asset de diccionario | atr_origen |
La plataforma Apache Airflow permite la creación, la planificación y el seguimiento de flujos de trabajo a través de la programación informática. Es una solución de código abierto que se utiliza para la arquitectura y la orquestación de circuitos de datos y para el lanzamiento de tareas. Concretamente, en el proyecto de Gobernanza de datos del SAS, se utiliza principalmente para lanzar procesos en un orden concreto y con una periodicidad concreta.
Los casos de uso más comunes son la automatización de ingestas de datos, acciones de mantenimiento periódicas y tareas de administración. Para ello, Airflow permite planificar trabajos como un CRON y también ejecutarlos bajo demanda.
Los procesos o tareas se agrupan en DAGs (gráfico acíclico dirigido) a los cuales se les da una frecuencia o periodicidad de ejecución customizada. El orden en el que se ejecuta cada proceso dentro del DAG puede ser cualquiera que defina el usuario, o también pueden ejecutarse todos a la vez, aunque normalmente se organizan teniendo en cuenta las dependencias y los flujos de datos.
La plataforma también da información acerca de cuándo ha sido la última ejecución de cada proceso y cuál es el estado de esa ejecución, es decir, si el proceso terminó con éxito, si hubo algún fallo, si está corriendo, si fue detenido, etc.
Los procesos agrupados en DAGs se conforman de cualquier acción que se pueda ejecutar en Python, desde limpiezas o ingestas hasta llamadas a APIs. En el contexto del del proyecto de la OTBI del SAS, lo más habitual es que sean llamadas a flujos de Rocket con parámetros definidos por el usuario. Es por ello por lo que Airflow se relaciona estrechamente con el módulo de Rocket de Stratio.
Tanto los DAGs de Airflow como su periodicidad y el resto de los parámetros se programan a través de Python. Estos scripts de Python se suben a Git, de tal forma que Airflow lee constantemente los scripts de Python almacenados en Git.
Git es una plataforma de gestión de repositorios de código fuente y de colaboración entre desarrolladores. Git permite a los equipos de desarrollo almacenar, administrar, revisar y colaborar en proyectos usando el sistema de control de versiones de la propia plataforma.
Las siglas DAG se corresponden con Gráfico Acíclico Dirigido ya que representan el circuito de tareas teniendo en cuenta las dependencias y los flujos. También especifica el orden y la frecuencia de ejecuciones o reintentos.
No obstante, teniendo en cuenta el uso que hace de ellos la OTBI en el paradigma del SAS, se podría definir un DAG como una agrupación de workflows de Rocket.
Dentro del contexto del proyecto del SAS, no es necesario definir el orden de ejecución de los DAGs, ya que el orden de las tareas que contiene el DAG va incluido dentro del script. Además, el orden de tareas puede verse en la pestaña “Graph” de Airflow, dónde también puede observarse la dependencia y el paralelismo de las tareas.
Airflow también permite crear grupos de tareas y establecer dependencias entre dichos grupos, de modo que se podría programar que al finalizar una tarea se ejecute un grupo de tareas en paralelo, y que al finalizar todas ellas, se lance otra tarea de manera secuencial.
En la imagen anterior, se observa como tenemos un grupo de tareas llamado “curation_analysis”, que contiene 3 tareas. Una de esas subtareas, es otro grupo que contiene a su vez 5 tareas (“exec_curation_analysis”). Siempre y cuando sea posible, han de organizarse las tareas en grupos y subgrupos, siguiendo el ejemplo anterior, con el fin de facilitar la comprensión del DAG.
No es necesario incluir en la nomenclatura un control de versiones, ya que esto se realiza automáticamente gracias al sistema de control de versiones de Git.
No obstante, sí que es necesario establecer las normas que deben seguirse para nombrar los DAGs que se creen dentro de la herramienta de Git:
A cada DAG se le puede poner una o varias etiquetas dentro del script de Python. Esta etiqueta aparecerá en Airflow debajo del nombre del DAG, obteniendo así la posibilidad de filtrar los DAGs en Airflow, una opción muy ventajosa a la hora de buscar un DAG en concreto entre cientos de ellos.
Para mantener una buena organización y facilitar la búsqueda de DAGs, se le ha de poner a cada uno de ellos una etiqueta que haga referencia al proyecto al que pertenecen. Por ejemplo, si hay un proyecto de Rocket llamado “ana_omop” que contiene los workflows a los que llaman los procesos o tareas que conforman un DAG, ese DAG ha de llevar la etiqueta “ana_omop”. Hay casos en los que un DAG puede llamar a workflows de diferentes proyectos de Rocket, en dicho caso, el DAG debe tener las etiquetas de ambos proyectos. Otra nomenclatura a seguir sería tener en cuenta el propósito del proyecto. Por ejemplo, en un desarrollo de usuarios, se debería etiquetar a esos DAGs con la etiqueta “usuarios”, de forma adicional a la etiqueta de proyecto.
En la medida de lo posible, es obligatorio que las etiquetas coincidan con los nombres de las carpetas donde están alojados los DAGs.
Tanto la carpeta “dags” como la carpeta “librerías” son desarrollos de la UTE los cuáles no deben modificarse en ningún caso. Para los desarrollos de la OTBI se crean dos carpetas nuevas cuya jerarquía ha de llevarse a cabo tal y como se dicta en los siguientes puntos.
En el repositorio Git hay una carpeta llamada “dags” en la que la UTE ha creado una subcarpeta por cada DAG con sus respectivos scripts de inicio y script de tareas. Esta carpeta no se puede modificar, ni tampoco sus contenidos, ya que afectaría a los casos de usos ya entregados.
Para organizar los DAGs que se van desarrollando por parte de la OTBI se ha creado una carpeta llamada “dags_sas” en la que se deberán recoger dichos desarrollos. Esta separación es necesaria porque la OTBI trabaja sus desarrollos en tres branchs distintos (dev, pre y master) y la hora de promocionar una carpeta de un branch a otro los cambios se pierden. Ello implica que si se promociona alguna subcarpeta de “dags” (desarrollos de la UTE) se estarían modificando casos de uso ya entregados, algo que está prohibido. Por este motivo se deben separan los desarrollos de la UTE de los desarrollos de la OTBI.
Dentro de la carpeta de “dags_sas” (desarrollos de la OTBI), la organización debe consistir en agrupar los DAGs por proyectos de Rocket. Además, es una organización lógica, ya que los procesos o tareas de Airflow son, en su mayoría, llamadas a workflows de Rocket y éstos se organizan en proyectos.
Los DAGs de la UTE (recogidos en la carpeta “dags”) frecuentemente invocan a ciertas funciones que se almacenan en una carpeta llamada “librería”. De nuevo, para no afectar a los desarrollos ya entregados por parte de la UTE, la carpeta “librerías” no se puede modificar ni tampoco sus contenidos.
Dada la premisa anterior, la OTBI ha creado una carpeta llamada “librería_sas” para recopilar ahí las funciones a las que se invocará en los scripts de sus DAGs. Del mismo modo que en la carpeta “dags_sas”, la carpeta “librería_sas” se debe organizar por proyectos de Rocket.
Como punto de partida, es conveniente mencionar que en el área de Gobernanza del SAS hay varios tipos de orígenes a los cuáles pueden apuntar las colecciones de datos. Uno de ellos serían las bases de datos relacionales de Oracle, donde el SAS almacena todos sus datos, y por tanto, es la fuente primera de la organización. Por otro lado, se tiene el sistema de almacenamiento de Stratio, donde se generan tablas mediante sus respectivos desarrollos, el cual tiene dos tipos de almacenamiento: HDFS (sistema distribuido de Big Data) y Postgres.
Parquet es un formato de archivo de almacenamiento de datos columnar y abierto que se utiliza para almacenar datos en HDFS. Una misma tabla almacenada en HDFS consta de varios archivos parquets. En los desarrollos se determina el número de parquets que se quieren generar. Se ha de tener en cuenta, en la medida de lo posible, que un mismo parquet no debe pesar, como regla general, más de 1 GB, y nunca menos de 250 MB.
Suele ser necesario particionar los ficheros parquets, es decir, separar las filas de una tabla dependiendo del valor de una de sus columnas. Habitualmente, se particionan las tablas por alguna columna tipo fecha.
Por ejemplo, particionando la tabla por una columna de año, se crea un archivo parquet para cada valor distinto de la columna año de una tabla y se crea una subcarpeta para cada parquet. También puede particionarse un mismo año en meses o agrupaciones de meses, en ese caso, pueden existir varios parquets dentro de una misma subcarpeta.
|
- |
o |
- |
o |
Cuando la tabla es muy grande, se intentan crear particiones para que cada directorio tenga 1 o 2 parquets de 1GB. Del mismo modo, es importante que los parquets generados tengan un tamaño mínimo de 250 MB para no infrautilizar los recursos de la herramienta.
En base a la experiencia, se considera que, aproximadamente, 1 GB en parquet son 10 millones de filas. No obstante, dependiendo del número de columnas, esto podría variar, por ejemplo, una tabla con que contenga más columnas que otra, pesará más. También hay que tener en cuenta los tipos de datos, por ejemplo, una tabla con columnas de tipo BLOB pesará más que otra con columnas de tipo INTEGER.
Considerando la premisa anterior, se intenta particionar la tabla por una columna de tal forma que los parquets resultantes sean de 10 millones de filas. Normalmente, se suele hacer una disgregación de la columna fecha, esto supone que haya una columna para el año y otra para el mes y de esta forma el particionado sea más flexible y versátil.
La columna de partición puede ser cualquiera siempre y cuando no contenga nulos y sea equidistante, es decir, que tenga aproximadamente el mismo número de registros para cada uno de sus distintos valores.
Por otra parte, al realizar consultas sobre la tabla, habría que hacer una consulta conocida como “consulta a nivel de columna”, por ejemplo: SELECT * FROM Tabla1 WHERE anyo=2020. De esta manera, se optimiza el rendimiento de la memoria ya que la consulta lleva implícito el directorio que se debe consultar, porque la tabla está particionada por año.
En determinadas ocasiones, se sabe de antemano la columna por la cual se va a consultar la tabla, por ejemplo, si el usuario funcional manifiesta que suele consultar y filtrar en la tabla por la columna “cod_provincia”, habría que particionar por esa columna, siempre y cuando sea una columna técnicamente adecuada para hacer la partición. Para elegir dicha columna de partición, también habrá que tener en cuenta la usada en las consultas de los procesos ETLs de carga.
Las ingestas se refieren al movimiento de los datos desde Oracle a HDFS de las tablas que se desean migrar.
Existen casos concretos en los que la ingesta no es necesaria, ya que, como se apuntaba anteriormente, en Stratio se pueden crear colecciones que apunten a orígenes de Oracle.
Las tablas deben ser ingestadas en HDFS para poder cargar las filas que existían previamente en Oracle, dentro de Stratio. Es decir, se empieza a generar la tabla X a partir de un día, pero se necesitará hacer una carga inicial con todo lo que existía previamente en Oracle antes de ese día en concreto.
Es en el proceso de curación donde se pueden incorporan nuevas columnas, por tanto, deben ingestarse y curarse aquellas tablas en las que se necesite agregar nuevas columnas.
Existen varios tipos de ingestas: completas e incrementales.
En una ingesta completa se carga por primera vez o se reescribe completamente la tabla como un nuevo conjunto de datos, el proceso implica cargar todos los datos desde cero.
| Ventajas | Desventajas |
|---|---|
|
|
Por su parte, en una ingesta incremental, solo se cargan y actualizan los datos que han cambiado (nuevos o modificados) desde la última carga.
| Ventajas | Desventajas |
|---|---|
|
|
En el contexto del área de Gobernanza del SAS existe otro tipo de ingesta especial que es la ingesta incremental por particiones, un híbrido entre ingesta total e ingesta incremental. Consiste en hacer ingestas truncando las particiones modificadas. Además, a través de este método se actualizarían en Stratio aquellas filas que son borradas en Oracle.
Este tipo de ingesta sólo se podrá realizar cuando la tabla está particionada en Oracle, y cuando se sabe que los procesos de carga en Oracle van truncando/escribiendo por particiones la tabla en cuestión.
Por ejemplo, si se sabe que han cambiado tres filas, en una ingesta incremental, se ingestarían esas tres filas. Sin embargo, si la tabla en cuestión en Oracle estuviese particionada por la columna cod_anyo, y esas 3 filas modificadas pertenecen a la partición cod_anyo = 2023, la ingesta incremental por particiones lo que haría sería ingestar y sobreescribir en Stratio todos los registros con cod_anyo = 2023. Es decir, se cargaría por completo (borrando previamente) todo el año del 2023.
Las tablas que se generan en Stratio, a través de los procesos de curación o las ETLs de carga, conforman los inputs de la curación, una vez han sido ingestados. Los casos en los que dichos datos se suelen almacenar, una vez curados, en HDFS son los siguientes:
En el resto de casos, normalmente cuando el tamaño de las tablas es pequeño, dichas tablas se almacenan en Postgres, siempre que se decidan ingestar/curar. Existe el caso de otras tablas pequeñas que se decide no ingestar ni curar. Para ellas, simplemente se apuntará a Oracle desde las colecciones.
Existe una casuística en la cual la tabla, una vez curada, debe almacenarse en Postgres y no en HDFS, aunque sea masiva. Es el caso en el que la tabla vaya a ser consultada por filas en vez de por columnas, es decir, que se vaya a buscar registros bastante concretos, tratándose de filas exactas, por ejemplo: SELECT * FROM tabla1 WHERE DNI=01234567A.
Pueden existir tablas candidatas a estar en HDFS que se usen como inputs, pero no se generen, esas tablas se ingestan y se curan pero no se llevan a consumo ni a Postgres. En consecuencia, las colecciones que usen esa tabla apuntarán al curado o al origen, ya que es su versión más consistente, esto se hace para evitar horas de desarrollo.
Por otra parte, habrá tablas que se utilicen como inputs, pero no se ingesten ni se curen, es el caso de tablas que no sean candidatas a estar en HDFS y, por tanto, se apuntará directamente al origen.
Existen varios tipos de curaciones: competas e incrementales.
El curado completo implica revisar y limpiar todo el conjunto de datos para corregir errores, inconsistencias, y asegurar la calidad de los datos.
Ventajas | Desventajas |
|
|
En el contexto del área de Gobernanza del SAS existe otro tipo de curación especial, que es la curación delta. Este tipo de curación sólo procesa los últimos datos ingestados usando la columna "ts_raw" (fecha de carga en la capa raw). Se usa en casos muy extremos donde la curación completa implicaría mucho tiempo de carga (más de 12 horas).
Dado que en las ingestas incrementales pueden existir filas duplicadas (un mismo registro puede modificarse varias veces en procesos de curaciones), este tipo de curación obtiene la versión más reciente de cada registro a partir de las claves primarias indicadas por parámetros.
Tras la carga y el curado, se realiza una operación UPSERT (Update/Insert) de las nuevas filas (ya sin duplicados) sobre la capa de curado y usando las mismas claves primarias anteriores.
Este tipo de curación es eficiente, pues no procesa la tabla entera, pero su uso debe ser comedido, ya que exige mantener un control diario de que la ejecución sea correcta al existir el riesgo de que se pierdan datos.
La curación delta se usa en los siguientes casos:
En cuanto a colecciones, existen colecciones “raw” que apuntan a la capa de ingestas, colecciones “cur” que apuntan exclusivamente a /curado_sas, colecciones “neg” que apuntan a /consumo o a _postgres (versión más consistente y generada en HDFS por procesos ETLs de Stratio), o en su defecto a /curado_sas (segunda versión más consistente). Normalmente, la colección a consumir y usar es la colección “neg”, donde están las versiones más consistentes.
Las diferentes capas definidas por las que transitan los datos son las siguientes:
Todas las carpetas “…_incremental” serán incluidas en el backup del HDFS. En estas carpetas se incluyen las tablas cuya generación es costosa y no es fácil de cargar de forma completa de una sola vez.
La capa de consumo puede estar en Postgres o en HDFS en función de su volumen. Como mínimo, para que sea rentable tener la tabla almacenada en HDFS, el peso de cada parquet asociado a la tabla ha de ser superior a 250 MB.
Hay que tener en cuenta que el espacio que ocupan las tablas en Oracle no es el mismo que en HDFS, por lo tanto, hasta que la tabla no esté ingestada, no se podrá saber su peso exacto. Por experiencia, se conoce que 250 MB son aproximadamente 2,5 millones de filas. La OTBI, por defecto, pasa a Postgres tablas con menos de 5 millones de filas, y, si tiene más, se almacena en HDFS.
Los nombres de los archivos parquets se generan automáticamente en Stratio, resultando una serie de caracteres alfanuméricos que no hacen alusión alguna a los datos ni al nombre de la tabla.
Este nombre es algo que no se puede modificar, y, por tanto, hay que tenerlo en cuenta en la posible integración de parquets externos, dado que si la nomenclatura del parquet no es la correcta, el virtualizador y la disponibilización de los datos no funcionará correctamente.