{"id":39002,"date":"2023-10-04T17:45:21","date_gmt":"2023-10-04T17:45:21","guid":{"rendered":"https:\/\/www.conectasoftware.com\/magazine\/?p=39002"},"modified":"2023-12-15T13:10:17","modified_gmt":"2023-12-15T13:10:17","slug":"estructuras-de-datos-en-el-sistema-etl","status":"publish","type":"post","link":"https:\/\/www.conectasoftware.com\/magazine\/estructuras-de-datos-en-el-sistema-etl\/","title":{"rendered":"Estructuras de Datos en el Sistema ETL"},"content":{"rendered":"\n<p>En esta secci\u00f3n, describimos los tipos esenciales de estructuras de datos que probablemente necesitar\u00e1s en tu sistema ETL.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Archivos Planos<\/h2>\n\n\n\n<p>En muchos casos, no necesitar\u00e1s alojar tus datos dentro de los l\u00edmites de un DBMS. Si no est\u00e1s utilizando una herramienta ETL dedicada y est\u00e1s realizando todas las tareas ETL con SQL en tu base de datos, necesitas crear estructuras de tabla DBMS para almacenar todos tus datos en etapa de preparaci\u00f3n. Sin embargo, si cuentas con una herramienta ETL o est\u00e1s utilizando scripts de shell o programas de scripting como Perl, VBScript o JavaScript, que pueden manipular archivos de texto, puedes almacenar datos en etapa de preparaci\u00f3n directamente en tu sistema de archivos como archivos de texto simples.<\/p>\n\n\n\n<p>Cuando los datos se almacenan en columnas y filas dentro de un archivo en tu sistema de archivos para emular una tabla de base de datos, se le conoce como un archivo plano o secuencial. Si tu sistema operativo es cualquier versi\u00f3n de UNIX o Windows, los datos en tus archivos planos est\u00e1n en un c\u00f3digo de caracteres estandarizado conocido como C\u00f3digo Est\u00e1ndar Americano para el Intercambio de Informaci\u00f3n (ASCII). \u00a1Los archivos planos ASCII pueden ser procesados y manipulados por herramientas ETL o lenguajes de scripting como si fueran tablas de base de datos, y en ciertos casos mucho m\u00e1s r\u00e1pido!<\/p>\n\n\n\n<p>Un DBMS requiere sobrecarga para mantener metadatos sobre los datos que se est\u00e1n procesando, lo cual en casos simples no es realmente necesario en el entorno de preparaci\u00f3n de datos. Ha sido la sabidur\u00eda convencional que ordenar, fusionar, eliminar, reemplazar y muchas otras funciones de migraci\u00f3n de datos son mucho m\u00e1s r\u00e1pidas cuando se realizan fuera del DBMS. Existen muchos programas de utilidad dedicados a la manipulaci\u00f3n de archivos de texto. Ten en cuenta al realizar manipulaciones de archivos planos con lenguajes de scripting que puedes tener la obligaci\u00f3n de informar por separado a tus tablas de seguimiento de metadatos sobre las transformaciones que est\u00e1s realizando. Si el seguimiento de metadatos (digamos, para fines de cumplimiento) es tan importante como las propias transformaciones, deber\u00edas pensar en manejar estas operaciones a trav\u00e9s de una herramienta ETL dedicada que pueda proporcionar autom\u00e1ticamente el contexto de metadatos.<\/p>\n\n\n\n<p>La plataforma exacta para almacenar tus tablas de preparaci\u00f3n de datos depende de muchas variables, incluyendo est\u00e1ndares y pr\u00e1cticas corporativas. Sin embargo, hemos observado que es m\u00e1s pr\u00e1ctico usar archivos planos en lugar de tablas de base de datos para partes del proceso ETL cuando el prop\u00f3sito fundamental del proceso es uno de los siguientes:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Almacenamiento de Datos Fuente<\/h3>\n\n\n\n<p>Cuando extraes datos de su fuente original, debes entrar r\u00e1pidamente al sistema, seleccionar exactamente lo que necesitas y salir. Si el proceso ETL falla despu\u00e9s de que los datos son extra\u00eddos, debes poder empezar sin penetrar de nuevo en el sistema fuente. El mejor enfoque para reiniciar un proceso fallido sin penetrar constantemente el sistema fuente es volcar los datos extra\u00eddos en un archivo plano para su resguardo. Si el proceso falla en cualquier punto despu\u00e9s de que los datos han sido colocados en el archivo plano, el proceso puede reiniciar f\u00e1cilmente recogiendo los datos ya extra\u00eddos del archivo plano en el \u00e1rea de preparaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ordenamiento de Datos<\/h3>\n\n\n\n<p>Ordenar es un prerrequisito para pr\u00e1cticamente cada tarea de integraci\u00f3n de datos. Ya sea que est\u00e9s agregando, validando o realizando b\u00fasquedas, preordenar datos optimiza el rendimiento. Ordenar datos en el sistema de archivos puede ser m\u00e1s eficiente que seleccionar datos de una tabla de base de datos con una cl\u00e1usula ORDER BY. Dado que la naturaleza del ETL es integrar datos dispares, fusionar datos eficientemente es una prioridad principal que requiere ordenamiento intensivo. Una gran fracci\u00f3n de los ciclos de procesador de tu sistema ETL se destinar\u00e1n a ordenar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Filtrado<\/h3>\n\n\n\n<p>Supongamos que necesitas filtrar un atributo que no est\u00e1 indexado en la base de datos fuente. En lugar de forzar al sistema fuente a crear \u00edndices que pueden obstaculizar el procesamiento de transacciones, podr\u00eda ser m\u00e1s r\u00e1pido extraer todo el conjunto de datos en un archivo plano y grep (un comando UNIX para filtrar archivos de datos simples) solo las filas que cumplan con tus requisitos. Otro beneficio de tener la capacidad de filtrar datos sin usar una base de datos se realiza cuando los datos no provienen de una base de datos sino de archivos de datos. Un ejemplo com\u00fan de esto son los registros web. Al procesar datos de clickstream, usamos una declaraci\u00f3n grep con el interruptor -v para seleccionar todas las filas que no contienen ciertos valores como .gif o .jpg, por lo que los hits que est\u00e1n sirviendo archivos de imagen se excluyen del almac\u00e9n de datos. Filtrar archivos planos es tremendamente m\u00e1s eficiente que insertar todos los datos en una tabla de base de datos, indexar la tabla y luego aplicar una cl\u00e1usula WHERE para eliminar o seleccionar los datos en otra tabla.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reemplazo\/Sustituci\u00f3n de Cadenas de Texto<\/h3>\n\n\n\n<p>El sistema operativo puede recorrer r\u00e1pidamente un archivo de texto, traduciendo cualquier cadena a cualquier otra cadena de forma sorprendentemente r\u00e1pida usando el comando tr. Realizar b\u00fasquedas de subcadenas y reemplazar datos en una base de datos puede requerir funciones escalares anidadas y sentencias de actualizaci\u00f3n. Este tipo de procesamiento de archivos secuenciales es mucho m\u00e1s r\u00e1pido a nivel de sistema de archivos que con una base de datos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Agregaci\u00f3n<\/h3>\n\n\n\n<p>La agregaci\u00f3n debe ser soportada de dos maneras: en el flujo de datos ETL regular antes de cargar en una base de datos y en la base de datos misma cuando se agregan datos que solo pueden ser solicitados con filtrado de base de datos. Fuera de la base de datos, tiene m\u00e1s sentido usar un paquete de ordenamiento dedicado. Dentro de la base de datos, casi siempre tiene m\u00e1s sentido quedarse con la capacidad de ordenamiento de la base de datos, aunque ocasionalmente puede ser \u00fatil volcar grandes vol\u00famenes de datos fuera de la base de datos y usar el paquete de ordenamiento.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Referenciaci\u00f3n de Datos Fuente<\/h3>\n\n\n\n<p>En sistemas de transacciones normalizadas, es com\u00fan tener una \u00fanica tabla de referencia que soporte muchas otras tablas. Una tabla de Estado gen\u00e9rica, por ejemplo, puede soportar estados de pedidos, estados de env\u00edo y estados de pago. En lugar de consultar la misma tabla en el sistema fuente una y otra vez, es m\u00e1s eficiente extraer la tabla de referencia y alojarla en el \u00e1rea de preparaci\u00f3n una vez. Desde all\u00ed, puedes buscar datos con tu herramienta ETL. La mayor\u00eda de las herramientas ETL pueden leer una tabla de b\u00fasqueda en memoria y almacenarla all\u00ed durante la vida del proceso. Acceder a tablas de referencia almacenadas en memoria es extremadamente r\u00e1pido. Adem\u00e1s, utilizar datos de referencia en etapa de preparaci\u00f3n mantiene las consultas que golpean el sistema fuente m\u00e1s simples y eficientes, ya que se pueden omitir muchas de las uniones de tablas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Conjuntos de Datos XML<\/h2>\n\n\n\n<p>XML es un lenguaje para la comunicaci\u00f3n de datos. Superficialmente, XML toma la forma de documentos de texto plano que contienen tanto datos como metadatos, pero no informaci\u00f3n de formato. XML se expresa con una notaci\u00f3n muy similar a HTML pero se aparta de la arquitectura de un documento HTML. En contraste, HTML contiene datos e informaci\u00f3n de formato, pero no metadatos.<\/p>\n\n\n\n<p>Las diferencias entre XML y HTML son cruciales para entender c\u00f3mo XML afecta a los almacenes de datos. Los metadatos de XML consisten en etiquetas que identifican de manera inequ\u00edvoca cada \u00edtem en un documento XML. Por ejemplo, una factura codificada en XML contiene secuencias como: Aqu\u00ed, Customer es un elemento XML cuya definici\u00f3n ha sido establecida entre las partes emisora y receptora antes de que se transmita la factura. El elemento customer ha sido definido para contener varios atributos XML, incluyendo nombre, direcci\u00f3n, ciudad y posiblemente otros.<\/p>\n\n\n\n<p>XML tiene una extensa capacidad para declarar estructuras jer\u00e1rquicas, como formularios complejos con subcampos anidados repetitivos. Estas estructuras jer\u00e1rquicas no se mapean directamente en tablas relacionales bidimensionales est\u00e1ndar con filas y columnas. Cuando el almac\u00e9n de datos recibe un conjunto de datos XML, puede haber un proceso de extracci\u00f3n complejo para transferir permanentemente los datos a un almac\u00e9n de datos relacional. Ha habido cierta discusi\u00f3n sobre extender las bases de datos relacionales para proporcionar soporte nativo para las estructuras jer\u00e1rquicas de XML, pero esto supondr\u00eda una extensi\u00f3n sustancial de la sintaxis y sem\u00e1ntica de las bases de datos relacionales basadas en SQL, lo cual hasta el momento de escribir esto, no ha ocurrido.<\/p>\n\n\n\n<p>Dejando de lado los problemas de estructuras jer\u00e1rquicas complejas, XML es hoy en d\u00eda un medio extremadamente efectivo para mover datos entre sistemas de otro modo incompatibles, ya que XML (y los Esquemas XML que le siguen) proporcionan suficiente informaci\u00f3n para realizar una declaraci\u00f3n completa de CREATE TABLE en una base de datos relacional y luego poblar esta tabla con datos con los tipos de columna correctos. XML define un lenguaje universal para compartir datos. Esa es su fortaleza. La desventaja de XML para la transferencia de datos de gran volumen es la sobrecarga de la propia estructura del documento XML. Si est\u00e1s transmitiendo millones de registros similares y predecibles, deber\u00edas buscar una estructura de archivos m\u00e1s eficiente que XML para la transferencia de datos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">DTDs, Esquemas XML y XSLT<\/h3>\n\n\n\n<p>En XML, la forma est\u00e1ndar para que dos partes definan un conjunto de posibles etiquetas es intercambiando un documento especial conocido como Definici\u00f3n de Tipo de Documento (DTD). La declaraci\u00f3n DTD para nuestro ejemplo de cliente podr\u00eda ser expresada como:<\/p>\n\n\n\n<p><code>&lt;!ELEMENT Customer (Name, Address, City?, State?, Postalcode?)> <\/code><\/p>\n\n\n\n<p><code>&lt;!ELEMENT Name (#PCDATA)><\/code><\/p>\n\n\n\n<p>m\u00e1s l\u00edneas similares para Address, City, State y Postalcode. Aqu\u00ed, los signos de interrogaci\u00f3n despu\u00e9s de City, State y Postalcode indican que estos campos son opcionales. La declaraci\u00f3n #PCDATA indica que Name es una cadena de texto sin formato.<\/p>\n\n\n\n<p>N\u00f3tese que el DTD contiene algo menos de informaci\u00f3n que una declaraci\u00f3n SQL CREATE TABLE. En particular, no hay longitud de campo.<\/p>\n\n\n\n<p>Hasta ahora, los DTDs han sido la base para establecer un entendimiento de metadatos entre dos partes que intercambian XML. Varios grupos de la industria han estado definiendo DTDs est\u00e1ndar para sus \u00e1reas tem\u00e1ticas. Pero como administradores de almacenes de datos, no obtenemos suficiente de los DTDs para construir una tabla relacional. Para rectificar este problema, la organizaci\u00f3n de est\u00e1ndares W3C ha definido un sucesor de los DTDs de fuerza industrial conocido como Esquemas XML. Los Esquemas XML contienen mucha m\u00e1s informaci\u00f3n orientada a la base de datos sobre tipos de datos y c\u00f3mo se relacionan los elementos XML entre s\u00ed, o en otras palabras, c\u00f3mo se pueden unir las tablas.<\/p>\n\n\n\n<p>Cuando se ha acordado un Esquema XML y se ha recibido contenido XML, el contenido informativo se representa a trav\u00e9s de otra especificaci\u00f3n llamada Transformaciones de Lenguaje de Hojas de Estilo Extensible (XSLT). En realidad, XSLT es un mecanismo general para traducir un documento XML en otro documento XML, pero su uso m\u00e1s visible es para convertir XML en HTML para la presentaci\u00f3n final en pantalla.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Tablas Relacionales<\/h2>\n\n\n\n<p>Los datos en etapa de preparaci\u00f3n pueden opcionalmente almacenarse dentro de los l\u00edmites de un DBMS relacional. Utilizar tablas de base de datos es especialmente apropiado cuando no se dispone de una herramienta ETL dedicada. Almacenar tablas de preparaci\u00f3n en una base de datos tiene varias ventajas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Metadatos Aparentes<\/strong>: Una de las principales desventajas de usar archivos planos es que carecen de metadatos aparentes. Al almacenar datos en una tabla relacional, el DBMS mantiene autom\u00e1ticamente los metadatos t\u00e9cnicos, y los metadatos de negocio pueden adjuntarse f\u00e1cilmente a la tabla dentro del DBMS. Informaci\u00f3n como nombres de columnas, tipos y longitudes de datos, y cardinalidad es inherente al sistema de base de datos. Las descripciones de negocios de tablas y columnas son elementos com\u00fanmente a\u00f1adidos a los cat\u00e1logos de datos del DBMS.<\/li>\n\n\n\n<li><strong>Habilidades Relacionales<\/strong>: Hacer cumplir la integridad de datos o referencial entre entidades es f\u00e1cil de lograr en un entorno relacional. Si est\u00e1s recibiendo datos de sistemas no relacionales, podr\u00eda tener sentido preparar los datos en un modelo normalizado antes de transformarlos en un modelo dimensional.<\/li>\n\n\n\n<li><strong>Repositorio Abierto<\/strong>: Una vez que los datos est\u00e1n en un DBMS, pueden ser f\u00e1cilmente accesibles (asumiendo que se concede permiso) por cualquier herramienta compatible con SQL. El acceso a los datos es crucial durante las pruebas de aseguramiento de calidad y auditor\u00eda.<\/li>\n\n\n\n<li><strong>Soporte de DBA<\/strong>: En muchos entornos corporativos, el grupo de DBA es responsable solo de los datos dentro del DBMS. Los datos fuera de la base de datos, en el sistema de archivos, usualmente no son supervisados. La asignaci\u00f3n de espacio, respaldo y recuperaci\u00f3n, archivado y seguridad son tareas que el equipo ETL debe coordinar cuando los datos en preparaci\u00f3n no est\u00e1n en un DBMS.<\/li>\n\n\n\n<li><strong>Interfaz SQL<\/strong>: Encontrar\u00e1s muchas ocasiones en las que necesitar\u00e1s escribir SQL para manipular datos y obtener el formato correcto. La mayor\u00eda sabe que SQL es el lenguaje est\u00e1ndar para comunicarse con los datos, es f\u00e1cil de escribir y es poderoso. SQL es probablemente el lenguaje de programaci\u00f3n m\u00e1s conocido en el entorno de TI. La mayor\u00eda de los sistemas de bases de datos vienen con robustas funciones SQL que ahorran numerosas horas de codificaci\u00f3n manual. Oracle, por ejemplo, tiene funciones sobrecargadas como to_char() que pueden tomar pr\u00e1cticamente cualquier tipo de datos y convertirlo en una cadena de caracteres en una variedad de formatos. Adem\u00e1s de hacer cumplir la integridad referencial, tener la capacidad de usar SQL nativo es la raz\u00f3n principal para almacenar datos en etapa de preparaci\u00f3n en un entorno de base de datos.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Tablas de Trabajo Independientes del DBMS<\/h3>\n\n\n\n<p>Si decides almacenar tus datos en etapa de preparaci\u00f3n en un DBMS, tienes varias opciones de arquitectura cuando est\u00e1s modelando el esquema de preparaci\u00f3n de datos. Dise\u00f1ar tablas en el \u00e1rea de preparaci\u00f3n puede ser incluso m\u00e1s desafiante que dise\u00f1ar modelos de transacciones o dimensionales. Recuerda, las bases de datos de transacciones est\u00e1n dise\u00f1adas para ingresar datos; los dise\u00f1os dimensionales para extraer datos. Los dise\u00f1os del \u00e1rea de preparaci\u00f3n deben hacer ambos. Por lo tanto, no es raro ver una mezcla de arquitecturas de datos en el \u00e1rea de preparaci\u00f3n.<\/p>\n\n\n\n<p>Para justificar el uso de tablas de preparaci\u00f3n independientes, utilizaremos uno de nuestros aforismos favoritos: Mant\u00e9nlo simple. Las tablas independientes reciben su nombre porque no tienen dependencias con otras tablas en la base de datos. En el entorno transaccional, estas tablas son conocidas como hu\u00e9rfanas porque no tienen relaciones con otras tablas en el esquema. Debido a que las tablas independientes no tienen relaciones, son candidatas principales para almacenarse fuera de una base de datos relacional.<\/p>\n\n\n\n<p>La mayor\u00eda de las veces, la raz\u00f3n por la que creas una tabla de preparaci\u00f3n es para asentar los datos para que puedas manipularlos nuevamente usando SQL o un lenguaje de scripting. En muchos casos, especialmente en proyectos de almacenes de datos m\u00e1s peque\u00f1os, las tablas independientes son todo lo que necesitas en el \u00e1rea de preparaci\u00f3n.<\/p>\n\n\n\n<p>Solo porque las tablas independientes no est\u00e1n necesariamente normalizadas, no deben ser tratadas como archivos de volcado. Los archivos de volcado se crean t\u00edpicamente de forma arbitraria sin preocuparse por el espacio en disco o el rendimiento de las consultas. Cada campo de un archivo o tabla independiente debe tener un prop\u00f3sito y una definici\u00f3n l\u00f3gica. Las columnas superfluas se omiten de cualquier dise\u00f1o de tabla independiente. Para las tablas de base de datos, se debe establecer e implementar un plan de \u00edndices adecuado en todas las tablas independientes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En esta secci\u00f3n, describimos los tipos esenciales de estructuras de datos que probablemente necesitar\u00e1s en tu sistema ETL. Archivos Planos En muchos casos, no necesitar\u00e1s alojar tus datos dentro de los l\u00edmites de un DBMS. Si no est\u00e1s utilizando una herramienta ETL dedicada y est\u00e1s realizando todas las tareas ETL con SQL en tu base [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":39007,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[367],"tags":[],"class_list":{"0":"post-39002","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-etl"},"_links":{"self":[{"href":"https:\/\/www.conectasoftware.com\/magazine\/wp-json\/wp\/v2\/posts\/39002","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.conectasoftware.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.conectasoftware.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.conectasoftware.com\/magazine\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.conectasoftware.com\/magazine\/wp-json\/wp\/v2\/comments?post=39002"}],"version-history":[{"count":2,"href":"https:\/\/www.conectasoftware.com\/magazine\/wp-json\/wp\/v2\/posts\/39002\/revisions"}],"predecessor-version":[{"id":39005,"href":"https:\/\/www.conectasoftware.com\/magazine\/wp-json\/wp\/v2\/posts\/39002\/revisions\/39005"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.conectasoftware.com\/magazine\/wp-json\/wp\/v2\/media\/39007"}],"wp:attachment":[{"href":"https:\/\/www.conectasoftware.com\/magazine\/wp-json\/wp\/v2\/media?parent=39002"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.conectasoftware.com\/magazine\/wp-json\/wp\/v2\/categories?post=39002"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.conectasoftware.com\/magazine\/wp-json\/wp\/v2\/tags?post=39002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}