{"id":14999,"date":"2023-04-11T11:22:47","date_gmt":"2023-04-11T11:22:47","guid":{"rendered":"https:\/\/beta.bluetab.net\/?p=14999"},"modified":"2024-03-05T17:16:19","modified_gmt":"2024-03-05T17:16:19","slug":"lakehouse-streaming-en-aws-con-apache-flink-y-hudi","status":"publish","type":"post","link":"https:\/\/bluetab.org\/es\/lakehouse-streaming-en-aws-con-apache-flink-y-hudi\/","title":{"rendered":"LakeHouse Streaming en AWS con Apache Flink y Hudi"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"14999\" class=\"elementor elementor-14999\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b2ad9fe elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b2ad9fe\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-7eac278\" data-id=\"7eac278\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-45481b1 elementor-widget elementor-widget-heading\" data-id=\"45481b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">LakeHouse Streaming en AWS con Apache Flink y Hudi<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7843b8f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7843b8f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-1a4ee60\" data-id=\"1a4ee60\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d5531c7 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"d5531c7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/albertojaenrevuelta\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/albertojaenrevuelta\/\" target=\"_blank\">Alberto Jaen<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Engineer <\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-a5a94df\" data-id=\"a5a94df\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f643dea elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"f643dea\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/alfonsojerezizquierdo\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/alfonsojerezizquierdo\/\" target=\"_blank\">Alfonso Jerez<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Engineer <\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-2fa6cdb\" data-id=\"2fa6cdb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bae7214 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"bae7214\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/adrianjimenezhernandez\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/adrianjimenezhernandez\/\" target=\"_blank\">Adri\u00e1n Jim\u00e9nez<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Engineer <\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-6562b00 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6562b00\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-7c6d220\" data-id=\"7c6d220\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-dac8e8c elementor-share-buttons--view-icon elementor-share-buttons--skin-minimal elementor-share-buttons--shape-circle elementor-grid-0 elementor-share-buttons--color-official elementor-widget elementor-widget-share-buttons\" data-id=\"dac8e8c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"share-buttons.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-grid\" role=\"list\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_twitter\" role=\"button\" tabindex=\"0\" aria-label=\"Compartir en twitter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-twitter\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_linkedin\" role=\"button\" tabindex=\"0\" aria-label=\"Compartir en linkedin\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-linkedin\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-2b67acd\" data-id=\"2b67acd\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c738cdf elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c738cdf\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-55b901d\" data-id=\"55b901d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7668b05 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7668b05\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-592ef24\" data-id=\"592ef24\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6010029 elementor-widget elementor-widget-theme-post-featured-image elementor-widget-image\" data-id=\"6010029\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"theme-post-featured-image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6-1024x512.png\" class=\"attachment-large size-large wp-image-17831\" alt=\"\" srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6-1024x512.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6-300x150.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6-768x384.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f28ddaa elementor-widget elementor-widget-heading\" data-id=\"f28ddaa\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"intro\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Introducci\u00f3n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4abbf0e elementor-widget elementor-widget-text-editor\" data-id=\"4abbf0e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Cada d\u00eda la ingesta y procesamiento de streams de datos en <\/span><i><span style=\"font-weight: 400;\">Near Real Time <\/span><\/i><span style=\"font-weight: 400;\">(<\/span><i><span style=\"font-weight: 400;\">NRT<\/span><\/i><span style=\"font-weight: 400;\">)<\/span> <span style=\"font-weight: 400;\">es m\u00e1s necesario. Los requisitos de negocio son cada vez m\u00e1s exigentes en cuanto a tiempos de procesamiento y la disponibilidad de los datos m\u00e1s recientes y este art\u00edculo pretende abordar esta cuesti\u00f3n.<\/span><\/p><p><span style=\"font-weight: 400;\">Utilizando la nube de AWS y con un enfoque <\/span><i><span style=\"font-weight: 400;\">serverless<\/span><\/i><span style=\"font-weight: 400;\"> se desplegar\u00e1 en este art\u00edculo una aplicaci\u00f3n capaz de ingestar streams de datos y procesarlos en <\/span><i><span style=\"font-weight: 400;\">NRT<\/span><\/i><span style=\"font-weight: 400;\">, escribiendo su resultado en un <\/span><i><span style=\"font-weight: 400;\">LakeHouse<\/span><\/i><span style=\"font-weight: 400;\"> de tal manera que se puedan realizar operaciones ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad) sobre estos. Se desplegar\u00e1 una arquitectura en la que se ingestan datos con Locust, se procesan con Flink y finalmente se escriben en Hudi y JSON.<\/span><\/p><p><span style=\"font-weight: 400;\">Locust es un framework de Python que sirve para poder realizar <\/span><i><span style=\"font-weight: 400;\">Load Testing<\/span><\/i><span style=\"font-weight: 400;\"> de una manera f\u00e1cil y escalable. Las ventajas que ofrece Locust son la capacidad de poder definir este comportamiento de los usuarios con un lenguaje de prop\u00f3sito general y su facilidad de escalado.<\/span><\/p><p><span style=\"font-weight: 400;\">Flink se ha convertido en un <\/span><i><span style=\"font-weight: 400;\">framework<\/span><\/i><span style=\"font-weight: 400;\"> de referencia en el \u00e1mbito de procesamiento distribuido sobre streams de datos. Se caracteriza por su orientaci\u00f3n al procesamiento de streams (aunque tambi\u00e9n puede ejecutar procesos batch), su rapidez de procesamiento y su eficiencia en el uso de memoria. Hay otros frameworks populares en el sector, como Spark Streaming y Storm, en el apartado de arquitectura se discutir\u00e1 por qu\u00e9 en \u00faltima instancia Flink ha sido el elegido.<\/span><\/p><p><span style=\"font-weight: 400;\">Finalmente, Hudi es un formato de fichero transaccional que proporciona las habilidades propias de una base de datos y <\/span><i><span style=\"font-weight: 400;\">DataWarehouse<\/span><\/i><span style=\"font-weight: 400;\"> al <\/span><i><span style=\"font-weight: 400;\">Data Lake<\/span><\/i><span style=\"font-weight: 400;\">. Hudi da la capacidad de dejar atr\u00e1s los conceptos de batching y sustituirlo con una perspectiva de procesamiento incremental. Como el resto de las tecnolog\u00edas usadas en este art\u00edculo, se describe en detalle m\u00e1s adelante.<\/span><\/p><p><span style=\"font-weight: 400;\">Todo el c\u00f3digo utilizado en este art\u00edculo, tanto <\/span><i><span style=\"font-weight: 400;\">IaC<\/span><\/i><span style=\"font-weight: 400;\"> como de Python, puede visitarse en nuestro repositorio<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">1<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\"> en Github.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7aaf8a9 elementor-widget elementor-widget-heading\" data-id=\"7aaf8a9\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"objetivo\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">En pr\u00f3ximos art\u00edculos\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cffc795 elementor-widget elementor-widget-text-editor\" data-id=\"cffc795\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">M\u00faltiples art\u00edculos utilizar\u00e1n este como base para hablar de los siguientes temas:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Comparativa en cuanto a eficiencia de procesamiento, escritura y lectura de ficheros y costes en JSON vs Hudi.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Comparativa de <\/span><i><span style=\"font-weight: 400;\">MOR<\/span><\/i><span style=\"font-weight: 400;\"> vs <\/span><i><span style=\"font-weight: 400;\">COW<\/span><\/i><span style=\"font-weight: 400;\">, adem\u00e1s del consumo de estas tablas por los distintos tipos de queries (<\/span><i><span style=\"font-weight: 400;\">Snapshot, Read Optimized, Incremental<\/span><\/i><span style=\"font-weight: 400;\">).<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Escalabilidad.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Otras formas de explotaci\u00f3n del dato, como pueden ser Redshift o Pinot.<\/span><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c81a2eb elementor-widget elementor-widget-heading\" data-id=\"c81a2eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Arquitectura<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee6c422 elementor-widget elementor-widget-text-editor\" data-id=\"ee6c422\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">A continuaci\u00f3n se puede ver la arquitectura a alto nivel que se desplegar\u00e1:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c33a6cf elementor-widget elementor-widget-image\" data-id=\"c33a6cf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"760\" height=\"264\" data-src=\"https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2023\/04\/flink1.png\" class=\"attachment-large size-large wp-image-15002 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2023\/04\/flink1.png 760w, https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2023\/04\/flink1-300x104.png 300w\" data-sizes=\"(max-width: 760px) 100vw, 760px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 760px; --smush-placeholder-aspect-ratio: 760\/264;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ddf563e elementor-widget elementor-widget-text-editor\" data-id=\"ddf563e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Como se puede ver, se utiliza Locust como herramienta de <\/span><i><span style=\"font-weight: 400;\">Load Testing<\/span><\/i><span style=\"font-weight: 400;\"> para enviar datos sint\u00e9ticos a nuestra aplicaci\u00f3n. Estos ser\u00e1n ingestados a trav\u00e9s de un Kinesis Stream aprovisionado en modo <\/span><i><span style=\"font-weight: 400;\">On Demand<\/span><\/i><span style=\"font-weight: 400;\">, de esta manera el stream escalar\u00e1 de manera autom\u00e1tica. La alternativa al modo <\/span><i><span style=\"font-weight: 400;\">On Demand<\/span><\/i><span style=\"font-weight: 400;\"> es el modo <\/span><i><span style=\"font-weight: 400;\">Provisioned<\/span><\/i><span style=\"font-weight: 400;\">, donde debemos especificar el n\u00famero de shards (componente en los que se divide el stream), con el que queremos aprovisionar el stream. Las diferencias y particularidades de estos dos modos se explicar\u00e1n m\u00e1s en detalle en el apartado de Kinesis.<\/span><\/p><p><span style=\"font-weight: 400;\">Del stream de entrada leen las dos aplicaciones de Kinesis Analytics Flink. Como se mencion\u00f3 en el apartado de pr\u00f3ximos pasos, la raz\u00f3n de tener dos aplicaciones independientes escribiendo en Hudi y JSON respectivamente es para realizar una comparativa en pr\u00f3ximos art\u00edculos en cuanto a eficiencia. Finalmente los datos se alojar\u00e1n en S3, el servicio de almacenamiento de objetos de AWS.<\/span><\/p><p><span style=\"font-weight: 400;\">La particularidad que tiene la aplicaci\u00f3n de Kinesis Analytics Flink es que es <\/span><i><span style=\"font-weight: 400;\">serverless<\/span><\/i><span style=\"font-weight: 400;\">, es decir, abstrae al desarrollador de la complejidad de configurar y desplegar un cluster con Flink. A esta aplicaci\u00f3n se deben asignar unos <\/span><i><span style=\"font-weight: 400;\">KPUs<\/span><\/i><span style=\"font-weight: 400;\"> o <\/span><i><span style=\"font-weight: 400;\">Kinesis Processing Units<\/span><\/i><span style=\"font-weight: 400;\"> y un jar con la librer\u00eda de Flink y los conectores necesarios para poder desplegarla correctamente. Todos estos conceptos ser\u00e1n explicados en los siguientes apartados.<\/span><\/p><p><span style=\"font-weight: 400;\">La alternativa a esta perspectiva <\/span><i><span style=\"font-weight: 400;\">serverless<\/span><\/i><span style=\"font-weight: 400;\"> con un servicio administrado en AWS es la administraci\u00f3n completa de la aplicaci\u00f3n por parte del desarrollador, pudiendo utilizar herramientas como Kubernetes o EKS (Kubernetes administrado en AWS) para poder desplegar en un cluster esta aplicaci\u00f3n Flink. Las ventajas de esta segunda alternativa ser\u00eda el poder configurar tanto el cluster (n\u00famero de nodos, memoria, CPU, disco duro, etc\u2026) como la aplicaci\u00f3n Flink (gesti\u00f3n de <\/span><i><span style=\"font-weight: 400;\">disaster recovery<\/span><\/i><span style=\"font-weight: 400;\">, gesti\u00f3n de metadatos, etc\u2026) con un grado de detalle mucho mayor. En este art\u00edculo se decidi\u00f3 la primera alternativa por su simplicidad y facilidad de uso a la hora de conocer el <\/span><i><span style=\"font-weight: 400;\">framework<\/span><\/i><span style=\"font-weight: 400;\"> de Flink.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7f116da elementor-widget elementor-widget-heading\" data-id=\"7f116da\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"coste\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Locust<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3fd4aa7 elementor-widget elementor-widget-text-editor\" data-id=\"3fd4aa7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">La primera pieza en la pipeline de ingesta de datos es el componente de Locust escrito en Python. A diferencia de otros <\/span><i><span style=\"font-weight: 400;\">frameworks<\/span><\/i><span style=\"font-weight: 400;\"> disponibles en el mercado como JMeter, Locust nos da la capacidad de poder escribir un c\u00f3digo simple con Python en vez de utilizar un lenguaje espec\u00edfico a un dominio o una interfaz de usuario.<\/span><\/p><p><span style=\"font-weight: 400;\">Adem\u00e1s, Locust est\u00e1 basado en eventos y utiliza greenlet<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">2<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\">, lo que le da la capacidad de con un solo hilo del procesador poder administrar la capacidad de varios miles de usuarios. Por ejemplo, en el caso de JMeter, se necesita un hilo para cada usuario, lo que supone un problema de escalabilidad para casos en los que se necesite un n\u00famero alto de estos.<\/span><\/p><p><span style=\"font-weight: 400;\">Locust tiene varias posibilidades a la hora de ejecutarse y escalar, pudiendo funcionar en local para aplicaciones con menos exigencias en cuanto a volumen de datos o desplegar en un cluster de Kubernetes al crear una imagen de Docker a ra\u00edz del c\u00f3digo de Locust.<\/span><\/p><p><span style=\"font-weight: 400;\">En cuanto a clientes y sistemas a los que enviar datos, Locust proporciona un cliente HTTP integrado. En el caso de querer enviar eventos a otros sistemas, como el de este art\u00edculo, siempre se puede escribir un cliente personalizado gracias a la ventaja de ser un <\/span><i><span style=\"font-weight: 400;\">framework<\/span><\/i><span style=\"font-weight: 400;\"> de Python.<\/span><\/p><p><span style=\"font-weight: 400;\">Adem\u00e1s, Locust tambi\u00e9n proporciona una interfaz web para poder comprobar el progreso de tu env\u00edo de datos en tiempo real. Por todas estas razones se ha decidido utilizar esta tecnolog\u00eda en este art\u00edculo.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0ec9bd2 elementor-widget elementor-widget-heading\" data-id=\"0ec9bd2\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"tabla\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Kinesis Data Analytics<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fb46eef elementor-widget elementor-widget-text-editor\" data-id=\"fb46eef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Para la ingesta de datos, se utilizar\u00e1 Kinesis Data Streams, un servicio de streaming de datos completamente administrado y serverless ofrecido por AWS. Un Kinesis Stream est\u00e1 formado por una agrupaci\u00f3n l\u00f3gica de <\/span><i><span style=\"font-weight: 400;\">shards<\/span><\/i><span style=\"font-weight: 400;\">, que representan la unidad fundamental de capacidad de un stream y son procesados en paralelo. Cada shard dota al stream de 1 MB\/s o 1,000 eventos por segundo de escritura y 2 MB\/s de lectura. Los eventos ser\u00e1n distribuidos entre los shards de un stream en funci\u00f3n de su clave de partici\u00f3n, por lo que es importante que el particionado sea homog\u00e9neo para evitar un sesgo en la distribuci\u00f3n y ocurrencia de <\/span><i><span style=\"font-weight: 400;\">hot shards<\/span><\/i><span style=\"font-weight: 400;\">. Existen dos modos de aprovisionamiento de capacidad:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">On Demand<\/span><\/i><span style=\"font-weight: 400;\"> &#8211; el n\u00famero de shards se gestiona autom\u00e1ticamente para acomodar la carga, asegurando un rendimiento \u00f3ptimo sin necesidad de ajustes manuales.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">Provisioned<\/span><\/i><span style=\"font-weight: 400;\"> &#8211; debes especificar el n\u00famero de shards para el stream en funci\u00f3n de la carga esperada.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Por simplicidad, y por ser id\u00f3neo para nuestro caso de uso, se optar\u00e1 por el modo <\/span><i><span style=\"font-weight: 400;\">On Demand<\/span><\/i><span style=\"font-weight: 400;\">. Esto acomodar\u00e1 autom\u00e1ticamente el n\u00famero de <\/span><i><span style=\"font-weight: 400;\">shards<\/span><\/i><span style=\"font-weight: 400;\"> a la cantidad de datos generados por nuestra aplicaci\u00f3n de Locust.<\/span><\/p><p><span style=\"font-weight: 400;\">Para leer y procesar los datos ingestados a trav\u00e9s de Kinesis Data Streams, se usar\u00e1 otro servicio de la familia Kinesis, Kinesis Data Analytics (KDA). Este servicio es ofrecido en dos sabores<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Kinesis Analytics SQL &#8211; Permite la creaci\u00f3n de aplicaciones de procesamiento de datos en streaming mediante el uso de SQL. Este servicio se considera deprecado en favor del servicio de KDA for Apache Flink.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Kinesis Analytics for Apache Flink &#8211; Proporciona una forma de desplegar un cluster de Flink gestionado por AWS. El uso de Flink faculta la creaci\u00f3n de aplicaciones m\u00e1s avanzadas y con mayor rendimiento.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Una aplicaci\u00f3n de Flink consta de una serie de tareas de procesado en paralelo, tambi\u00e9n conocidas como operadores, que se conectan en una <\/span><i><span style=\"font-weight: 400;\">Directed Acyclic Graph<\/span><\/i><span style=\"font-weight: 400;\"> (<\/span><i><span style=\"font-weight: 400;\">DAG<\/span><\/i><span style=\"font-weight: 400;\">). El stream de datos es procesado por esta <\/span><i><span style=\"font-weight: 400;\">DAG<\/span><\/i><span style=\"font-weight: 400;\">, con cada operador ejecutando una operaci\u00f3n espec\u00edfica sobre el dato.<\/span><\/p><p><span style=\"font-weight: 400;\">KDA asigna potencia de computaci\u00f3n para nuestra aplicaci\u00f3n en forma de Kinesis Processing (<\/span><i><span style=\"font-weight: 400;\">KPUs<\/span><\/i><span style=\"font-weight: 400;\">), cada una de ellas equivalente a 1 vCPU y 4GB de RAM. Se determina el n\u00famero de <\/span><i><span style=\"font-weight: 400;\">KPUs<\/span><\/i><span style=\"font-weight: 400;\"> para la aplicaci\u00f3n mediante la especificaci\u00f3n de dos par\u00e1metros:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">Parallelism<\/span><\/i><span style=\"font-weight: 400;\"> &#8211; N\u00famero de tareas que se pueden ejecutar concurrentemente.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">ParallelismPerKPU<\/span><\/i><span style=\"font-weight: 400;\"> &#8211; N\u00famero de tareas que pueden ejecutarse en una \u00fanica KPU.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">El n\u00famero total de <\/span><i><span style=\"font-weight: 400;\">KPUs<\/span><\/i><span style=\"font-weight: 400;\"> de la aplicaci\u00f3n viene dado por <\/span><i><span style=\"font-weight: 400;\">Parallelism <\/span><\/i><span style=\"font-weight: 400;\">\/ <\/span><i><span style=\"font-weight: 400;\">ParallelismPerKPU<\/span><\/i><span style=\"font-weight: 400;\">. Es posible desplegar este servicio con autoescalado autom\u00e1tico, que ajustar\u00e1 autom\u00e1ticamente el n\u00famero de <\/span><i><span style=\"font-weight: 400;\">KPUs<\/span><\/i><span style=\"font-weight: 400;\"> en funci\u00f3n del consumo de CPU para acomodar la demanda.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5586f28 elementor-widget elementor-widget-image\" data-id=\"5586f28\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"343\" height=\"368\" data-src=\"https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2023\/04\/flink2.png\" class=\"attachment-large size-large wp-image-15004 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2023\/04\/flink2.png 343w, https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2023\/04\/flink2-280x300.png 280w\" data-sizes=\"(max-width: 343px) 100vw, 343px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 343px; --smush-placeholder-aspect-ratio: 343\/368;\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Figure 1. KDA configuration with Parallelism 4 and ParallelismPerKPU 2<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d0cfc63 elementor-widget elementor-widget-text-editor\" data-id=\"d0cfc63\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Los costos<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">3<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\"> de Amazon Kinesis Analytics se basan en un modelo pay-per-use, apoy\u00e1ndose en las <\/span><i><span style=\"font-weight: 400;\">Kinesis Processing Units<\/span><\/i><span style=\"font-weight: 400;\"> consumidas. Adem\u00e1s, se asume un coste por el almacenamiento usado por la aplicaci\u00f3n y sus copias de seguridad.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bd8f0fe elementor-widget elementor-widget-heading\" data-id=\"bd8f0fe\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"time\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Flink<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-94c83b5 elementor-widget elementor-widget-text-editor\" data-id=\"94c83b5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Profundizando m\u00e1s en la aplicaci\u00f3n de Flink, una de las caracter\u00edsticas m\u00e1s importantes es la capacidad de ser resiliente a fallos. Para ello, Flink incorpora un sistema de <\/span><i><span style=\"font-weight: 400;\">checkpointing<\/span><\/i><span style=\"font-weight: 400;\"> mediante el cual se toma un <\/span><i><span style=\"font-weight: 400;\">snapshot<\/span><\/i><span style=\"font-weight: 400;\"> de la aplicaci\u00f3n y su estado que es guardado en un almacenamiento remoto en caso de que sea necesario recuperar la aplicaci\u00f3n.<\/span><\/p><p><span style=\"font-weight: 400;\">El proceso de <\/span><i><span style=\"font-weight: 400;\">checkpointing<\/span><\/i><span style=\"font-weight: 400;\"> de una aplicaci\u00f3n de Flink est\u00e1 dise\u00f1ado para ser resiliente y eficiente. Flink puede hacer uso de diferentes <\/span><i><span style=\"font-weight: 400;\">backends<\/span><\/i><span style=\"font-weight: 400;\"> para guardar el estado de la aplicaci\u00f3n. El m\u00e1s simple ser\u00eda la memor\u00eda de la propia <\/span><i><span style=\"font-weight: 400;\">Java Virtual Machine<\/span><\/i><span style=\"font-weight: 400;\">, y aunque esto ofrece baja latencia y una gesti\u00f3n m\u00e1s simple, r\u00e1pidamente pueden surgir problemas de escalado y capacidad que no lo hacen recomendable para entornos de producci\u00f3n. Por eso es com\u00fan el uso de RocksDB como <\/span><i><span style=\"font-weight: 400;\">backend<\/span><\/i><span style=\"font-weight: 400;\"> de Flink, una base de datos de clave-valor con alto rendimiento, escalable y con tolerancia a fallos. Adicionalmente KDA guarda estos <\/span><i><span style=\"font-weight: 400;\">snapshots<\/span><\/i><span style=\"font-weight: 400;\"> en S3 para una capa extra de durabilidad.<\/span><\/p><p><span style=\"font-weight: 400;\">Para el prop\u00f3sito de este blog, se ha desarrollado una sencilla aplicaci\u00f3n de\u00a0 ingesta de datos en tiempo real y su posterior guardado en S3. Flink ofrece dos APIs mediante las cuales puedes desarrollar una aplicaci\u00f3n:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">DataStream API<\/span><\/i><span style=\"font-weight: 400;\"> &#8211; Es una API basada en el concepto de streams. Ofrece control a bajo nivel de la aplicaci\u00f3n con la desventaja de requerir un mayor esfuerzo por parte del desarrollador.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">Table API<\/span><\/i><span style=\"font-weight: 400;\"> &#8211; Esta API se basa en el concepto de tablas. Ofrece una manera declarativa de desarrollar la aplicaci\u00f3n mediante el uso de expresiones SQL. Conlleva una p\u00e9rdida de control sobre los detalles de la aplicaci\u00f3n en favor de ser mucho m\u00e1s sencilla.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Para este caso de uso se usar\u00e1 la <\/span><i><span style=\"font-weight: 400;\">Table API<\/span><\/i><span style=\"font-weight: 400;\"> por su simplicidad, pero es igualmente compatible con el uso de la <\/span><i><span style=\"font-weight: 400;\">DataStream API<\/span><\/i><span style=\"font-weight: 400;\">.<\/span><\/p><p><span style=\"font-weight: 400;\">A la hora de desplegar la aplicaci\u00f3n con Kinesis Data Analytics s\u00f3lo es necesario definir el punto de entrada del c\u00f3digo de la aplicaci\u00f3n y proporcionar un <\/span><i><span style=\"font-weight: 400;\">uber jar <\/span><\/i><span style=\"font-weight: 400;\">con todas las dependencias de esta. Conviene explicar las dependencias usadas para esta aplicaci\u00f3n, pues suele ser uno de los mayores puntos de fricci\u00f3n a la hora desarrollar una aplicaci\u00f3n de Flink:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">SQL connector for Kinesi<\/span><\/i><span style=\"font-weight: 400;\">s &#8211; Conector fundamental para que nuestra aplicaci\u00f3n de Flink sea capaz de leer de un Kinesis Stream.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">S3 Filesystem for Hadoop<\/span><\/i><span style=\"font-weight: 400;\"> &#8211; Permite a la aplicaci\u00f3n operar sobre S3.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">Hudi Bundle<\/span><\/i><span style=\"font-weight: 400;\"> &#8211; Paquete proporcionado por los desarrolladores de Hudi, con todas las dependencias necesarias para trabajar con la tecnolog\u00eda.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">Hadoop MapReduce Client Core<\/span><\/i><span style=\"font-weight: 400;\"> &#8211; Dependencia adicional necesaria para que la escritura a Hudi funcione correctamente en KDA. Es posible que en futuras versiones del <\/span><i><span style=\"font-weight: 400;\">Hudi Bundle<\/span><\/i><span style=\"font-weight: 400;\"> esta dependencia no sea necesaria.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">\u00a0La aplicaci\u00f3n est\u00e1 preparada para escribir datos tanto en formato JSON como en tablas de Hudi <\/span><i><span style=\"font-weight: 400;\">MoR<\/span><\/i><span style=\"font-weight: 400;\"> o <\/span><i><span style=\"font-weight: 400;\">CoW<\/span><\/i><span style=\"font-weight: 400;\"> (que se explicar\u00e1n en detalle en la siguiente secci\u00f3n). Tanto el c\u00f3digo de la aplicaci\u00f3n como la infraestructura est\u00e1n disponibles en el repositorio.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-98f1643 elementor-widget elementor-widget-heading\" data-id=\"98f1643\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"consideraciones\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Hudi<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ce8c917 elementor-widget elementor-widget-text-editor\" data-id=\"ce8c917\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4><strong>Conceptos<\/strong><\/h4><p><span style=\"font-weight: 400;\">Hudi se presenta como una fuente de almacenamiento Open Source a nivel de formato de datos. Al igual que hacen otras soluciones como Iceberg o Delta Lake, ofrece algunas propiedades ya existentes en estas como es el soporte de transacciones ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad), procesos enfocados a la optimizaci\u00f3n de tareas de lectura\/escritura, actualizaci\u00f3n de datos incrementales y otras que se explicar\u00e1n a continuaci\u00f3n.<\/span> <span style=\"font-weight: 400;\">Es importante resaltar que estas no podr\u00edan conseguirse mediante ficheros de formato Avro y Parquet.<\/span><\/p><p><span style=\"font-weight: 400;\">Las caracter\u00edsticas que presenta Hudi son las siguientes:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Transacciones ACID: unas de las principales ventajas que ofrece Apache Hudi es el soporte para transacciones ACID, posibilitando que las operaciones de escritura sean at\u00f3micas y consistentes. Adem\u00e1s tambi\u00e9n proporciona que los datos est\u00e9n aislados y sean duraderos, lo que garantiza la integridad de los datos y la consistencia del sistema. M\u00e1s adelante se analizar\u00e1 m\u00e1s en detalle c\u00f3mo las distintas formas de almacenamiento lo hacen posible y las ventajas que estas ofrecen.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">Pipelines<\/span><\/i><span style=\"font-weight: 400;\"> Incrementales<\/span><i><span style=\"font-weight: 400;\">: <\/span><\/i><span style=\"font-weight: 400;\">la clusterizaci\u00f3n de los eventos en funci\u00f3n de variables de negocio permite que tareas de borrado\/actualizaci\u00f3n de datos se puedan realizar de una forma m\u00e1s eficiente si estas se encuentran indexadas de forma conjunta aunque no se hayan dado en la misma franja temporal.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Ingesta en Streaming: Hudi permite obtener unos <\/span><i><span style=\"font-weight: 400;\">workloads <\/span><\/i><span style=\"font-weight: 400;\">computacionalmente menos pesados a trav\u00e9s de <\/span><i><span style=\"font-weight: 400;\">Upserts<\/span><\/i><span style=\"font-weight: 400;\"> que recurren a una indentaci\u00f3n optimizada<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">4<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\"> por grupos de archivos, lo que hace que en tareas de escritura (<\/span><i><span style=\"font-weight: 400;\">Update<\/span><\/i><span style=\"font-weight: 400;\">\/<\/span><i><span style=\"font-weight: 400;\">Append<\/span><\/i><span style=\"font-weight: 400;\">\/<\/span><i><span style=\"font-weight: 400;\">Delete<\/span><\/i><span style=\"font-weight: 400;\">) sean m\u00e1s eficientes. Esto permite que muchas de las aplicaciones basadas en Hudi no deban ser deduplicadas.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">Queries<\/span><\/i><span style=\"font-weight: 400;\"> de estados previos de los datos &#8211; <\/span><i><span style=\"font-weight: 400;\">Time Travel<\/span><\/i><span style=\"font-weight: 400;\">: Hudi permite actualizar y consultar informaci\u00f3n de particiones pasadas sin la necesidad de tener que reprocesar ni incluir particiones temporales mayores. De esta manera se asegura que eventos enviados con posterioridad no sean procesados y sean correctamente almacenados.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Tareas de escritura simult\u00e1neas: mediante <\/span><i><span style=\"font-weight: 400;\">OCC<\/span><\/i><span style=\"font-weight: 400;\"> (<\/span><i><span style=\"font-weight: 400;\">Optimistic Concurrency Control<\/span><\/i><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">5<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\">) se permite que muchas de las tareas como <\/span><i><span style=\"font-weight: 400;\">Upsert<\/span><\/i><span style=\"font-weight: 400;\"> e <\/span><i><span style=\"font-weight: 400;\">Insert<\/span><\/i><span style=\"font-weight: 400;\"> puedan realizarse correctamente aun realiz\u00e1ndose de forma simult\u00e1nea.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">A la hora de analizar c\u00f3mo Hudi procede a realizar el almacenamiento de los eventos ingestados, estos son agrupados por particiones y estas a su vez agrupadas en grupos de archivos. Estos \u00faltimos teniendo asignado un <\/span><i><span style=\"font-weight: 400;\">file_id<\/span><\/i><span style=\"font-weight: 400;\"> \u00fanico para cada grupo en el cual se encuentra el <\/span><i><span style=\"font-weight: 400;\">base file<\/span><\/i><span style=\"font-weight: 400;\">, en formato parquet, el cual surge tras una acci\u00f3n, ya sea un <\/span><i><span style=\"font-weight: 400;\">commit<\/span><\/i><span style=\"font-weight: 400;\"> o\u00a0 compactaci\u00f3n, y el log file que es donde se encuentran registrados todas las actualizaciones realizadas (<\/span><i><span style=\"font-weight: 400;\">event version tracking<\/span><\/i><span style=\"font-weight: 400;\">).<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec17b62 elementor-widget elementor-widget-heading\" data-id=\"ec17b62\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"clonacion\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Tipos de Tablas y Queries<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0aebff7 elementor-widget elementor-widget-text-editor\" data-id=\"0aebff7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Hudi ofrece 2 tipos de tablas en funci\u00f3n de la necesidad de negocio, esto tiene un impacto a nivel de <\/span><i><span style=\"font-weight: 400;\">performance<\/span><\/i><span style=\"font-weight: 400;\"> y limitaci\u00f3n de ciertas funcionalidades como se ver\u00e1n en m\u00e1s detalle:<\/span><\/p><h4><strong><i>Copy on Write (COW)<\/i><\/strong><\/h4><p><span style=\"font-weight: 400;\">Sistema de almacenamiento mediante el cual en las tareas de actualizaci\u00f3n, eliminaci\u00f3n o registro de nuevos datos se realizan directamente sobre el archivo de logs (<\/span><i><span style=\"font-weight: 400;\">delta file<\/span><\/i><span style=\"font-weight: 400;\">) y se crea una nueva instant\u00e1nea que incluye una copia completa del conjunto de datos actualizado, incluyendo una nueva versi\u00f3n del base file y un archivo delta que contiene los cambios realizados en esa operaci\u00f3n.<\/span><\/p><p><span style=\"font-weight: 400;\">No es hasta la compactaci\u00f3n de datos (programada o al alcanzar un tama\u00f1o de datos definido) cuando se realiza la combinaci\u00f3n de los archivos delta con la versi\u00f3n m\u00e1s reciente del conjunto de datos completo.Se crea as\u00ed un nuevo archivo completo donde se eliminan los archivos delta que ya no son necesarios, actualizando a su vez el archivo de \u00edndice para que pueda acceder a los datos del archivo compactado.<\/span><\/p><p><span style=\"font-weight: 400;\">Este sistema de almacenamiento est\u00e1 especialmente recomendado para casos de uso en los que las tareas de lectura sean m\u00e1s frecuentes que las de escritura al no requerir de\u00a0 transformaciones de datos adicionales al leer los datos. <\/span><span style=\"font-weight: 400;\">A continuaci\u00f3n se muestra el <\/span><i><span style=\"font-weight: 400;\">Timeline<\/span><\/i><span style=\"font-weight: 400;\"> de los principales archivos al realizarse las distintas tareas de escritura:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f72646b eael-dt-th-align-center eael-table-align-center elementor-widget elementor-widget-eael-data-table\" data-id=\"f72646b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"eael-data-table.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"eael-data-table-wrap\" data-table_id=\"f72646b\" id=\"eael-data-table-wrapper-f72646b\" data-custom_responsive=\"false\">\n\t\t\t<table class=\"tablesorter eael-data-table center\" id=\"eael-data-table-f72646b\">\n\t\t\t    <thead>\n\t\t\t        <tr class=\"table-header\">\n\t\t\t\t\t\t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\">Acci\u00f3n<\/span><\/th>\n\t\t\t        \t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\">NUEVO archivo base<\/span><\/th>\n\t\t\t        \t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\">Archivo delta<\/span><\/th>\n\t\t\t        \t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\">Archivo de \u00edndice<\/span><\/th>\n\t\t\t        \t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\">Snapshot<\/span><\/th>\n\t\t\t        \t\t\t\t        <\/tr>\n\t\t\t    <\/thead>\n\t\t\t  \t<tbody>\n\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNuevo registro\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe escribe el registro en el archivo base\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo se crea un archivo delta\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe actualiza el archivo de \u00edndice con el nuevo registro\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo se crea un nuevo snapshot\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/tr>\n\t\t\t        \t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tActualizaci\u00f3n de registro existente\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe escribe el registro actualizando en un nuevo archivo base\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe escribe el registro actualizando en el archivo delta\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe actualiza el archivo de \u00edndice con la versi\u00f3n actualizada del registro\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo se crea un nuevo snapshot\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/tr>\n\t\t\t        \t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tEliminaci\u00f3n de registro\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo se escribe el registro eliminado en el nuevo archivo\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe escribe una marca de eliminaci\u00f3n en un nuevo archivo delta\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe actualiza el archivo de \u00edndice con la marca de eliminaci\u00f3n\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo se crea un nuevo snapshot\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/tr>\n\t\t\t        \t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tCompactaci\u00f3n de archivos delta\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe fusionan los archivos delta en un nuevo archivo base\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo se crea un nuevo archivo delta\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe crea un nuevo archivo \u00edndice que contiene todas las entradas del \u00edndice de los archivos fusionados\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe crea un nuevo snapshot que refleja el estado actual de los datos despu\u00e9s de la compactaci\u00f3n\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/tr>\n\t\t\t        \t\t\t    <\/tbody>\n\t\t\t<\/table>\n\t\t<\/div>\n\t  \t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7629201 elementor-widget elementor-widget-text-editor\" data-id=\"7629201\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4><strong><i>Merge On-Read (MOR)<\/i><\/strong><\/h4><p><span style=\"font-weight: 400;\">En este caso, no se utilizan <\/span><i><span style=\"font-weight: 400;\">delta files<\/span><\/i><span style=\"font-weight: 400;\"> separados como en el modelo <\/span><i><span style=\"font-weight: 400;\">Copy-on-Write (COW)<\/span><\/i><span style=\"font-weight: 400;\">. En su lugar, los cambios se escriben directamente en los archivos de datos existentes (<\/span><i><span style=\"font-weight: 400;\">base files<\/span><\/i><span style=\"font-weight: 400;\">). En las tareas en las que se realizan actualizaciones de registros, estos nuevos son a\u00f1adidos en el <\/span><i><span style=\"font-weight: 400;\">base file<\/span><\/i><span style=\"font-weight: 400;\">, y en el caso de eliminaci\u00f3n, estos son marcados como tal en el base file, en ambos casos estos cambios son registrados en el archivo de \u00edndice, hasta que se realiza la compactaci\u00f3n. Es en esta operaci\u00f3n donde se aplican todas las actualizaciones a los registros en el archivo base correspondiente y elimina las versiones anteriores de los registros actualizados.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Esta alternativa est\u00e1 especializada en realizar consultas de datos hist\u00f3ricos versionados y transformaciones y an\u00e1lisis <\/span><i><span style=\"font-weight: 400;\">NRT<\/span><\/i><span style=\"font-weight: 400;\"> de grandes vol\u00famenes, ya que es posible realizarlo sin tener que copiar los datos a otra ubicaci\u00f3n en el disco. Adem\u00e1s de ser \u00f3ptimo para casos de uso en los que las tareas de escritura son concurrentes al ser m\u00e1s eficiente ya que no es necesario realizar transformaciones de datos adicionales durante la escritura, aunque posee una menor tolerancia al fallo ya que en caso de que el archivo de logs se corrompa puede generar p\u00e9rdida de las versiones de los datos.<\/span><\/p><p><span style=\"font-weight: 400;\">A continuaci\u00f3n se muestra el <\/span><i><span style=\"font-weight: 400;\">Timeline<\/span><\/i><span style=\"font-weight: 400;\"> de los principales archivos al realizarse las distintas tareas de escritura:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-76242a8 eael-dt-th-align-center eael-table-align-center elementor-widget elementor-widget-eael-data-table\" data-id=\"76242a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"eael-data-table.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"eael-data-table-wrap\" data-table_id=\"76242a8\" id=\"eael-data-table-wrapper-76242a8\" data-custom_responsive=\"false\">\n\t\t\t<table class=\"tablesorter eael-data-table center\" id=\"eael-data-table-76242a8\">\n\t\t\t    <thead>\n\t\t\t        <tr class=\"table-header\">\n\t\t\t\t\t\t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\">Acci\u00f3n<\/span><\/th>\n\t\t\t        \t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\">Archivo base<\/span><\/th>\n\t\t\t        \t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\">Archivo delta<\/span><\/th>\n\t\t\t        \t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\">Archivo de \u00edndice<\/span><\/th>\n\t\t\t        \t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\">Snapshot<\/span><\/th>\n\t\t\t        \t\t\t\t        <\/tr>\n\t\t\t    <\/thead>\n\t\t\t  \t<tbody>\n\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNuevo registro\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe escribe el registro en el archivo base\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo se crea un archivo delta\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe actualiza el archivo de \u00edndice con el nuevo registro\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo se crea un nuevo snapshot\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/tr>\n\t\t\t        \t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tActualizaci\u00f3n de registro existente\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe escribe el registro actualizando en un nuevo archivo delta\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe escribe el registro actualizando en el archivo delta correspondiente\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe actualiza el archivo de \u00edndice con la versi\u00f3n actualizada del registro\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo se crea un nuevo snapshot\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/tr>\n\t\t\t        \t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tEliminaci\u00f3n de registro\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo se elimina el registro del archivo base\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe escribe una marca de eliminaci\u00f3n en un nuevo archivo delta\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe actualiza el archivo de \u00edndice con la marca de eliminaci\u00f3n\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo se crea un nuevo snapshot\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/tr>\n\t\t\t        \t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tCompactaci\u00f3n de archivos delta\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe fusionan los archivos delta en un nuevo archivo base\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe crea un nuevo archivo delta que contiene las actualizaciones pendientes despu\u00e9s de la \u00faltima compactaci\u00f3n\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe crea un nuevo archivo \u00edndice que contiene todas las entradas del \u00edndice de los archivos fusionados\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSe crea un nuevo snapshot que refleja el estado actual de los datos despu\u00e9s de la compactaci\u00f3n\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/tr>\n\t\t\t        \t\t\t    <\/tbody>\n\t\t\t<\/table>\n\t\t<\/div>\n\t  \t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-624c648 elementor-widget elementor-widget-text-editor\" data-id=\"624c648\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Como resumen, se realiza una comparativa de las principales m\u00e9tricas de performance entre <em>Copy on-Write<\/em> y <em>Merge on-Read<\/em>:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-14d2eae eael-dt-th-align-center eael-table-align-center elementor-widget elementor-widget-eael-data-table\" data-id=\"14d2eae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"eael-data-table.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"eael-data-table-wrap\" data-table_id=\"14d2eae\" id=\"eael-data-table-wrapper-14d2eae\" data-custom_responsive=\"false\">\n\t\t\t<table class=\"tablesorter eael-data-table center\" id=\"eael-data-table-14d2eae\">\n\t\t\t    <thead>\n\t\t\t        <tr class=\"table-header\">\n\t\t\t\t\t\t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\"><\/span><\/th>\n\t\t\t        \t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\">COW<\/span><\/th>\n\t\t\t        \t\t\t\t            <th class=\"\" id=\"\" colspan=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"data-table-header-text\">MOR<\/span><\/th>\n\t\t\t        \t\t\t\t        <\/tr>\n\t\t\t    <\/thead>\n\t\t\t  \t<tbody>\n\t\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tCoste de escritura\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span style=\"color: red\">Mayor<\/span>\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span style=\"color: green\">Menor<\/span>\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/tr>\n\t\t\t        \t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tLatencia\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span style=\"color: red\">Mayor<\/span>\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span style=\"color: green\">Menor<\/span>\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/tr>\n\t\t\t        \t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tRendimiento de consulta\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span style=\"color: green\">Mayor<\/span>\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \t\t\t\t\t\t\t\t\t\t\t<td colspan=\"\" rowspan=\"\" class=\"\" id=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"td-content-wrapper\"><div class=\"td-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span style=\"color: red\">Menor antes de compactaci\u00f3n<\/span><br>\n<span style=\"color: green\">Igual tras compactaci\u00f3n<\/span>\t\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/td>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/tr>\n\t\t\t        \t\t\t    <\/tbody>\n\t\t\t<\/table>\n\t\t<\/div>\n\t  \t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-885b490 elementor-widget elementor-widget-text-editor\" data-id=\"885b490\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Escritura: <\/span><i><span style=\"font-weight: 400;\">COW<\/span><\/i><span style=\"font-weight: 400;\"> tiene un mayor costo de escritura que <\/span><i><span style=\"font-weight: 400;\">MOR<\/span><\/i><span style=\"font-weight: 400;\"> debido a que cada vez que se realiza una operaci\u00f3n de escritura (ya sea a\u00f1adir un nuevo registro o actualizar uno existente), se crea un nuevo delta file y se deben actualizar los archivos de \u00edndice correspondientes. En cambio, en MOR, los registros se escriben directamente en el base file, lo que implica una menor cantidad de operaciones de escritura y, por lo tanto, un menor costo en t\u00e9rminos de rendimiento y uso de recursos.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Latencia: <\/span><i><span style=\"font-weight: 400;\">COW<\/span><\/i><span style=\"font-weight: 400;\"> tiene un menor <\/span><i><span style=\"font-weight: 400;\">data latency<\/span><\/i><span style=\"font-weight: 400;\"> que <\/span><i><span style=\"font-weight: 400;\">MOR<\/span><\/i><span style=\"font-weight: 400;\"> debido a que los registros nuevos o actualizados se escriben primero en un delta file separado, en lugar de actualizar directamente el base file como en <\/span><i><span style=\"font-weight: 400;\">MOR<\/span><\/i><span style=\"font-weight: 400;\">.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Tiempos de consulta: <\/span><i><span style=\"font-weight: 400;\">COW<\/span><\/i><span style=\"font-weight: 400;\"> tiene un menor tiempo de consulta que <\/span><i><span style=\"font-weight: 400;\">MOR<\/span><\/i><span style=\"font-weight: 400;\"> debido a que en <\/span><i><span style=\"font-weight: 400;\">COW<\/span><\/i><span style=\"font-weight: 400;\">, los datos actualizados se almacenan en los <\/span><i><span style=\"font-weight: 400;\">Delta Files<\/span><\/i><span style=\"font-weight: 400;\"> y los datos originales se mantienen en el <\/span><i><span style=\"font-weight: 400;\">Base File<\/span><\/i><span style=\"font-weight: 400;\">. Esto significa que no es necesario realizar ninguna operaci\u00f3n de lectura para obtener la versi\u00f3n actualizada de los datos.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Hudi no solo ofrece distintas formas de almacenamiento, sino tambi\u00e9n, distintas formas de realizar consultas sobre la informaci\u00f3n almacenada, dependiendo de nuevo tanto de los casos de negocio como del tipo de almacenamiento escogido:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">Snapshots<\/span><\/i><span style=\"font-weight: 400;\">: consulta la \u00faltima versi\u00f3n procedente de un commit o compactaci\u00f3n. Gracias a este tipo de consultas, se pueden obtener las versiones de los datos en momentos <\/span><span style=\"font-weight: 400;\">espec\u00edficos gracias <\/span><span style=\"font-weight: 400;\">a la combinaci\u00f3n del <\/span><i><span style=\"font-weight: 400;\">base<\/span><\/i><span style=\"font-weight: 400;\"> y <\/span><i><span style=\"font-weight: 400;\">delta file<\/span><\/i><span style=\"font-weight: 400;\"> (<\/span><i><span style=\"font-weight: 400;\">time travel<\/span><\/i><span style=\"font-weight: 400;\">). Misma performance en <\/span><i><span style=\"font-weight: 400;\">CoW<\/span><\/i><span style=\"font-weight: 400;\"> y <\/span><i><span style=\"font-weight: 400;\">MoR<\/span><\/i><span style=\"font-weight: 400;\">.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">Read Optimized<\/span><\/i><span style=\"font-weight: 400;\">: \u00fanicamente disponible si el tipo de tabla en el que se almacenan los datos es <\/span><i><span style=\"font-weight: 400;\">MoR<\/span><\/i><span style=\"font-weight: 400;\">. Basado en la obtenci\u00f3n de vistas optimizadas para lectura de un conjunto de datos grande y distribuido. Esto se consigue mediante indexaci\u00f3n optimizada (<\/span><i><span style=\"font-weight: 400;\">Bloom Filter Index<\/span><\/i><span style=\"font-weight: 400;\">), lo que permite reducir considerablemente el tiempo de b\u00fasqueda de datos. Adem\u00e1s se apoya tambi\u00e9n en la compactaci\u00f3n de datos que hace que, de nuevo, las tareas de b\u00fasqueda sean menos costosas al disminuir el volumen de los mismos.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">Incremental<\/span><\/i><span style=\"font-weight: 400;\">: Permite leer solo los datos actualizados o agregados desde la \u00faltima consulta. Esto ayuda a reducir el tiempo de lectura y el uso del almacenamiento en disco.<\/span><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-30687e6 elementor-widget elementor-widget-spacer\" data-id=\"30687e6\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"ref\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b2b8ef elementor-widget elementor-widget-heading\" data-id=\"7b2b8ef\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"conclusiones\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusiones<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-42a72e3 elementor-widget elementor-widget-text-editor\" data-id=\"42a72e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">En este art\u00edculo se ha descrito como desplegar una aplicaci\u00f3n que ingesta eventos en tiempo real y forma con la salida un <\/span><i><span style=\"font-weight: 400;\">LakeHouse<\/span><\/i> <span style=\"font-weight: 400;\">con una arquitectura <\/span><i><span style=\"font-weight: 400;\">serverless. <\/span><\/i><span style=\"font-weight: 400;\">Con esto se ha<\/span> <span style=\"font-weight: 400;\">buscado un nivel de abstracci\u00f3n intermedio de tal manera que sea una aplicaci\u00f3n simple pero con la suficiente potencia para poder llegar a utilizarse en entornos productivos reales.<\/span><\/p><p><span style=\"font-weight: 400;\">Desplegar aplicaciones basadas en la combinaci\u00f3n de tecnolog\u00edas como son Apache Flink y Hudi otorga la capacidad de procesar grandes vol\u00famenes de datos en tiempo real y de manera escalable. Esto combinado con la garant\u00eda que aportan las transacciones ACID, hace que la combinaci\u00f3n de Apache Flink y Apache Hudi sea una soluci\u00f3n s\u00f3lida para la ingesta y procesamiento de datos en entornos cr\u00edticos.<\/span><\/p><p><span style=\"font-weight: 400;\">A pesar de todas las ventajas que se han descrito cabe resaltar algunos inconvenientes que se han podido detectar desarrollando esta arquitectura. El mayor problema que se ha encontrado ha sido la resoluci\u00f3n de dependencias entre las librer\u00edas de Flink y los conectores necesarios, como por ejemplo el de Hudi. La falta de comunidad que existe a d\u00eda de hoy, aunque esta crecer\u00e1 con el paso del tiempo, supuso un problema inicial considerable para poder formar el paquete final con todas las dependencias necesarias sin que hubiese conflictos entre s\u00ed. Adem\u00e1s, cabe resaltar que se ha percibido menos comunidad para el lenguaje de Python que para el de Java o Scala. En este art\u00edculo se eligi\u00f3 Python ya que exist\u00eda un conocimiento interno m\u00e1s fuerte pero en el caso de que el stack tecnol\u00f3gico se acerque m\u00e1s a lenguajes soportados por la <\/span><i><span style=\"font-weight: 400;\">JVM<\/span><\/i><span style=\"font-weight: 400;\"> (<\/span><i><span style=\"font-weight: 400;\">Java Virtual Machine<\/span><\/i><span style=\"font-weight: 400;\">) ser\u00eda aconsejable el uso de Scala o Java.<\/span><\/p><p><span style=\"font-weight: 400;\">En los pr\u00f3ximos art\u00edculos entraremos m\u00e1s en detalle en las particularidades que tienen tanto Hudi como Flink para poder personalizar y ajustar el comportamiento de esta aplicaci\u00f3n dependiendo de las necesidades que presente nuestro caso de uso.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-239ebd9 elementor-widget elementor-widget-heading\" data-id=\"239ebd9\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"referencias\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Referencias<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e34c034 elementor-widget elementor-widget-text-editor\" data-id=\"e34c034\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>[1] Repositorio Github Flink-Hudi (Terraform). [<a href=\"https:\/\/github.com\/ajaen4\/kinesis-flink-hudi-benchmark\">link<\/a>]<\/p><p>[2] Greenlet 2.0.2. Documentation [<a href=\"https:\/\/pypi.org\/project\/greenlet\/\">link<\/a>] (February 28, 2023)<\/p><p>[3] Amazon Kinesis Data Analytics Costs. [<a href=\"https:\/\/aws.amazon.com\/es\/kinesis\/data-analytics\/pricing\/\">link<\/a>] (March 23, 2022)<\/p><p>[4] Hudi Optimized Indexing. [<a href=\"https:\/\/hudi.apache.org\/docs\/indexing\/\">link<\/a>] (September 23, 2021)<\/p><p>[5] Hudi Writing Concurrency. [<a href=\"https:\/\/hudi.apache.org\/docs\/concurrency_control\/#multi-writer-guarantees\">link<\/a>] (September 23, 2021)<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec110af elementor-widget elementor-widget-heading\" data-id=\"ec110af\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Autores<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ede07de elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"ede07de\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/albertojaenrevuelta\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/albertojaenrevuelta\/\" target=\"_blank\">Alberto Jaen<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Engineer <\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ac9bbd1 elementor-widget elementor-widget-text-editor\" data-id=\"ac9bbd1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Empec\u00e9 mi carrera laboral con el desarrollo, mantenimiento y administraci\u00f3n de bases de datos multidimensionales y <em>Data Lakes<\/em>. A partir de ah\u00ed comenc\u00e9 a estar interesado en plataformas de datos y arquitecturas cloud, estando certificado 3 veces en AWS y 2 con Hashicorp.<\/p><p>Actualmente me encuentro trabajando como un <em>Cloud Engineer <\/em>desarrollando Data Lakes y DataWarehouses con AWS para un cliente relacionado con la organizaci\u00f3n de eventos deportivos a nivel mundial.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8441f44 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"8441f44\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/alfonsojerezizquierdo\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/alfonsojerezizquierdo\/\" target=\"_blank\">Alfonso Jerez<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Engineer <\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-863802c elementor-widget elementor-widget-text-editor\" data-id=\"863802c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Comenc\u00e9 mi carrera como Data Scientist en distintos sectores (banca, consultor\u00eda,\u2026) enfocado en la automatizaci\u00f3n de procesos y desarrollo de modelos. En los \u00faltimos a\u00f1os apost\u00e9 por Bluetab motivado por el inter\u00e9s en especializarme como Data Engineer y comenzar a trabajar con los principales proveedores Cloud (AWS, GPC y Azure) en clientes como Olympics, espec\u00edficamente en la optimizaci\u00f3n del procesamiento y almacenamiento del dato.<\/p><p>Colaborando activamente con el grupo de Pr\u00e1ctica Cloud en investigaciones y desarrollo de blogs de tecnolog\u00edas punteras e innovadoras tales como esta, fomentando as\u00ed el continuo aprendizaje.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c2a26f7 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"c2a26f7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/adrianjimenezhernandez\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.org\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/adrianjimenezhernandez\/\" target=\"_blank\">Adri\u00e1n Jim\u00e9nez<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Engineer <\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e0baea elementor-widget elementor-widget-text-editor\" data-id=\"4e0baea\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Dedicado al aprendizaje constante de nuevas tecnolog\u00edas y su aplicaci\u00f3n, disfrutando de utilizarlas en la resoluci\u00f3n de desaf\u00edos tecnol\u00f3gicos. Desarrollo mi carrera como Cloud Engineer dise\u00f1ando, implementando y manteniendo infraestructura en AWS.<\/p><p>Colaboro activamente en la Pr\u00e1ctica Cloud, donde investigamos y experimentamos con nuevas tecnolog\u00edas, buscando soluciones para los retos que enfrentan nuestros clientes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65c3381 elementor-widget elementor-widget-spacer\" data-id=\"65c3381\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-f668113 nav-column elementor-hidden-phone\" data-id=\"f668113\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d289a2d elementor-widget elementor-widget-table-of-contents\" data-id=\"d289a2d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;headings_by_tags&quot;:[&quot;h2&quot;],&quot;exclude_headings_by_selector&quot;:[],&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_offset&quot;:150,&quot;sticky_parent&quot;:&quot;yes&quot;,&quot;marker_view&quot;:&quot;numbers&quot;,&quot;no_headings_message&quot;:&quot;No se ha encontrado ning\\u00fan encabezado en esta p\\u00e1gina.&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;],&quot;sticky_effects_offset&quot;:0,&quot;sticky_anchor_link_offset&quot;:0}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t\t\t\t<h4 class=\"elementor-toc__header-title\">\n\t\t\t\tNavegaci\u00f3n\t\t\t<\/h4>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"elementor-toc__d289a2d\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<i class=\"elementor-toc__spinner eicon-animation-spin eicon-loading\" aria-hidden=\"true\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-09395a3 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"09395a3\" data-element_type=\"section\" data-e-type=\"section\" id=\"autores\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2ba3c08\" data-id=\"2ba3c08\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7a7e9b1 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7a7e9b1\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-0225831\" data-id=\"0225831\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-816937f\" data-id=\"816937f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-756365e elementor-share-buttons--view-icon elementor-share-buttons--skin-minimal elementor-share-buttons--shape-circle elementor-grid-0 elementor-share-buttons--color-official elementor-widget elementor-widget-share-buttons\" data-id=\"756365e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"share-buttons.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-grid\" role=\"list\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_twitter\" role=\"button\" tabindex=\"0\" aria-label=\"Compartir en twitter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-twitter\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_linkedin\" role=\"button\" tabindex=\"0\" aria-label=\"Compartir en linkedin\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-linkedin\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-f18d1b8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f18d1b8\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-b490454\" data-id=\"b490454\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a76f07c elementor-widget elementor-widget-heading\" data-id=\"a76f07c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">\u00bfQuieres saber m\u00e1s de lo que ofrecemos y ver otros casos de \u00e9xito?<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7365ecc elementor-align-center elementor-widget elementor-widget-button\" data-id=\"7365ecc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"\/es\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">DESCUBRE BLUETAB<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ec3a45 elementor-widget elementor-widget-spacer\" data-id=\"1ec3a45\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e6097d2 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"e6097d2\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-a66a650\" data-id=\"a66a650\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-38e61b8 elementor-widget elementor-widget-text-editor\" data-id=\"38e61b8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>SOLUCIONES, <\/b>SOMOS EXPERTOS<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-9975abb elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9975abb\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-e5edefb\" data-id=\"e5edefb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0628f91 elementor-cta--skin-cover elementor-cta--valign-middle elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"0628f91\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<a class=\"elementor-cta\" href=\"\/es\/soluciones\/data-strategy\/\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg lazyload\" style=\"background-image:inherit;\" role=\"img\" aria-label=\"strategy-opt\" data-bg-image=\"url(https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2020\/10\/strategy-opt.jpg)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h5 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tDATA STRATEGY\t\t\t\t\t<\/h5>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-8724c63\" data-id=\"8724c63\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bc8b25d elementor-cta--skin-cover elementor-cta--valign-middle elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"bc8b25d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<a class=\"elementor-cta\" href=\"\/es\/soluciones\/data-fabric\/\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg lazyload\" style=\"background-image:inherit;\" role=\"img\" aria-label=\"fabric-opt\" data-bg-image=\"url(https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2020\/10\/fabric-opt.jpg)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h5 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tDATA FABRIC\t\t\t\t\t<\/h5>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-ddc996d\" data-id=\"ddc996d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1d384cf elementor-cta--skin-cover elementor-cta--valign-middle elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"1d384cf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<a class=\"elementor-cta\" href=\"\/es\/soluciones\/augmented-analytics\/\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg lazyload\" style=\"background-image:inherit;\" role=\"img\" aria-label=\"AUGMENTED-ANALYTICS-opt\" data-bg-image=\"url(https:\/\/www.bluetab.co.uk\/wp-content\/uploads\/2020\/10\/AUGMENTED-ANALYTICS-opt.jpg)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h5 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tAUGMENTED ANALYTICS\t\t\t\t\t<\/h5>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-f61bae8\" data-id=\"f61bae8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f3fe106 elementor-widget elementor-widget-text-editor\" data-id=\"f3fe106\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Te puede interesar<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9a06bb9 elementor-posts--align-left elementor-grid-1 elementor-posts--thumbnail-left elementor-hidden-phone elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-widget elementor-widget-posts\" data-id=\"9a06bb9\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;classic_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:32,&quot;sizes&quot;:[]},&quot;classic_columns&quot;:&quot;1&quot;,&quot;classic_columns_tablet&quot;:&quot;2&quot;,&quot;classic_columns_mobile&quot;:&quot;1&quot;,&quot;classic_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;classic_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"posts.classic\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-15801 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/bluetab.org\/es\/azure-data-studio-y-copilot\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"200\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/10\/cloud-computing-concept-cloud-computing-technolog-2023-05-08-19-17-10-utc-300x200.jpg\" class=\"attachment-medium size-medium wp-image-15855 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/10\/cloud-computing-concept-cloud-computing-technolog-2023-05-08-19-17-10-utc-300x200.jpg 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/10\/cloud-computing-concept-cloud-computing-technolog-2023-05-08-19-17-10-utc-1024x684.jpg 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/10\/cloud-computing-concept-cloud-computing-technolog-2023-05-08-19-17-10-utc-768x513.jpg 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/10\/cloud-computing-concept-cloud-computing-technolog-2023-05-08-19-17-10-utc-1536x1026.jpg 1536w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/10\/cloud-computing-concept-cloud-computing-technolog-2023-05-08-19-17-10-utc-2048x1368.jpg 2048w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/200;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/bluetab.org\/es\/azure-data-studio-y-copilot\/\" >\n\t\t\t\tAzure Data Studio y Copilot\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\toctubre 11, 2023\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/bluetab.org\/es\/azure-data-studio-y-copilot\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre Azure Data Studio y Copilot\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-4535 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-practices category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/bluetab.org\/es\/espiando-a-tu-kubernetes-con-kubewath\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"150\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2020\/09\/enlaces-linkedin-2-300x150.png\" class=\"attachment-medium size-medium wp-image-17852 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2020\/09\/enlaces-linkedin-2-300x150.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2020\/09\/enlaces-linkedin-2-1024x512.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2020\/09\/enlaces-linkedin-2-768x384.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2020\/09\/enlaces-linkedin-2.png 1200w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/150;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/bluetab.org\/es\/espiando-a-tu-kubernetes-con-kubewath\/\" >\n\t\t\t\tEspiando a tu kubernetes con kubewatch\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tseptiembre 14, 2020\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/bluetab.org\/es\/espiando-a-tu-kubernetes-con-kubewath\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre Espiando a tu kubernetes con kubewatch\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-15086 post type-post status-publish format-standard has-post-thumbnail category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/bluetab.org\/es\/la-banca-y-la-era-del-open-data\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"225\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/1679091857404-300x225.jpg\" class=\"attachment-medium size-medium wp-image-15095 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/1679091857404-300x225.jpg 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/1679091857404-1024x768.jpg 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/1679091857404-768x576.jpg 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/1679091857404-702x526.jpg 702w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/1679091857404.jpg 1080w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/225;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/bluetab.org\/es\/la-banca-y-la-era-del-open-data\/\" >\n\t\t\t\tLA BANCA Y LA ERA DEL OPEN DATA\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tabril 19, 2023\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/bluetab.org\/es\/la-banca-y-la-era-del-open-data\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre LA BANCA Y LA ERA DEL OPEN DATA\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e82f0bf elementor-posts--align-left elementor-grid-1 elementor-hidden-desktop elementor-hidden-tablet elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-widget elementor-widget-posts\" data-id=\"e82f0bf\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;classic_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:32,&quot;sizes&quot;:[]},&quot;classic_columns&quot;:&quot;1&quot;,&quot;classic_columns_tablet&quot;:&quot;2&quot;,&quot;classic_columns_mobile&quot;:&quot;1&quot;,&quot;classic_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;classic_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"posts.classic\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-20730 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-noticias entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/bluetab.org\/es\/bluetab-y-la-universidad-ceu-san-pablo-colaboran-para-formar-lideres-en-analitica-de-datos\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"300\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2025\/10\/universidad-ceu-300x300.png\" class=\"attachment-medium size-medium wp-image-20732 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2025\/10\/universidad-ceu-300x300.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2025\/10\/universidad-ceu-1024x1024.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2025\/10\/universidad-ceu-150x150.png 150w, https:\/\/bluetab.org\/wp-content\/uploads\/2025\/10\/universidad-ceu-768x768.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2025\/10\/universidad-ceu-75x75.png 75w, https:\/\/bluetab.org\/wp-content\/uploads\/2025\/10\/universidad-ceu.png 1080w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/300;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/bluetab.org\/es\/bluetab-y-la-universidad-ceu-san-pablo-colaboran-para-formar-lideres-en-analitica-de-datos\/\" >\n\t\t\t\tBluetab y la Universidad CEU San Pablo colaboran para formar l\u00edderes en anal\u00edtica de datos\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\toctubre 30, 2025\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/bluetab.org\/es\/bluetab-y-la-universidad-ceu-san-pablo-colaboran-para-formar-lideres-en-analitica-de-datos\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre Bluetab y la Universidad CEU San Pablo colaboran para formar l\u00edderes en anal\u00edtica de datos\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-15556 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/bluetab.org\/es\/el-futuro-del-cloud-y-genia-en-el-next-23\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"172\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/09\/image1-300x172.png\" class=\"attachment-medium size-medium wp-image-15558 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/09\/image1-300x172.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/09\/image1-1024x587.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/09\/image1-768x440.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/09\/image1-1536x880.png 1536w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/09\/image1.png 2000w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/172;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/bluetab.org\/es\/el-futuro-del-cloud-y-genia-en-el-next-23\/\" >\n\t\t\t\tEl futuro del Cloud y GenIA en el Next &#8217;23\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tseptiembre 19, 2023\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/bluetab.org\/es\/el-futuro-del-cloud-y-genia-en-el-next-23\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre El futuro del Cloud y GenIA en el Next &#8217;23\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-14302 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-practices category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/bluetab.org\/es\/guia-avanzada-sobre-almacenamiento-en-snowflake\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"150\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/03\/8-300x150.png\" class=\"attachment-medium size-medium wp-image-17833 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/03\/8-300x150.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/03\/8-1024x512.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/03\/8-768x384.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/03\/8.png 1200w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/150;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/bluetab.org\/es\/guia-avanzada-sobre-almacenamiento-en-snowflake\/\" >\n\t\t\t\tGu\u00eda avanzada sobre almacenamiento en Snowflake\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\toctubre 3, 2022\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/bluetab.org\/es\/guia-avanzada-sobre-almacenamiento-en-snowflake\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre Gu\u00eda avanzada sobre almacenamiento en Snowflake\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Alberto Jaen AWS Cloud Engineer Alfonso Jerez AWS Cloud Engineer Adri\u00e1n Jim\u00e9nez AWS Cloud Engineer Introducci\u00f3n Cada d\u00eda la ingesta y procesamiento de streams de<\/p>\n","protected":false},"author":1,"featured_media":17831,"comment_status":"closed","ping_status":"open","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"content-sidebar","footnotes":""},"categories":[21,667,631],"tags":[],"class_list":{"0":"post-14999","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-blog-es","8":"category-practices","9":"category-tech","10":"entry"},"uagb_featured_image_src":{"full":["https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6.png",1200,600,false],"thumbnail":["https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6-150x150.png",150,150,true],"medium":["https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6-300x150.png",300,150,true],"medium_large":["https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6-768x384.png",768,384,true],"large":["https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6-1024x512.png",1024,512,true],"1536x1536":["https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6.png",1200,600,false],"2048x2048":["https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6.png",1200,600,false],"sidebar-featured":["https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6-75x75.png",75,75,true],"genesis-singular-images":["https:\/\/bluetab.org\/wp-content\/uploads\/2023\/04\/6-702x526.png",702,526,true]},"uagb_author_info":{"display_name":"Bluetab","author_link":"https:\/\/bluetab.org\/es\/author\/user\/"},"uagb_comment_info":0,"uagb_excerpt":"Alberto Jaen AWS Cloud Engineer Alfonso Jerez AWS Cloud Engineer Adri\u00e1n Jim\u00e9nez AWS Cloud Engineer Introducci\u00f3n Cada d\u00eda la ingesta y procesamiento de streams de","_links":{"self":[{"href":"https:\/\/bluetab.org\/es\/wp-json\/wp\/v2\/posts\/14999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bluetab.org\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bluetab.org\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bluetab.org\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bluetab.org\/es\/wp-json\/wp\/v2\/comments?post=14999"}],"version-history":[{"count":63,"href":"https:\/\/bluetab.org\/es\/wp-json\/wp\/v2\/posts\/14999\/revisions"}],"predecessor-version":[{"id":15244,"href":"https:\/\/bluetab.org\/es\/wp-json\/wp\/v2\/posts\/14999\/revisions\/15244"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bluetab.org\/es\/wp-json\/wp\/v2\/media\/17831"}],"wp:attachment":[{"href":"https:\/\/bluetab.org\/es\/wp-json\/wp\/v2\/media?parent=14999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bluetab.org\/es\/wp-json\/wp\/v2\/categories?post=14999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bluetab.org\/es\/wp-json\/wp\/v2\/tags?post=14999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}