{"id":13915,"date":"2025-01-25T16:27:40","date_gmt":"2025-01-25T15:27:40","guid":{"rendered":"https:\/\/www.palentino.es\/blog\/?p=13915"},"modified":"2025-01-25T16:34:08","modified_gmt":"2025-01-25T15:34:08","slug":"etl-elt-processes-and-tools-que-son-y-ejemplo-practico","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/etl-elt-processes-and-tools-que-son-y-ejemplo-practico\/","title":{"rendered":"ETL\/ELT Processes and Tools: Qu\u00e9 son y ejemplo pr\u00e1ctico"},"content":{"rendered":"<p><strong>ETL y ELT: Definici\u00f3n B\u00e1sica<\/strong><\/p>\n<p><strong>ETL<\/strong> (Extract, Transform, Load) y <strong>ELT<\/strong> (Extract, Load, Transform) son procesos que se utilizan para mover datos de una fuente a un destino, t\u00edpicamente en un entorno de an\u00e1lisis o almacenamiento de datos (data warehouse). Ambos tienen la misma finalidad, pero difieren en el orden de los pasos y en las herramientas empleadas.<\/p>\n<p><strong>Diferencias Principales entre ETL y ELT:<\/strong><\/p>\n<table style=\"height: 156px;\" width=\"672\">\n<thead>\n<tr>\n<th><strong>Aspecto<\/strong><\/th>\n<th><strong>ETL<\/strong><\/th>\n<th><strong>ELT<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Flujo del proceso<\/strong><\/td>\n<td>Extract \u2192 Transform \u2192 Load<\/td>\n<td>Extract \u2192 Load \u2192 Transform<\/td>\n<\/tr>\n<tr>\n<td><strong>Transformaci\u00f3n<\/strong><\/td>\n<td>Ocurre antes de cargar los datos.<\/td>\n<td>Ocurre despu\u00e9s de cargar los datos.<\/td>\n<\/tr>\n<tr>\n<td><strong>Uso com\u00fan<\/strong><\/td>\n<td>Sistemas tradicionales de an\u00e1lisis.<\/td>\n<td>Plataformas modernas (e.g., Snowflake).<\/td>\n<\/tr>\n<tr>\n<td><strong>Rendimiento<\/strong><\/td>\n<td>Limitado a la potencia del servidor ETL.<\/td>\n<td>Escalabilidad del almacenamiento moderno.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2025\/01\/ETL.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-13921\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2025\/01\/ETL.png\" alt=\"\" width=\"1015\" height=\"576\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2025\/01\/ETL.png 1015w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2025\/01\/ETL-300x170.png 300w\" sizes=\"auto, (max-width: 1015px) 100vw, 1015px\" \/><\/a><br \/>\n<!--more--><\/p>\n<p><strong>Herramientas Comunes para ETL\/ELT:<\/strong><\/p>\n<ol>\n<li><strong>Apache Airflow<\/strong> (Open Source): Ideal para la orquestaci\u00f3n de workflows.<\/li>\n<li><strong>Matillion<\/strong> (Integrado con Snowflake): Herramienta visual f\u00e1cil de usar para ELT.<\/li>\n<li><strong>Informatica<\/strong> (Comercial): Amplias capacidades de integraci\u00f3n para grandes empresas.<\/li>\n<\/ol>\n<h3><strong>Ejemplo Pr\u00e1ctico: Pipeline ELT con Snowflake y Python<\/strong><\/h3>\n<p><strong>Escenario:<\/strong><br \/>\nDeseamos cargar datos desde un archivo CSV en Amazon S3 hacia Snowflake, transformarlos en la base de datos y prepararlos para an\u00e1lisis.<\/p>\n<p><strong>Paso 1: Extract (Extraer los datos)<\/strong> Los datos se encuentran en un archivo CSV almacenado en un bucket de Amazon S3.<\/p>\n<p><span style=\"color: #333399;\"><em># Subimos un archivo local a S3<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>aws s3 cp data.csv s3:\/\/mi-bucket\/datos\/<\/em><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Paso 2: Load (Cargar los datos en Snowflake)<\/strong><br \/>\nCargamos los datos a una tabla de Snowflake utilizando Python.<\/p>\n<p><span style=\"color: #333399;\"><em>import snowflake.connector<\/em><\/span><\/p>\n<p><span style=\"color: #333399;\"><em># Conexi\u00f3n a Snowflake<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>conn = snowflake.connector.connect(<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>user=&#8217;USUARIO&#8217;,<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>password=&#8217;CONTRASE\u00d1A&#8217;,<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>account=&#8217;CUENTA&#8217;<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>)<\/em><\/span><\/p>\n<p><span style=\"color: #333399;\"><em># Ejecuci\u00f3n de una consulta para cargar los datos<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>cursor = conn.cursor()<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>cursor.execute(&#8220;&#8221;&#8221;<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>COPY INTO mi_tabla<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>FROM &#8216;s3:\/\/mi-bucket\/datos\/&#8217;<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>CREDENTIALS=(AWS_KEY_ID=&#8217;KEY&#8217; AWS_SECRET_KEY=&#8217;SECRET&#8217;)<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>FILE_FORMAT=(TYPE=CSV FIELD_OPTIONALLY_ENCLOSED_BY='&#8221;&#8216; SKIP_HEADER=1)<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>&#8220;&#8221;&#8221;)<\/em><\/span><\/p>\n<p><strong>Paso 3: Transform (Transformar los datos en Snowflake)<\/strong><br \/>\nRealizamos transformaciones en los datos directamente dentro de Snowflake.<\/p>\n<p><span style=\"color: #333399;\"><em>&#8212; Limpiamos los datos y creamos una nueva tabla transformada<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>CREATE TABLE datos_limpios AS<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>SELECT<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>id,<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>UPPER(nombre) AS nombre_mayuscula,<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>fecha,<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>cantidad * 1.21 AS cantidad_con_impuestos<\/em><\/span><br \/>\n<span style=\"color: #333399;\"><em>FROM mi_tabla;<\/em><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Resultado Final:<\/strong><br \/>\nLos datos ahora est\u00e1n disponibles en una tabla llamada <strong>datos_limpio<\/strong>s, listos para ser analizados por equipos de negocio o visualizados en herramientas como Tableau o Power BI.<\/p>\n<hr \/>\n<p><strong>Beneficios de ELT con Snowflake:<\/strong><\/p>\n<ol>\n<li>Escalabilidad gracias al procesamiento en la nube.<\/li>\n<li>Menos movimiento de datos, ya que la transformaci\u00f3n ocurre en el destino.<\/li>\n<li>Integraci\u00f3n sencilla con herramientas modernas como Python, Airflow y Matillion.<\/li>\n<\/ol>\n<hr \/>\n<p><strong>Conclusi\u00f3n:<\/strong><br \/>\nDominar los procesos ETL\/ELT y las herramientas asociadas te permitir\u00e1 trabajar de manera eficiente con grandes vol\u00famenes de datos en arquitecturas modernas como Snowflake. \u00a1Practica creando pipelines simples y ve aumentando la complejidad con el tiempo!<\/p>\n<ul>\n<li><strong>Apache Airflow<\/strong>: <a href=\"https:\/\/airflow.apache.org\/\" target=\"_new\" rel=\"noopener\">https:\/\/airflow.apache.org\/<\/a><\/li>\n<li><strong>Matillion<\/strong>: <a href=\"https:\/\/www.matillion.com\/\" target=\"_new\" rel=\"noopener\">https:\/\/www.matillion.com\/<\/a><\/li>\n<li><strong>Informatica<\/strong>: <a href=\"https:\/\/www.informatica.com\/\" target=\"_new\" rel=\"noopener\">https:\/\/www.informatica.com\/<\/a><\/li>\n<li><strong>Snowflake<\/strong>: <a href=\"https:\/\/www.snowflake.com\/\" target=\"_new\" rel=\"noopener\">https:\/\/www.snowflake.com\/<\/a><\/li>\n<li><strong>Python<\/strong>: <a href=\"https:\/\/www.python.org\/\" target=\"_new\" rel=\"noopener\">https:\/\/www.python.org\/<\/a><\/li>\n<li><strong>Bash<\/strong>: <a target=\"_new\" rel=\"noopener\">https:\/\/www.gnu.org\/software\/bash\/<\/a><\/li>\n<\/ul>\n<p>Estos enlaces te llevar\u00e1n a las p\u00e1ginas oficiales de cada herramienta, donde podr\u00e1s obtener m\u00e1s informaci\u00f3n y acceder a recursos adicionales.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ETL y ELT: Definici\u00f3n B\u00e1sica ETL (Extract, Transform, Load) y ELT (Extract, Load, Transform) son procesos que se utilizan para mover datos de una fuente a un destino, t\u00edpicamente en un entorno de an\u00e1lisis o almacenamiento de datos (data warehouse). Ambos tienen la misma finalidad, pero difieren en el orden de los pasos y en las herramientas empleadas. Diferencias Principales entre ETL y ELT: Aspecto ETL ELT Flujo del proceso Extract \u2192 Transform \u2192 Load Extract \u2192 Load \u2192 Transform Transformaci\u00f3n Ocurre antes de cargar los datos. Ocurre despu\u00e9s de cargar los datos. Uso com\u00fan Sistemas tradicionales de an\u00e1lisis. Plataformas modernas (e.g., Snowflake). Rendimiento Limitado a la potencia del servidor ETL. Escalabilidad del almacenamiento moderno.<\/p>\n","protected":false},"author":1,"featured_media":5368,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1415],"tags":[],"class_list":["post-13915","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categoria-es"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/13915","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=13915"}],"version-history":[{"count":6,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/13915\/revisions"}],"predecessor-version":[{"id":13922,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/13915\/revisions\/13922"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/5368"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=13915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=13915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=13915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}