{"id":16030,"date":"2023-05-25T09:59:10","date_gmt":"2023-05-25T09:59:10","guid":{"rendered":"https:\/\/beta.bluetab.net\/starburst-construyendo-un-futuro-basado-en-datos\/"},"modified":"2023-10-17T12:53:20","modified_gmt":"2023-10-17T12:53:20","slug":"starburst-construyendo-un-futuro-basado-en-datos","status":"publish","type":"post","link":"https:\/\/bluetab.es\/en\/starburst-construyendo-un-futuro-basado-en-datos\/","title":{"rendered":"Starburst: Construyendo un futuro basado en datos."},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"16030\" class=\"elementor elementor-16030\" 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\">\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\">\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-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\">Starburst: Construyendo un futuro basado en datos.<\/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-6562b00 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6562b00\" data-element_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-7c6d220\" data-id=\"7c6d220\" data-element_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-f4605b4 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"f4605b4\" data-element_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\/lucascalvoberlanga\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2021\/09\/lucas-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-12198 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2021\/09\/lucas-150x150.png 150w, https:\/\/bluetab.es\/wp-content\/uploads\/2021\/09\/lucas-300x300.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2021\/09\/lucas-768x768.png 768w, https:\/\/bluetab.es\/wp-content\/uploads\/2021\/09\/lucas-75x75.png 75w, https:\/\/bluetab.es\/wp-content\/uploads\/2021\/09\/lucas.png 888w\" 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\/lucascalvoberlanga\/\" target=\"_blank\">Lucas Calvo<\/a><\/h4><p class=\"elementor-image-box-description\">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-50 elementor-inner-column elementor-element elementor-element-441976b\" data-id=\"441976b\" data-element_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-e8e77c8 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=\"e8e77c8\" data-element_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=\"Share on 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=\"Share on 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\">\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\">\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\">\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\">\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\">\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-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.es\/wp-content\/uploads\/2023\/05\/9-1024x512.png\" class=\"attachment-large size-large wp-image-17828\" alt=\"\" srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9-1024x512.png 1024w, https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9-300x150.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9-768x384.png 768w, https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9.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\" 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-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 nuevo art\u00edculo vamos a hablar de uno de nuestros partners: Starburst<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">1<\/span><\/a><span style=\"font-weight: 400;\">].<\/span><span style=\"font-weight: 400;\"> Starburst es la versi\u00f3n empresarial de Trino<\/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;\"> realizando nuevas integraciones, mejoras de rendimiento, una capa de seguridad y restando complejidad a la gesti\u00f3n con una interfaz de usuario muy f\u00e1cil de usar y que te permite realizar distintas configuraciones.<\/span><\/p><p><span style=\"font-weight: 400;\">Para los que no conoc\u00e9is Trino, es un motor de consulta SQL distribuido open-source creado en 2012 por Facebook bajo el nombre Presto. Est\u00e1 dise\u00f1ado para consultar grandes conjuntos de datos distribuidos en una o m\u00e1s fuentes de datos heterog\u00e9neas. Esto significa que podemos consultar datos que residen en diferentes sistemas de almacenamiento como HDFS, AWS S3, Google Cloud Storage o Azure Blob Storage. Trino tambi\u00e9n tiene la capacidad de federar diferentes fuentes de datos como MySQL, PostgreSQL, Cassandra, Kafka.<\/span><\/p><p><span style=\"font-weight: 400;\">Con las nuevas necesidades que van saliendo de arquitecturas orientadas al Data Mesh<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">3<\/span><\/a><span style=\"font-weight: 400;\">],<\/span><span style=\"font-weight: 400;\"> plataformas anal\u00edticas como Starburst son cada vez m\u00e1s importantes y nos permiten centralizar y federar distintas fuentes de datos para as\u00ed tener solo un punto de entrada a nuestra informaci\u00f3n. Con esta mentalidad, podemos hacer que nuestros usuarios accedan a la plataforma de Starburst con distintos roles y distinta granularidad de acceso para que puedan consultar los distintos dominios que poseen las empresas. Adem\u00e1s Starburst no solo se queda en la consulta de datos, sino que nos permite conectarnos con herramientas anal\u00edticas como puedes ser DBT<\/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;\"> o Jupyter Notebook<\/span><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;\"> o herramientas de reporting como Power BI<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">6<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\"> para sacarle m\u00e1s rendimiento a todos nuestros datos. Pero Starburst no solo se queda en eso, sino que nos puede ayudar en la migraciones de datos hacia el Cloud, ya que f\u00e1cilmente podemos conectarnos a las fuentes de datos y sacar toda la informaci\u00f3n para volcarlas en cualquier almacenamiento del Cloud.<\/span><\/p><p><span style=\"font-weight: 400;\">Como pod\u00e9is observar, Starburst es capaz de analizar todos sus datos, dentro y alrededor de tu Data Lake, y se conecta a todo un ecosistema de herramientas. Por eso vamos a realizar una serie de art\u00edculos para tratar los puntos m\u00e1s relevantes como son el despliegue y configuraci\u00f3n de la plataforma, integraci\u00f3n con otras herramientas y gobierno y administraci\u00f3n de usuarios. En este primer art\u00edculo, nos vamos a centrar en el despliegue de Starburst en Kubernetes, as\u00ed como la configuraci\u00f3n que se tiene que realizar para conectar con los distintos componentes de GCP. Adem\u00e1s hemos a\u00f1adido una capa de monitorizaci\u00f3n con Prometheus<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">7<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\"> y Grafana<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">8<\/span><\/a><span style=\"font-weight: 400;\">],<\/span><span style=\"font-weight: 400;\"> donde hemos publicado un dashboard con distintas m\u00e9tricas importantes por si cualquier compa\u00f1\u00eda quiere centralizar las m\u00e9tricas en Grafana. Para todo ello, nos vamos a apoyar de un repositorio que hemos creado con el levantamiento de la infraestructura y la instalaci\u00f3n de Starburst.<\/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\" 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\">\u00bfQu\u00e9 necesitas para entender este art\u00edculo?<\/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-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;\">Algunos conceptos sobre Terraform<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">9<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Algunos conceptos de Kubernetes.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Algunos conceptos de Helm.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Algunos conceptos de Prometheus.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Algunos conceptos de Grafana.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Un cuenta en GCP.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Una licencia de Starburst<\/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-d23f4b5 elementor-widget elementor-widget-heading\" data-id=\"d23f4b5\" data-element_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-c33a6cf elementor-widget elementor-widget-image\" data-id=\"c33a6cf\" data-element_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=\"1024\" height=\"397\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image4-1-1024x397.png\" class=\"attachment-large size-large wp-image-15261 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image4-1-1024x397.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image4-1-300x116.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image4-1-768x298.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image4-1.png 1268w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/397;\" \/>\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-ee6c422 elementor-widget elementor-widget-text-editor\" data-id=\"ee6c422\" data-element_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 observar en el diagrama, estos son los componentes que se van a desplegar para la configuraci\u00f3n de Starburst. Como pieza central del despliegue, utilizaremos Google Kubernetes Engine. Este es el servicio administrado de orquestaci\u00f3n de contenedores de Google. Utilizaremos Kubernetes ya que nos facilitar\u00e1 la gesti\u00f3n de Starburst y aprovecharemos las ventajas del autoscaling de Kubernetes para ampliar el n\u00famero de workers de Starburst y escalar en m\u00e1s nodos para poder as\u00ed tener m\u00e1s recursos de computaci\u00f3n si tenemos alg\u00fan pico de trabajo o de usuarios.<\/span><\/p><p><span style=\"font-weight: 400;\">Como configuraci\u00f3n inicial de nuestro cluster de GKE, comenzaremos con un \u00fanico nodepool para facilitar el despliegue. Un nodepool es una agrupaci\u00f3n de nodos dentro de un cluster con la misma configuraci\u00f3n y especificaciones de tipo de m\u00e1quina. En nuestro caso, nuestro nodepool se llamar\u00e1 `default-node-pool` y el tipo de instancia utilizada ser\u00e1 `e2-standard-16`, que es la recomendada por Starburst, ya que el tipo de carga de trabajo necesita nodos con bastante memoria. Adem\u00e1s de la instalaci\u00f3n de Starburst, tambi\u00e9n desplegaremos en el cluster tanto Prometheus como Grafana.<\/span><\/p><p><span style=\"font-weight: 400;\">Como hemos explicado anteriormente, Starburst est\u00e1 basado en Trino, que es un motor de consulta distribuido. Los principales componentes de Trino son el Coordinator y los Workers. El Coordinator de Trino es el componente responsable de analizar las sentencias, planificar las consultas y gestionar los nodos Workers de Trino. El Coordinator realiza un seguimiento de la actividad de cada Worker y orquesta la ejecuci\u00f3n de una consulta. Los Workers son el componente responsable de ejecutar tareas y procesar datos. Los nodos Workers obtienen datos de los conectores e intercambian datos intermedios entre s\u00ed. El Coordinator es responsable de obtener los resultados de los Workers y devolver los resultados finales al cliente.<\/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-269a075 elementor-widget elementor-widget-image\" data-id=\"269a075\" data-element_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=\"913\" height=\"654\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image2.png\" class=\"attachment-large size-large wp-image-15264 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image2.png 913w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image2-300x215.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image2-768x550.png 768w\" data-sizes=\"(max-width: 913px) 100vw, 913px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 913px; --smush-placeholder-aspect-ratio: 913\/654;\" \/>\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-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 componentes transversales de nuestra arquitectura, tambi\u00e9n desplegaremos una red con una subnet para realizar el despliegue de nuestro cluster de GKE, as\u00ed como un bucket en Cloud Storage para realizar pruebas de escritura de datos desde Starburst.<\/span><\/p><p><span style=\"font-weight: 400;\">Adem\u00e1s, como componente fuera de la arquitectura, tendremos jmeter<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">10<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\">, la herramienta con la que realizaremos pruebas de performance para probar la elasticidad de Starburst y poder probar el autoescalado de nuestro cluster.<\/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-c47c47b elementor-widget elementor-widget-heading\" data-id=\"c47c47b\" data-element_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\">Despliegue de la infraestructura\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1f6153b elementor-widget elementor-widget-text-editor\" data-id=\"1f6153b\" data-element_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;\">Una vez explicada la arquitectura vamos a proceder a realizar el despliegue de todos los componentes. Para ello, nos vamos a ayudar de Terraform como herramienta de IaC. Como partes importantes de este despliegue, tendremos la parte m\u00e1s de infraestructura tradicional que son las VPC, el cluster de GKE y la parte de Cloud Storage como hemos hablado antes, adem\u00e1s de los componentes que desplegamos en Kubernetes de una forma totalmente automatizada que son Grafana y Prometheus.<\/span><\/p><p><span style=\"font-weight: 400;\">Vamos a empezar con la explicaci\u00f3n de la infraestructura m\u00e1s cl\u00e1sica. Para este despliegue haremos uso de dos m\u00f3dulos que est\u00e1n subidos al github:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">M\u00f3dulo de GKE<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">11<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">M\u00f3dulo de VPC<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">12<\/span><\/a><span style=\"font-weight: 400;\">].<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Estos dos m\u00f3dulos est\u00e1n invocados en el `main.tf` del repositorio y hacen uso del provider de Google para el despliegue:<\/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-c55e46f elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"c55e46f\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>\n```tf\nprovider &quot;google&quot; {\n  project = var.project_id\n  region  = var.region\n}\n\nprovider &quot;google-beta&quot; {\n  project = var.project_id\n  region  = var.region\n}\n\n\nmodule &quot;network&quot; {\n  source = &quot;git@github.com:lucasberlang\/gcp-network.git?ref=v1.0.0&quot;\n\n  project_id         = var.project_id\n  description        = var.description\n  enable_nat_gateway = true\n  offset             = 1\n\n  intra_subnets = [\n    {\n      subnet_name           = &quot;private-subnet01&quot;\n      subnet_ip_cidr        = &quot;10.0.0.0\/24&quot;\n      subnet_private_access = false\n      subnet_region         = var.region\n    }\n  ]\n\n  secondary_ranges = {\n    private-subnet01 = [\n      {\n        range_name    = &quot;private-subnet01-01&quot;\n        ip_cidr_range = var.ip_range_pods\n      },\n      {\n        range_name    = &quot;private-subnet01-02&quot;\n        ip_cidr_range = var.ip_range_services\n      },\n    ]\n  }\n\n  labels = var.labels\n}\n\nresource &quot;google_storage_bucket&quot; &quot;gcs_starburst&quot; {\n  name          = var.name\n  location      = &quot;EU&quot;\n  force_destroy = var.force_destroy\n}\n\nmodule &quot;gke-starburst&quot; {\n  source = &quot;git@github.com:lucasberlang\/gcp-gke.git?ref=v1.1.0&quot;\n\n  project_id              = var.project_id\n  name                    = &quot;starburst&quot;\n  regional                = true\n  region                  = var.region\n  network                 = module.network.network_name\n  subnetwork              = &quot;go-euw1-bt-stb-private-subnet01-dev&quot;\n  ip_range_pods           = &quot;private-subnet01-01&quot;\n  ip_range_services       = &quot;private-subnet01-02&quot;\n  enable_private_endpoint = false\n  enable_private_nodes    = false\n  master_ipv4_cidr_block  = &quot;172.16.0.0\/28&quot;\n  workload_identity       = false\n  kubernetes_version      = var.kubernetes_version\n  \n  gce_persistent_disk_csi_driver = true\n\n  master_authorized_networks = [\n    {\n      cidr_block   = module.network.intra_subnet_ips.0\n      display_name = &quot;VPC&quot;\n    },\n    {\n      cidr_block   = &quot;0.0.0.0\/0&quot;\n      display_name = &quot;shell&quot;\n    }\n  ]\n\n  cluster_autoscaling = {\n    enabled             = true,\n    autoscaling_profile = &quot;BALANCED&quot;,\n    max_cpu_cores       = 300,\n    max_memory_gb       = 940,\n    min_cpu_cores       = 24,\n    min_memory_gb       = 90,\n  }\n\n\n  node_pools = [\n    {\n      name         = &quot;default-node-pool&quot;\n      machine_type = &quot;e2-standard-16&quot;\n      auto_repair  = false\n      auto_upgrade = false\n    },\n  ]\n  \n  node_labels = {\n    &quot;starburstpool&quot; = &quot;default-node-pool&quot;\n  }\n\n  istio     = var.istio\n  dns_cache = var.dns_cache\n  labels    = var.labels\n}\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\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-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;\">Lo \u00fanico importante a tener en cuenta, es que vamos a desplegar una red con una \u00fanica subred y que el cluster de GKE est\u00e1 habilitado con el autoescalado para poder incrementar el n\u00famero de nodos cuando haya una carga de trabajo. Asimismo, es importante tener en cuenta que se ha a\u00f1adido una etiqueta a todos los nodos que es `&#8221;starburstpool&#8221; = &#8220;default-node-pool&#8221;` para aislar el propio despliegue de Starburst del que m\u00e1s tarde haremos uso. Aparte de estos componentes tambi\u00e9n desplegamos una Cloud Storage para luego configurar el conector de Hive.<\/span><\/p><p><span style=\"font-weight: 400;\">Por otra parte, como hemos comentado, tambi\u00e9n haremos el despliegue de Grafana y Prometheus. Para ello haremos uso del provider de Helm y de Kubernetes de Terraform.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">El despliegue de estos componentes lo tenemos en el archivo `helm.tf`:<\/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-f225ffd elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"f225ffd\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```tf\nresource &quot;kubernetes_namespace&quot; &quot;prometheus&quot; {\n  metadata {\n    name = &quot;prometheus&quot;\n  }\n}\n\nresource &quot;kubernetes_namespace&quot; &quot;grafana&quot; {\n  metadata {\n    name = &quot;grafana&quot;\n  }\n}\n\nresource &quot;helm_release&quot; &quot;grafana&quot; {\n  chart      = &quot;grafana&quot;\n  name       = &quot;grafana&quot;\n  namespace  = kubernetes_namespace.grafana.metadata.0.name\n  repository = &quot;https:\/\/grafana.github.io\/helm-charts&quot;\n\n  values = [\n    file(&quot;templates\/grafana.yaml&quot;)\n  ]\n}\n\nresource &quot;kubernetes_secret&quot; &quot;grafana-secrets&quot; {\n  metadata {\n    name      = &quot;grafana-credentials&quot;\n    namespace = kubernetes_namespace.grafana.metadata.0.name\n  }\n  data = {\n    adminUser     = &quot;admin&quot;\n    adminPassword = &quot;admin&quot;\n  }\n}\n\nresource &quot;helm_release&quot; &quot;prometheus&quot; {\n  chart      = &quot;prometheus&quot;\n  name       = &quot;prometheus&quot;\n  namespace  = kubernetes_namespace.prometheus.metadata.0.name\n  repository = &quot;https:\/\/prometheus-community.github.io\/helm-charts&quot;\n\n  values = [\n    file(&quot;templates\/prometheus.yaml&quot;)\n  ]\n}\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\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-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;\">Hay varias cosas que tenemos que tener en cuenta, estas son las configuraciones que hemos a\u00f1adido en los values de cada chart.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Primero vamos con los valores de Prometheus que hemos configurado. Hemos a\u00f1adido una configuraci\u00f3n extra para que recoja las m\u00e9tricas de Starburst una vez que se levante. Esto lo hemos hecho en la siguiente parte de la configuraci\u00f3n:<\/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-5f7fe47 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"5f7fe47\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```yaml\nextraScrapeConfigs: |\n  - job_name: starburst-monitor\n    scrape_interval: 5s\n    static_configs:\n      - targets: \n        - &#039;prometheus-coordinator-starburst-enterprise.default.svc.cluster.local:8081&#039;\n        - &#039;prometheus-worker-starburst-enterprise.default.svc.cluster.local:8081&#039;\n    metrics_path: \/metrics\n    scheme: http\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\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-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;\">Lo \u00fanico a tener en cuenta son los targets que hemos a\u00f1adido, que b\u00e1sicamente son los servicios tanto del Coordinator como de los Workers de Starburst para que recoja todas las m\u00e9tricas.<\/span><\/p><p><span style=\"font-weight: 400;\">En la parte de Grafana hemos a\u00f1adido tanto la configuraci\u00f3n de Prometheus, como un dashboard que hemos creado custom para Starburst.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">La configuraci\u00f3n que hemos a\u00f1adida es la siguiente:<\/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-71a4bfc elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"71a4bfc\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```yaml\ndatasources:\n datasources.yaml:\n   apiVersion: 1\n   datasources:\n   - name: Prometheus\n     type: prometheus\n     url: http:\/\/prometheus-server.prometheus.svc.cluster.local\n     isDefault: true\n\n\ndashboards:\n  default:\n    Starburst-cluster:\n      gnetId: 18767\n      revision: 1\n      datasource: Prometheus\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\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-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 la carpeta infra del repositorio de Github, podr\u00e1s encontrar todo el c\u00f3digo necesario para realizar dicho despliegue.<\/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\" 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\">Instalaci\u00f3n y configuraci\u00f3n de Starburst\n<\/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-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;\">Una vez que tengamos toda la infraestructura levantada, vamos a proceder a desplegar Starburst en nuestro cluster de GKE. Para ello, vamos a desplegar estos componentes:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Postgres Database on Kubernetes<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Hive Metastore Service<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Starburst Enterprise<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">El servicio de Hive Mestastore es necesario para configurar el conector de Hive para as\u00ed poder acceder o escribir a los datos que se guardan en Google Cloud Storage. Como backend de nuestro servicio de Metastore, vamos a desplegar un base de datos PostgreSQL, para as\u00ed poder guardar toda la informaci\u00f3n de la metadata en esta base de datos. Adem\u00e1s tendremos que configurar el servicio de Hive para pasarle las credenciales de Google Cloud y que tenga permisos para poder leer y escribir de GCS. Por lo tanto, vamos a proceder primero a declarar algunas variables de entorno que necesitaremos para descargar los charts del repositorio privado de Starburst y algunas variables de configuraci\u00f3n m\u00e1s que necesitaremos para realizar el despliegue.<\/span><\/p><p><span style=\"font-weight: 400;\">Esta ser\u00edan las variables que vamos a necesitar en nuestro despliegue:<\/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-3e8e156 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"3e8e156\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```bash\nexport admin_usr=     # Choose an admin user name you will use to login to Starburst &amp; Ranger. Do NOT use &#039;admin&#039;\nexport admin_pwd=     # Choose an admin password you will use to login to Starburst &amp; Ranger. MUST be a minimum of 8 characters and contain at least one uppercase, lowercase and numeric value.\n\nexport registry_pwd= #Credentials harbor registry\nexport registry_usr= #Credentials harbor registry\nexport starburst_license=starburstdata.license #License Starburst\n# Zone where the cluster will be deployed. e.g. us-east4-b\nexport zone=&quot;europe-west1&quot;\n# Google Cloud Project ID where the cluster is being deployed\nexport google_cloud_project=\n# Google Service account name. The service account is used to access services like GCS and BigQuery, so you should ensure that it has the relevant permissions for these\n# Give your cluster a name\nexport cluster_name=\n\n# These next values are automatically set based on your input values\n# We&#039;ll automatically get the domain for the zone you are selecting. Comment this out if you don&#039;t need DNS\n#export google_cloud_dns_zone_name=$(gcloud dns managed-zones describe ${google_cloud_dns_zone:?Zone not set} --project ${google_cloud_project_dns:?Project ID not set} | grep dnsName | awk &#039;{ print $2 }&#039; | sed &#039;s\/.$\/\/g&#039;)\n\n# This is the public URL to access Starburst\nexport starburst_url=${cluster_name:?Cluster Name not set}-starburst.${google_cloud_dns_zone_name}\n# This is the public URL to access Ranger\nexport ranger_url=${cluster_name:?Cluster Name not set}-ranger.${google_cloud_dns_zone_name}\n\n# Insights DB details\n# These are the defaults if you choose to deploy your postgresDB to the K8s cluster\n# You can adjust these to connect to an external DB, but be advised that the nodes in the K8s cluster must have access to the URL\nexport database_connection_url=jdbc:postgresql:\/\/postgresql:5432\/insights\nexport database_username=\nexport database_password=\n\n# Data Products. Leave the password unset as below, if you are connecting directly to the coordinator on port 8080\nexport data_products_enabled=true\nexport data_products_jdbc_url=jdbc:trino:\/\/coordinator:8080\nexport data_products_username=${admin_usr}\nexport data_products_password=\n\n# Starburst Access Control\nexport starburst_access_control_enabled=true\nexport starburst_access_control_authorized_users=${admin_usr}\n\n# These last remaining values are static\nexport xtra_args_hive=&quot;--set objectStorage.gs.cloudKeyFileSecret=service-account-key&quot;\nexport xtra_args_starburst=&quot;--values starburst.catalog.yaml&quot;\nexport xtra_args_ranger=&quot;&quot;\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eaf3584 elementor-widget elementor-widget-text-editor\" data-id=\"eaf3584\" data-element_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;\">Una vez definidas nuestras variables de entorno procederemos a crearnos un secreto de Kubernetes para configurar las credenciales con las que Hive se va a conectar a GCS.<\/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-c2df7b1 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"c2df7b1\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```bash\nkubectl create secret generic service-account-key --from-file key.json\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b271eff elementor-widget elementor-widget-text-editor\" data-id=\"b271eff\" data-element_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 ello, como paso previo, nos hemos creado una service account con permisos en Cloud Storage y en Bigquery y nos hemos descargado las credenciales de esa service account. Tambi\u00e9n como paso previo, a\u00f1adiremos los repositorio de Helm con el siguiente comando:<\/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-8d38fd5 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"8d38fd5\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```bash\nhelm repo add --username ${registry_usr} --password ${registry_pwd} starburstdata https:\/\/harbor.starburstdata.net\/chartrepo\/starburstdata\nhelm repo add bitnami https:\/\/charts.bitnami.com\/bitnami\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-41761da elementor-widget elementor-widget-text-editor\" data-id=\"41761da\" data-element_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;\">Una vez que tenemos la configuraci\u00f3n previa hecha, vamos a proceder a desplegar el servicio de PostgreSQL primero, y posteriormente, el Hive Metastore. Para ello haremos uso de Helm. Para el despliegue de PostgreSQL usaremos el siguiente comando:<\/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-4724701 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"4724701\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```bash\nhelm upgrade postgres bitnami\/postgresql --install --values postgres.yaml \\\n    --version 12.1.6 \\\n    --set primary.nodeSelector.starburstpool=default-node-pool \\\n    --set readReplicas.nodeSelector.starburstpool=default-node-pool\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-30d9cb5 elementor-widget elementor-widget-text-editor\" data-id=\"30d9cb5\" data-element_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;\">Hay varios factores a tener en cuenta en el comando anterior. El primero es que el despliegue de PostgreSQL lo haremos en los nodos que tengan el tag `starburstpool=default-node-pool`, que es nuestro worker pool por defecto. Usaremos la versi\u00f3n 12.1.6 de PostgreSQL y la configuraci\u00f3n que hemos a\u00f1adido en postgres es la siguiente:<\/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-6c16186 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"6c16186\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```yaml\nfullnameOverride: postgresql\n\nglobal:\n  postgresql:\n    auth:\n      database: postgres\n      username: postgres\n      postgresPassword: ****\n  storageClass: &quot;standard&quot;\nprimary:\n  initdb:\n    scripts:\n      init.sql: |\n        create database hive;\n        create database ranger;\n        create database insights;\n        create database datacache;\n\nservice:\n  type: ClusterIP\n``` <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-331daa4 elementor-widget elementor-widget-text-editor\" data-id=\"331daa4\" data-element_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;\">Esta informaci\u00f3n se encuentra en el archivo `postgres.yaml` y nos configurar\u00e1 el usuario y contrase\u00f1a de PostgreSQL, y nos crear\u00e1 4 bases de datos que usa internamente Starburst como backend. En nuestro caso, como pod\u00e9is observar, hemos configurado el servicio de backend en el mismo cluster que la configuraci\u00f3n de Starburst, pero esto se puede configurar fuera del cluster de Kubernetes para entornos productivos. B\u00e1sicamente podr\u00edamos tener un servicio gestionado como es Cloud Sql para as\u00ed evitar problemas en producci\u00f3n.<\/span><\/p><p><span style=\"font-weight: 400;\">Ahora vamos a proceder con el despliegue del servicio de Hive Metastore, esto lo haremos con el siguiente comando:<\/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-738f5b6 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"738f5b6\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```bash\nhelm upgrade hive starburstdata\/starburst-hive --install --values hive.yaml \\\n    --set registryCredentials.username=${registry_usr:?Value not set} \\\n    --set registryCredentials.password=${registry_pwd:?Value not set} \\\n    --set nodeSelector.starburstpool=default-node-pool  \\\n    --set objectStorage.gs.cloudKeyFileSecret=service-account-key\n``` <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bc4bf96 elementor-widget elementor-widget-text-editor\" data-id=\"bc4bf96\" data-element_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;\">Aqu\u00ed tenemos que tener en cuenta varias cosas importantes, la primera es que como en el servicio de PostgreSQL el despliegue se va a realizar en los nodos con el tag `starburstpool=default-node-pool`. El segundo punto importante es que hemos realizado la configuraci\u00f3n de las credenciales de Google para que funcione el conector de hive, esto lo hemos realizado con el siguiente comando:<\/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-2eeeddd elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"2eeeddd\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>`--set objectStorage.gs.cloudKeyFileSecret=service-account-key` <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-efa7070 elementor-widget elementor-widget-text-editor\" data-id=\"efa7070\" data-element_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;\">Con esta acci\u00f3n,\u00a0 montamos el fichero de credenciales como un archivo en el despliegue de Hive para que tenga visibilidad en las credenciales. Los valores extras que hemos a\u00f1adido a la configuraci\u00f3n de hive se encuentran en el archivo `hive.yaml` y son los siguientes:<\/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-b99ee51 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"b99ee51\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```yaml\ndatabase:\n  external:\n    driver: org.postgresql.Driver\n    jdbcUrl: jdbc:postgresql:\/\/postgresql:5432\/hive\n    user: #user postgres\n    password: #password postgres\n  type: external\n\nexpose:\n  type: clusterIp\n\nimage:\n  repository: harbor.starburstdata.net\/starburstdata\/hive\n\nregistryCredentials:\n  enabled: true\n  registry: harbor.starburstdata.net\/starburstdata\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f25b42c elementor-widget elementor-widget-text-editor\" data-id=\"f25b42c\" data-element_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;\">Una vez que tenemos desplegado tanto el servicio de Postgres como el de Hive Metastore, podemos proceder a desplegar Starburst. Primero necesitaremos realizar una serie de pasos previos. El primero ser\u00e1 crearnos un secreto de Kubernetes con la licencia de Starburst, el segundo ser\u00e1 crearnos un secreto con las variables de entornos que hemos definido antes, esto lo haremos con un peque\u00f1o script para quitar complejidad y que nos coja las variables que ya hemos definido.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Con el siguiente comando procederemos a realizar los pasos anteriores:<\/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-4fdbddd elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"4fdbddd\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```bash\nkubectl create secret generic starburst --from-file ${starburst_license}\nchmod 755 load_secrets.sh &amp;&amp; . .\/load_secrets.sh\nkubectl apply -f secrets.yaml\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d72abb elementor-widget elementor-widget-text-editor\" data-id=\"6d72abb\" data-element_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;\">Una vez que tenemos las configuraciones previas vamos a proceder a desplegar Starburst con el siguiente comando:<\/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-40d9c34 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"40d9c34\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```bash\nhelm upgrade starburst-enterprise starburstdata\/starburst-enterprise --install --values starburst.yaml \\\n    --set sharedSecret=&quot;$(openssl rand 64 | base64)&quot; \\\n    --set coordinator.resources.requests.memory=$(echo $(( $(kubectl get nodes --selector=&#039;starburstpool=default-node-pool&#039; -o jsonpath=&#039;{.items[0].status.allocatable.memory}&#039; | awk -F &quot;Ki&quot; &#039;{ print $1 }&#039;)*10\/100 ))Ki) \\\n    --set coordinator.resources.requests.cpu=$(echo $(( $(kubectl get nodes --selector=&#039;starburstpool=default-node-pool&#039; -o jsonpath=&#039;{.items[0].status.allocatable.cpu}&#039; | awk -F &quot;m&quot; &#039;{ print $1 }&#039;)*10\/100 ))m) \\\n    --set coordinator.resources.limits.memory=$(echo $(( $(kubectl get nodes --selector=&#039;starburstpool=default-node-pool&#039; -o jsonpath=&#039;{.items[0].status.allocatable.memory}&#039; | awk -F &quot;Ki&quot; &#039;{ print $1 }&#039;)*10\/100 ))Ki) \\\n    --set coordinator.resources.limits.cpu=$(echo $(( $(kubectl get nodes --selector=&#039;starburstpool=default-node-pool&#039; -o jsonpath=&#039;{.items[0].status.allocatable.cpu}&#039; | awk -F &quot;m&quot; &#039;{ print $1 }&#039;)*10\/100 ))m) \\\n    --set worker.resources.requests.memory=$(echo $(( $(kubectl get nodes --selector=&#039;starburstpool=default-node-pool&#039; -o jsonpath=&#039;{.items[0].status.allocatable.memory}&#039; | awk -F &quot;Ki&quot; &#039;{ print $1 }&#039;) - 10500000 ))Ki) \\\n    --set worker.resources.requests.cpu=$(echo $(( $(kubectl get nodes --selector=&#039;starburstpool=default-node-pool&#039; -o jsonpath=&#039;{.items[0].status.allocatable.cpu}&#039; | awk -F &quot;m&quot; &#039;{ print $1 }&#039;) - 3500 ))m) \\\n    --set worker.resources.limits.memory=$(echo $(( $(kubectl get nodes --selector=&#039;starburstpool=default-node-pool&#039; -o jsonpath=&#039;{.items[0].status.allocatable.memory}&#039; | awk -F &quot;Ki&quot; &#039;{ print $1 }&#039;) - 10500000 ))Ki) \\\n    --set worker.resources.limits.cpu=$(echo $(( $(kubectl get nodes --selector=&#039;starburstpool=default-node-pool&#039; -o jsonpath=&#039;{.items[0].status.allocatable.cpu}&#039; | awk -F &quot;m&quot; &#039;{ print $1 }&#039;) - 3500 ))m) \\\n    --set coordinator.nodeSelector.starburstpool=default-node-pool \n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\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-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;\">Aqu\u00ed como pod\u00e9is observar, hay varias cosas a tener en cuenta. La primera es que todos los componentes de Starburst que se despliegan lo hacen en los nodos con el tag `starburstpool=default-node-pool`. Esto simplemente lo hemos hecho para quitar complejidad a la demo.\u00a0 En entornos productivos, una buena pr\u00e1ctica ser\u00eda tener un nodepool para el Coordinator y otro nodepool para los Workers de Starburst.<\/span><\/p><p><span style=\"font-weight: 400;\">Otra cosa a tener en cuenta es la configuraci\u00f3n de la memoria y cpu que se hace tanto en los Workers como en el Coordinator. Como buenas pr\u00e1cticas, Starburst recomienda que haya un pod worker por cada nodo que se despliega en nuestro cluster de Kubernetes. Para ello lo que hemos hecho es ajustar la memoria y cpu de nuestros pods al tama\u00f1o de m\u00e1quina que tenemos. Por \u00faltimo est\u00e1n los valores de configuraci\u00f3n que hemos utilizado en el despliegue de Starburst, estos se pueden encontrar en el archivo `starburst.yaml` y son los siguientes:<\/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-b3a3349 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"b3a3349\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```yaml\ncatalogs:\n  hive: |\n    connector.name=hive\n    hive.security=starburst\n    hive.metastore.uri=thrift:\/\/hive:9083\n    hive.gcs.json-key-file-path=\/gcs-keyfile\/key.json\n    hive.gcs.use-access-token=false\n  postgres: |\n    connector.name=postgresql\n    connection-url=jdbc:postgresql:\/\/postgresql:5432\/insights\n    connection-user=******\n    connection-password=******\n  bigquery: |\n      connector.name=bigquery\n      bigquery.project-id=******\n      bigquery.credentials-file=\/gcs-keyfile\/key.json\nprometheus:\n  enabled: true\n  agent:\n    version: &quot;0.16.1&quot;\n    port: 8081\n    config: &quot;\/etc\/starburst\/telemetry\/prometheus.yaml&quot;\n  rules:\n    - pattern: trino.execution&lt;name=QueryManager&gt;&lt;&gt;(running_queries|queued_queries)\n      name: $1\n      attrNameSnakeCase: true\n      type: GAUGE\n    - pattern: &#039;trino.execution&lt;name=QueryManager&gt;&lt;&gt;FailedQueries\\.TotalCount&#039;\n      name: &#039;starburst_failed_queries&#039;\n      type: COUNTER\n    - pattern: &#039;trino.execution&lt;name=QueryManager&gt;&lt;&gt;(running_queries)&#039;\n      name: &#039;starburst_running_queries&#039;\n    - pattern: &#039;trino.execution&lt;name=QueryManager&gt;&lt;&gt;StartedQueries\\.FiveMinute\\.Count&#039;\n      name: &#039;starburst_started_queries&#039;\n    - pattern: &#039;trino.execution&lt;name=SqlTaskManager&gt;&lt;&gt;InputPositions\\.FiveMinute\\.Count&#039;\n      name: &#039;starburst_input_rows&#039;\n    - pattern: &#039;trino.execution&lt;name=SqlTaskManager&gt;&lt;&gt;InputDataSize\\.FiveMinute\\.Count&#039;\n      name: &#039;starburst_input_data_bytes&#039;\n    - pattern: &#039;trino.execution&lt;name=QueryManager&gt;&lt;&gt;UserErrorFailures\\.FiveMinute\\.Count&#039;\n      name: &#039;starburst_failed_queries_user&#039;\n    - pattern: &#039;trino.execution&lt;name=QueryManager&gt;&lt;&gt;ExecutionTime\\.FiveMinutes\\.P50&#039;\n      name: &#039;starburst_latency_p50&#039;\n    - pattern: &#039;trino.execution&lt;name=QueryManager&gt;&lt;&gt;WallInputBytesRate\\.FiveMinutes\\.P90&#039;\n      name: &#039;starburst_latency_p90&#039;\n    - pattern: &#039;trino.failuredetector&lt;name=HeartbeatFailureDetector&gt;&lt;&gt;ActiveCount&#039;\n      name: &#039;starburst_active_node&#039;\n    - pattern: &#039;trino.memory&lt;type=ClusterMemoryPool, name=general&gt;&lt;&gt;FreeDistributedBytes&#039;\n      name: &#039;starburst_free_memory_pool&#039;\n    - pattern: &#039;trino.memory&lt;name=ClusterMemoryManager&gt;&lt;&gt;QueriesKilledDueToOutOfMemory&#039;\n      name: &#039;starburst_queries_killed_due_to_out_of_memory&#039;\n    - pattern: &#039;java.lang&lt;type=Memory&gt;&lt;HeapMemoryUsage&gt;committed&#039;\n      name: &#039;starburst_heap_size_usage&#039;\n    - pattern: &#039;java.lang&lt;type=Threading&gt;&lt;&gt;ThreadCount&#039;\n      name: &#039;starburst_thread_count&#039;\ncoordinator:\n  envFrom:\n  - secretRef:\n      name: environment-vars\n  additionalProperties: |\n    starburst.data-product.enabled=${ENV:data_products_enabled}\n    data-product.starburst-jdbc-url=${ENV:data_products_jdbc_url}\n    data-product.starburst-user=${ENV:data_products_username}\n    data-product.starburst-password=\n    query.max-memory=1PB\n    starburst.access-control.enabled=${ENV:starburst_access_control_enabled}\n    starburst.access-control.authorized-users=${ENV:starburst_access_control_authorized_users}\n  etcFiles:\n    properties:\n      config.properties: |\n        coordinator=true\n        node-scheduler.include-coordinator=false\n        http-server.http.port=8080\n        discovery-server.enabled=true\n        discovery.uri=http:\/\/localhost:8080\n        usage-metrics.cluster-usage-resource.enabled=true\n        http-server.authentication.allow-insecure-over-http=true\n        web-ui.enabled=true\n        http-server.process-forwarded=true\n        insights.persistence-enabled=true\n        insights.metrics-persistence-enabled=true\n        insights.jdbc.url=${ENV:database_connection_url}\n        insights.jdbc.user=${ENV:database_username}\n        insights.jdbc.password=${ENV:database_password}\n      password-authenticator.properties: |\n        password-authenticator.name=file\n  nodeSelector:\n    starburstpool: default-node-pool\n  resources:\n    limits:\n      cpu: 2\n      memory: 12Gi\n    requests:\n      cpu: 2\n      memory: 12Gi\n\nexpose:\n  type: clusterIp\n  ingress:\n    serviceName: starburst\n    servicePort: 8080\n    host: \n    path: &quot;\/&quot;\n    pathType: Prefix\n    tls:\n      enabled: true\n      secretName: tls-secret-starburst\n    annotations:\n      kubernetes.io\/ingress.class: nginx\n      cert-manager.io\/cluster-issuer: letsencrypt\n\nregistryCredentials:\n  enabled: true\n  password: ******\n  registry: harbor.starburstdata.net\/starburstdata\n  username: ******\n\nstarburstPlatformLicense: starburst\n\nuserDatabase:\n  enabled: true\n  users:\n  - password: ******\n    username: ******\n\nworker:\n  envFrom:\n  - secretRef:\n      name: environment-vars\n  autoscaling:\n    enabled: true\n    maxReplicas: 10\n    minReplicas: 3\n    targetCPUUtilizationPercentage: 40\n  deploymentTerminationGracePeriodSeconds: 30\n  nodeSelector:\n    starburstpool: default-node-pool\n  resources:\n    limits:\n      cpu: 8\n      memory: 40Gi\n    requests:\n      cpu: 8\n      memory: 40Gi\n  starburstWorkerShutdownGracePeriodSeconds: 120\n  tolerations:\n    - key: &quot;kubernetes.azure.com\/scalesetpriority&quot;\n      operator: &quot;Exists&quot;\n      effect: &quot;NoSchedule&quot;\n\nadditionalVolumes:\n  - path: \/gcs-keyfile\/key.json\n    subPath: key.json\n    volume:\n      configMap:\n        name: &quot;sa-key&quot;\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\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-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 esta configuraci\u00f3n hay varios valores a tener en cuenta, como son catalogs, prometheus, worker y additionalVolumes.<\/span><\/p><p><span style=\"font-weight: 400;\">Vamos a empezar explicando la parte de catalogs. Para los que no lo sepan, un cat\u00e1logo en Starburst es la configuraci\u00f3n que permite acceder a unas fuentes de datos determinadas. Cada cl\u00faster de Starburst puede tener configurados m\u00faltiples cat\u00e1logos y, por tanto, permitir el acceso a diversas fuentes de datos. En nuestro caso hemos definido el cat\u00e1logo de Hive, PostgreSQL y Bigquery para poder acceder a dichas fuentes de datos:<\/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-d5f3209 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"d5f3209\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```yaml\ncatalogs:\n  hive: |\n    connector.name=hive\n    hive.security=starburst\n    hive.metastore.uri=thrift:\/\/hive:9083\n    hive.gcs.json-key-file-path=\/gcs-keyfile\/key.json\n    hive.gcs.use-access-token=false\n  postgres: |\n    connector.name=postgresql\n    connection-url=jdbc:postgresql:\/\/postgresql:5432\/insights\n    connection-user=******\n    connection-password=******\n  bigquery: |\n      connector.name=bigquery\n      bigquery.project-id=******\n      bigquery.credentials-file=\/gcs-keyfile\/key.json\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\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-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 segunda configuraci\u00f3n a tener en cuenta es la de Prometheus, esto lo realizamos para exponer ciertas m\u00e9tricas a Prometheus y poder sacar informaci\u00f3n relevante en un dashboard de Grafana. Para ello tenemos la siguiente configuraci\u00f3n:<\/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-c842bbd elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"c842bbd\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```yaml\nprometheus:\n  enabled: true\n  agent:\n    version: &quot;0.16.1&quot;\n    port: 8081\n    config: &quot;\/etc\/starburst\/telemetry\/prometheus.yaml&quot;\n  rules:\n    - pattern: trino.execution&lt;name=QueryManager&gt;&lt;&gt;(running_queries|queued_queries)\n      name: $1\n      attrNameSnakeCase: true\n      type: GAUGE\n    - pattern: &#039;trino.execution&lt;name=QueryManager&gt;&lt;&gt;FailedQueries\\.TotalCount&#039;\n      name: &#039;starburst_failed_queries&#039;\n      type: COUNTER\n    - pattern: &#039;trino.execution&lt;name=QueryManager&gt;&lt;&gt;(running_queries)&#039;\n      name: &#039;starburst_running_queries&#039;\n    - pattern: &#039;trino.execution&lt;name=QueryManager&gt;&lt;&gt;StartedQueries\\.FiveMinute\\.Count&#039;\n      name: &#039;starburst_started_queries&#039;\n    - pattern: &#039;trino.execution&lt;name=SqlTaskManager&gt;&lt;&gt;InputPositions\\.FiveMinute\\.Count&#039;\n      name: &#039;starburst_input_rows&#039;\n    - pattern: &#039;trino.execution&lt;name=SqlTaskManager&gt;&lt;&gt;InputDataSize\\.FiveMinute\\.Count&#039;\n      name: &#039;starburst_input_data_bytes&#039;\n    - pattern: &#039;trino.execution&lt;name=QueryManager&gt;&lt;&gt;UserErrorFailures\\.FiveMinute\\.Count&#039;\n      name: &#039;starburst_failed_queries_user&#039;\n    - pattern: &#039;trino.execution&lt;name=QueryManager&gt;&lt;&gt;ExecutionTime\\.FiveMinutes\\.P50&#039;\n      name: &#039;starburst_latency_p50&#039;\n    - pattern: &#039;trino.execution&lt;name=QueryManager&gt;&lt;&gt;WallInputBytesRate\\.FiveMinutes\\.P90&#039;\n      name: &#039;starburst_latency_p90&#039;\n    - pattern: &#039;trino.failuredetector&lt;name=HeartbeatFailureDetector&gt;&lt;&gt;ActiveCount&#039;\n      name: &#039;starburst_active_node&#039;\n    - pattern: &#039;trino.memory&lt;type=ClusterMemoryPool, name=general&gt;&lt;&gt;FreeDistributedBytes&#039;\n      name: &#039;starburst_free_memory_pool&#039;\n    - pattern: &#039;trino.memory&lt;name=ClusterMemoryManager&gt;&lt;&gt;QueriesKilledDueToOutOfMemory&#039;\n      name: &#039;starburst_queries_killed_due_to_out_of_memory&#039;\n    - pattern: &#039;java.lang&lt;type=Memory&gt;&lt;HeapMemoryUsage&gt;committed&#039;\n      name: &#039;starburst_heap_size_usage&#039;\n    - pattern: &#039;java.lang&lt;type=Threading&gt;&lt;&gt;ThreadCount&#039;\n      name: &#039;starburst_thread_count&#039;\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-046e180 elementor-widget elementor-widget-text-editor\" data-id=\"046e180\" data-element_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 la configuraci\u00f3n de los workers, vamos a activar el autoescalado de estos pods. Para ello vamos a realizar una configuraci\u00f3n para que haya un m\u00ednimo de 3 pods workers que se traducir\u00e1n en 3 nodos en nuestro cluster de GKE y un m\u00e1ximo de 10 pods. Para el autoescalado vamos a usar la m\u00e9trica de consumo de CPU.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Los valores son los siguientes:<\/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-f11a167 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"f11a167\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```yaml\nworker:\n  envFrom:\n  - secretRef:\n      name: environment-vars\n  autoscaling:\n    enabled: true\n    maxReplicas: 10\n    minReplicas: 3\n    targetCPUUtilizationPercentage: 40\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-751e97c elementor-widget elementor-widget-text-editor\" data-id=\"751e97c\" data-element_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;\">Por \u00faltimo, a\u00f1adiremos un volumen adicional a nuestro despliegue para poder montar las credenciales de Google cloud tanto en el coordinator como en los workers.<\/span><\/p><p><span style=\"font-weight: 400;\">Esto lo haremos de la siguiente forma:<\/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-1bfb4f2 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"1bfb4f2\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```yaml\nadditionalVolumes:\n  - path: \/gcs-keyfile\/key.json\n    subPath: key.json\n    volume:\n      configMap:\n        name: &quot;sa-key&quot;\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-39f9241 elementor-widget elementor-widget-text-editor\" data-id=\"39f9241\" data-element_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;\">Con todos estos pasos, tendr\u00edamos nuestro cluster de Starburst ya operativo.<\/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-21916b6 elementor-widget elementor-widget-image\" data-id=\"21916b6\" data-element_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=\"756\" height=\"129\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image6.png\" class=\"attachment-large size-large wp-image-15270 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image6.png 756w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image6-300x51.png 300w\" data-sizes=\"(max-width: 756px) 100vw, 756px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 756px; --smush-placeholder-aspect-ratio: 756\/129;\" \/>\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-b193743 elementor-widget elementor-widget-image\" data-id=\"b193743\" data-element_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=\"1024\" height=\"588\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image11-1024x588.png\" class=\"attachment-large size-large wp-image-15272 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image11-1024x588.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image11-300x172.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image11-768x441.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image11-1536x882.png 1536w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image11.png 1832w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/588;\" \/>\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-5a09c67 elementor-widget elementor-widget-heading\" data-id=\"5a09c67\" data-element_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\">Consultas en GCP y autoescalado de Starburst<\/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-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;\">Una vez realizado el levantamiento del cluster de Starburst, vamos a realizar algunas consultas para probar su rendimiento y funcionamiento. Para ello vamos a realizar consultas de lectura en el esquema de TPCH<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">13<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\"> y despu\u00e9s vamos a escribir la salida de estas consultas en el bucket de Google que hemos creado en los pasos de despliegue.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Las consultas que vamos a ejecutar se encuentran en la carpeta de queries en los archivos `tpch.sql` y `gcs_storage.sql`.<\/span><\/p><p><span style=\"font-weight: 400;\">Para lanzar las consultas ser\u00e1 tan sencillo como irnos al apartado de consultas de la interfaz web y ejecutar las primeras consultas del archivo `tpch.sql`:<\/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-1a82503 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"1a82503\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```sql\n CREATE SCHEMA hive.logistic WITH (location = &#039;gs:\/\/starburst-bluetab-test\/logistic&#039;);\n\nCREATE VIEW &quot;hive&quot;.&quot;logistic&quot;.&quot;shipping_priority&quot; SECURITY DEFINER AS\nSELECT\n  l.orderkey\n, SUM((l.extendedprice * (1 - l.discount))) revenue\n, o.orderdate\n, o.shippriority\nFROM\n  tpch.tiny.customer c\n, tpch.tiny.orders o\n, tpch.tiny.lineitem l\nWHERE ((c.mktsegment = &#039;BUILDING&#039;) AND (c.custkey = o.custkey) AND (l.orderkey = o.orderkey))\nGROUP BY l.orderkey, o.orderdate, o.shippriority\nORDER BY revenue DESC, o.orderdate ASC;\n\n\nCREATE VIEW &quot;hive&quot;.&quot;logistic&quot;.&quot;minimum_cost_supplier&quot; SECURITY DEFINER AS\nSELECT\n  s.acctbal\n, s.name SupplierName\n, n.name Nation\n, p.partkey\n, p.mfgr\n, s.address\n, s.phone\n, s.comment\nFROM\n  tpch.tiny.part p\n, tpch.tiny.supplier s\n, tpch.tiny.partsupp ps\n, tpch.tiny.nation n\n, tpch.tiny.region r\nWHERE ((p.partkey = ps.partkey) AND (s.suppkey = ps.suppkey) AND (p.size = 15) AND (p.type LIKE &#039;%BRASS&#039;) AND (s.nationkey = n.nationkey) AND (n.regionkey = r.regionkey) AND (r.name = &#039;EUROPE&#039;) AND (ps.supplycost = (SELECT MIN(ps.supplycost)\nFROM\n  tpch.tiny.partsupp ps\n, tpch.tiny.supplier s\n, tpch.tiny.nation n\n, tpch.tiny.region r\nWHERE ((p.partkey = ps.partkey) AND (s.suppkey = ps.suppkey) AND (s.nationkey = n.nationkey) AND (n.regionkey = r.regionkey) AND (r.name = &#039;EUROPE&#039;))\n)))\nORDER BY s.acctbal DESC, n.name ASC, s.name ASC, p.partkey ASC;\n\n\n\nselect\n  cst.name as CustomerName,\n  cst.address,\n  cst.phone,\n  cst.nationkey,\n  cst.acctbal as BookedOrders,\n  cst.mktsegment,\n  nat.name as Nation,\n  reg.name as Region\nfrom tpch.sf1.customer as cst\njoin tpch.sf1.nation as nat on nat.nationkey = cst.nationkey\njoin tpch.sf1.region as reg on reg.regionkey = nat.regionkey\nwhere reg.regionkey = 1;\n\nselect\n  nat.name as Nation,\n  avg(cst.acctbal) as average_booking\nfrom tpch.sf100.customer as cst\njoin tpch.sf100.nation as nat on nat.nationkey = cst.nationkey\njoin tpch.sf100.region as reg on reg.regionkey = nat.regionkey\nwhere reg.regionkey = 1\ngroup by nat.name;\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38f4153 elementor-widget elementor-widget-image\" data-id=\"38f4153\" data-element_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=\"1024\" height=\"496\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image1-1024x496.png\" class=\"attachment-large size-large wp-image-15274 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image1-1024x496.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image1-300x145.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image1-768x372.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image1-1536x744.png 1536w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image1.png 1850w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/496;\" \/>\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-ae52692 elementor-widget elementor-widget-text-editor\" data-id=\"ae52692\" data-element_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 estas pruebas crearemos una serie de vistas y haremos unos selects con varios cruces sobre las tablas de customer(15000000 rows), nation(25 rows) y region(5 rows) del esquema sf100 para comprobar que todo funciona correctamente y ver que tenemos nuestra plataforma operativa. Una vez comprobado que todo es correcto, probaremos a escribir algunos resultados en el bucket que hemos creado.<\/span><\/p><p><span style=\"font-weight: 400;\">Para ello lanzaremos las consultas que se encuentran en el archivo `gcs_storage.sql`:<\/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-a2de6e9 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"a2de6e9\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>{&quot;type&quot;:&quot;elementor&quot;,&quot;siteurl&quot;:&quot;https:\/\/bluetab.net\/wp-json\/&quot;,&quot;elements&quot;:[{&quot;id&quot;:&quot;1a82503&quot;,&quot;elType&quot;:&quot;widget&quot;,&quot;isInner&quot;:false,&quot;isLocked&quot;:false,&quot;settings&quot;:{&quot;code_language&quot;:&quot;python&quot;,&quot;code_block&quot;:&quot;```sql\\n CREATE SCHEMA hive.logistic WITH (location = &#039;gs:\/\/starburst-bluetab-test\/logistic&#039;);\\n\\nCREATE VIEW \\&quot;hive\\&quot;.\\&quot;logistic\\&quot;.\\&quot;shipping_priority\\&quot; SECURITY DEFINER AS\\nSELECT\\n  l.orderkey\\n, SUM((l.extendedprice * (1 - l.discount))) revenue\\n, o.orderdate\\n, o.shippriority\\nFROM\\n  tpch.tiny.customer c\\n, tpch.tiny.orders o\\n, tpch.tiny.lineitem l\\nWHERE ((c.mktsegment = &#039;BUILDING&#039;) AND (c.custkey = o.custkey) AND (l.orderkey = o.orderkey))\\nGROUP BY l.orderkey, o.orderdate, o.shippriority\\nORDER BY revenue DESC, o.orderdate ASC;\\n\\n\\nCREATE VIEW \\&quot;hive\\&quot;.\\&quot;logistic\\&quot;.\\&quot;minimum_cost_supplier\\&quot; SECURITY DEFINER AS\\nSELECT\\n  s.acctbal\\n, s.name SupplierName\\n, n.name Nation\\n, p.partkey\\n, p.mfgr\\n, s.address\\n, s.phone\\n, s.comment\\nFROM\\n  tpch.tiny.part p\\n, tpch.tiny.supplier s\\n, tpch.tiny.partsupp ps\\n, tpch.tiny.nation n\\n, tpch.tiny.region r\\nWHERE ((p.partkey = ps.partkey) AND (s.suppkey = ps.suppkey) AND (p.size = 15) AND (p.type LIKE &#039;%BRASS&#039;) AND (s.nationkey = n.nationkey) AND (n.regionkey = r.regionkey) AND (r.name = &#039;EUROPE&#039;) AND (ps.supplycost = (SELECT MIN(ps.supplycost)\\nFROM\\n  tpch.tiny.partsupp ps\\n, tpch.tiny.supplier s\\n, tpch.tiny.nation n\\n, tpch.tiny.region r\\nWHERE ((p.partkey = ps.partkey) AND (s.suppkey = ps.suppkey) AND (s.nationkey = n.nationkey) AND (n.regionkey = r.regionkey) AND (r.name = &#039;EUROPE&#039;))\\n)))\\nORDER BY s.acctbal DESC, n.name ASC, s.name ASC, p.partkey ASC;\\n\\n\\n\\nselect\\n  cst.name as CustomerName,\\n  cst.address,\\n  cst.phone,\\n  cst.nationkey,\\n  cst.acctbal as BookedOrders,\\n  cst.mktsegment,\\n  nat.name as Nation,\\n  reg.name as Region\\nfrom tpch.sf1.customer as cst\\njoin tpch.sf1.nation as nat on nat.nationkey = cst.nationkey\\njoin tpch.sf1.region as reg on reg.regionkey = nat.regionkey\\nwhere reg.regionkey = 1;\\n\\nselect\\n  nat.name as Nation,\\n  avg(cst.acctbal) as average_booking\\nfrom tpch.sf100.customer as cst\\njoin tpch.sf100.nation as nat on nat.nationkey = cst.nationkey\\njoin tpch.sf100.region as reg on reg.regionkey = nat.regionkey\\nwhere reg.regionkey = 1\\ngroup by nat.name;\\n```\\n&quot;,&quot;_title&quot;:&quot;&quot;,&quot;_margin&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_margin_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_margin_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_padding&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_padding_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_padding_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_element_width&quot;:&quot;&quot;,&quot;_element_width_tablet&quot;:&quot;&quot;,&quot;_element_width_mobile&quot;:&quot;&quot;,&quot;_element_custom_width&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_element_custom_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_element_custom_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_element_vertical_align&quot;:&quot;&quot;,&quot;_element_vertical_align_tablet&quot;:&quot;&quot;,&quot;_element_vertical_align_mobile&quot;:&quot;&quot;,&quot;_position&quot;:&quot;&quot;,&quot;_offset_orientation_h&quot;:&quot;start&quot;,&quot;_offset_x&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;0&quot;,&quot;sizes&quot;:[]},&quot;_offset_x_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_offset_x_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_offset_x_end&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;0&quot;,&quot;sizes&quot;:[]},&quot;_offset_x_end_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_offset_x_end_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_offset_orientation_v&quot;:&quot;start&quot;,&quot;_offset_y&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;0&quot;,&quot;sizes&quot;:[]},&quot;_offset_y_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_offset_y_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_offset_y_end&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;0&quot;,&quot;sizes&quot;:[]},&quot;_offset_y_end_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_offset_y_end_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_z_index&quot;:&quot;&quot;,&quot;_z_index_tablet&quot;:&quot;&quot;,&quot;_z_index_mobile&quot;:&quot;&quot;,&quot;_element_id&quot;:&quot;&quot;,&quot;_css_classes&quot;:&quot;&quot;,&quot;motion_fx_motion_fx_scrolling&quot;:&quot;&quot;,&quot;motion_fx_translateY_effect&quot;:&quot;&quot;,&quot;motion_fx_translateY_direction&quot;:&quot;&quot;,&quot;motion_fx_translateY_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;motion_fx_translateY_affectedRange&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:100}},&quot;motion_fx_translateX_effect&quot;:&quot;&quot;,&quot;motion_fx_translateX_direction&quot;:&quot;&quot;,&quot;motion_fx_translateX_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;motion_fx_translateX_affectedRange&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:100}},&quot;motion_fx_opacity_effect&quot;:&quot;&quot;,&quot;motion_fx_opacity_direction&quot;:&quot;out-in&quot;,&quot;motion_fx_opacity_level&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;motion_fx_opacity_range&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:20,&quot;end&quot;:80}},&quot;motion_fx_blur_effect&quot;:&quot;&quot;,&quot;motion_fx_blur_direction&quot;:&quot;out-in&quot;,&quot;motion_fx_blur_level&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:7,&quot;sizes&quot;:[]},&quot;motion_fx_blur_range&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:20,&quot;end&quot;:80}},&quot;motion_fx_rotateZ_effect&quot;:&quot;&quot;,&quot;motion_fx_rotateZ_direction&quot;:&quot;&quot;,&quot;motion_fx_rotateZ_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1,&quot;sizes&quot;:[]},&quot;motion_fx_rotateZ_affectedRange&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:100}},&quot;motion_fx_scale_effect&quot;:&quot;&quot;,&quot;motion_fx_scale_direction&quot;:&quot;out-in&quot;,&quot;motion_fx_scale_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;motion_fx_scale_range&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:20,&quot;end&quot;:80}},&quot;motion_fx_transform_origin_x&quot;:&quot;center&quot;,&quot;motion_fx_transform_origin_y&quot;:&quot;center&quot;,&quot;motion_fx_devices&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;],&quot;motion_fx_range&quot;:&quot;&quot;,&quot;motion_fx_motion_fx_mouse&quot;:&quot;&quot;,&quot;motion_fx_mouseTrack_effect&quot;:&quot;&quot;,&quot;motion_fx_mouseTrack_direction&quot;:&quot;&quot;,&quot;motion_fx_mouseTrack_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1,&quot;sizes&quot;:[]},&quot;motion_fx_tilt_effect&quot;:&quot;&quot;,&quot;motion_fx_tilt_direction&quot;:&quot;&quot;,&quot;motion_fx_tilt_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;sticky&quot;:&quot;&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;],&quot;sticky_offset&quot;:0,&quot;sticky_offset_tablet&quot;:&quot;&quot;,&quot;sticky_offset_mobile&quot;:&quot;&quot;,&quot;sticky_effects_offset&quot;:0,&quot;sticky_effects_offset_tablet&quot;:&quot;&quot;,&quot;sticky_effects_offset_mobile&quot;:&quot;&quot;,&quot;sticky_parent&quot;:&quot;&quot;,&quot;_animation&quot;:&quot;&quot;,&quot;_animation_tablet&quot;:&quot;&quot;,&quot;_animation_mobile&quot;:&quot;&quot;,&quot;animation_duration&quot;:&quot;&quot;,&quot;_animation_delay&quot;:&quot;&quot;,&quot;_transform_rotate_popover&quot;:&quot;&quot;,&quot;_transform_rotateZ_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateZ_effect_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateZ_effect_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotate_3d&quot;:&quot;&quot;,&quot;_transform_rotateX_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateX_effect_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateX_effect_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateY_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateY_effect_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateY_effect_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_perspective_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_perspective_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_perspective_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translate_popover&quot;:&quot;&quot;,&quot;_transform_translateX_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateX_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateX_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateY_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateY_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateY_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_popover&quot;:&quot;&quot;,&quot;_transform_keep_proportions&quot;:&quot;yes&quot;,&quot;_transform_scale_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scaleX_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scaleX_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scaleX_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scaleY_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scaleY_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scaleY_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_skew_popover&quot;:&quot;&quot;,&quot;_transform_skewX_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_skewX_effect_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_skewX_effect_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_skewY_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_skewY_effect_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_skewY_effect_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_flipX_effect&quot;:&quot;&quot;,&quot;_transform_flipY_effect&quot;:&quot;&quot;,&quot;_transform_rotate_popover_hover&quot;:&quot;&quot;,&quot;_transform_rotateZ_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateZ_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateZ_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotate_3d_hover&quot;:&quot;&quot;,&quot;_transform_rotateX_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateX_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateX_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateY_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateY_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateY_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_perspective_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_perspective_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_perspective_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translate_popover_hover&quot;:&quot;&quot;,&quot;_transform_translateX_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateX_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateX_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateY_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateY_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateY_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_popover_hover&quot;:&quot;&quot;,&quot;_transform_keep_proportions_hover&quot;:&quot;yes&quot;,&quot;_transform_scale_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scale_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scaleX_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scaleX_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scaleX_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scaleY_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scaleY_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_scaleY_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_skew_popover_hover&quot;:&quot;&quot;,&quot;_transform_skewX_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_skewX_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_skewX_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_skewY_effect_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_skewY_effect_hover_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_skewY_effect_hover_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_flipX_effect_hover&quot;:&quot;&quot;,&quot;_transform_flipY_effect_hover&quot;:&quot;&quot;,&quot;_transform_transition_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;motion_fx_transform_x_anchor_point&quot;:&quot;&quot;,&quot;motion_fx_transform_x_anchor_point_tablet&quot;:&quot;&quot;,&quot;motion_fx_transform_x_anchor_point_mobile&quot;:&quot;&quot;,&quot;motion_fx_transform_y_anchor_point&quot;:&quot;&quot;,&quot;motion_fx_transform_y_anchor_point_tablet&quot;:&quot;&quot;,&quot;motion_fx_transform_y_anchor_point_mobile&quot;:&quot;&quot;,&quot;_background_background&quot;:&quot;&quot;,&quot;_background_color&quot;:&quot;&quot;,&quot;_background_color_stop&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_color_b&quot;:&quot;#f2295b&quot;,&quot;_background_color_b_stop&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:100,&quot;sizes&quot;:[]},&quot;_background_gradient_type&quot;:&quot;linear&quot;,&quot;_background_gradient_angle&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:180,&quot;sizes&quot;:[]},&quot;_background_gradient_position&quot;:&quot;center center&quot;,&quot;_background_image&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;_background_image_tablet&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;_background_image_mobile&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;_background_position&quot;:&quot;&quot;,&quot;_background_position_tablet&quot;:&quot;&quot;,&quot;_background_position_mobile&quot;:&quot;&quot;,&quot;_background_xpos&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_xpos_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_xpos_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_ypos&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_ypos_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_ypos_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_attachment&quot;:&quot;&quot;,&quot;_background_repeat&quot;:&quot;&quot;,&quot;_background_repeat_tablet&quot;:&quot;&quot;,&quot;_background_repeat_mobile&quot;:&quot;&quot;,&quot;_background_size&quot;:&quot;&quot;,&quot;_background_size_tablet&quot;:&quot;&quot;,&quot;_background_size_mobile&quot;:&quot;&quot;,&quot;_background_bg_width&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:100,&quot;sizes&quot;:[]},&quot;_background_bg_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_background_bg_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_background_video_link&quot;:&quot;&quot;,&quot;_background_video_start&quot;:&quot;&quot;,&quot;_background_video_end&quot;:&quot;&quot;,&quot;_background_play_once&quot;:&quot;&quot;,&quot;_background_play_on_mobile&quot;:&quot;&quot;,&quot;_background_privacy_mode&quot;:&quot;&quot;,&quot;_background_video_fallback&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;_background_slideshow_gallery&quot;:[],&quot;_background_slideshow_loop&quot;:&quot;yes&quot;,&quot;_background_slideshow_slide_duration&quot;:5000,&quot;_background_slideshow_slide_transition&quot;:&quot;fade&quot;,&quot;_background_slideshow_transition_duration&quot;:500,&quot;_background_slideshow_background_size&quot;:&quot;&quot;,&quot;_background_slideshow_background_size_tablet&quot;:&quot;&quot;,&quot;_background_slideshow_background_size_mobile&quot;:&quot;&quot;,&quot;_background_slideshow_background_position&quot;:&quot;&quot;,&quot;_background_slideshow_background_position_tablet&quot;:&quot;&quot;,&quot;_background_slideshow_background_position_mobile&quot;:&quot;&quot;,&quot;_background_slideshow_lazyload&quot;:&quot;&quot;,&quot;_background_slideshow_ken_burns&quot;:&quot;&quot;,&quot;_background_slideshow_ken_burns_zoom_direction&quot;:&quot;in&quot;,&quot;_background_hover_background&quot;:&quot;&quot;,&quot;_background_hover_color&quot;:&quot;&quot;,&quot;_background_hover_color_stop&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_hover_color_b&quot;:&quot;#f2295b&quot;,&quot;_background_hover_color_b_stop&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:100,&quot;sizes&quot;:[]},&quot;_background_hover_gradient_type&quot;:&quot;linear&quot;,&quot;_background_hover_gradient_angle&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:180,&quot;sizes&quot;:[]},&quot;_background_hover_gradient_position&quot;:&quot;center center&quot;,&quot;_background_hover_image&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;_background_hover_image_tablet&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;_background_hover_image_mobile&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;_background_hover_position&quot;:&quot;&quot;,&quot;_background_hover_position_tablet&quot;:&quot;&quot;,&quot;_background_hover_position_mobile&quot;:&quot;&quot;,&quot;_background_hover_xpos&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_hover_xpos_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_hover_xpos_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_hover_ypos&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_hover_ypos_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_hover_ypos_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_background_hover_attachment&quot;:&quot;&quot;,&quot;_background_hover_repeat&quot;:&quot;&quot;,&quot;_background_hover_repeat_tablet&quot;:&quot;&quot;,&quot;_background_hover_repeat_mobile&quot;:&quot;&quot;,&quot;_background_hover_size&quot;:&quot;&quot;,&quot;_background_hover_size_tablet&quot;:&quot;&quot;,&quot;_background_hover_size_mobile&quot;:&quot;&quot;,&quot;_background_hover_bg_width&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:100,&quot;sizes&quot;:[]},&quot;_background_hover_bg_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_background_hover_bg_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_background_hover_video_link&quot;:&quot;&quot;,&quot;_background_hover_video_start&quot;:&quot;&quot;,&quot;_background_hover_video_end&quot;:&quot;&quot;,&quot;_background_hover_play_once&quot;:&quot;&quot;,&quot;_background_hover_play_on_mobile&quot;:&quot;&quot;,&quot;_background_hover_privacy_mode&quot;:&quot;&quot;,&quot;_background_hover_video_fallback&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;_background_hover_slideshow_gallery&quot;:[],&quot;_background_hover_slideshow_loop&quot;:&quot;yes&quot;,&quot;_background_hover_slideshow_slide_duration&quot;:5000,&quot;_background_hover_slideshow_slide_transition&quot;:&quot;fade&quot;,&quot;_background_hover_slideshow_transition_duration&quot;:500,&quot;_background_hover_slideshow_background_size&quot;:&quot;&quot;,&quot;_background_hover_slideshow_background_size_tablet&quot;:&quot;&quot;,&quot;_background_hover_slideshow_background_size_mobile&quot;:&quot;&quot;,&quot;_background_hover_slideshow_background_position&quot;:&quot;&quot;,&quot;_background_hover_slideshow_background_position_tablet&quot;:&quot;&quot;,&quot;_background_hover_slideshow_background_position_mobile&quot;:&quot;&quot;,&quot;_background_hover_slideshow_lazyload&quot;:&quot;&quot;,&quot;_background_hover_slideshow_ken_burns&quot;:&quot;&quot;,&quot;_background_hover_slideshow_ken_burns_zoom_direction&quot;:&quot;in&quot;,&quot;_background_hover_transition&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_border_border&quot;:&quot;&quot;,&quot;_border_width&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_border_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_border_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_border_color&quot;:&quot;&quot;,&quot;_border_radius&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_border_radius_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_border_radius_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_box_shadow_box_shadow_type&quot;:&quot;&quot;,&quot;_box_shadow_box_shadow&quot;:{&quot;horizontal&quot;:0,&quot;vertical&quot;:0,&quot;blur&quot;:10,&quot;spread&quot;:0,&quot;color&quot;:&quot;rgba(0,0,0,0.5)&quot;},&quot;_box_shadow_box_shadow_position&quot;:&quot; &quot;,&quot;_border_hover_border&quot;:&quot;&quot;,&quot;_border_hover_width&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_border_hover_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_border_hover_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_border_hover_color&quot;:&quot;&quot;,&quot;_border_radius_hover&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_border_radius_hover_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_border_radius_hover_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;_box_shadow_hover_box_shadow_type&quot;:&quot;&quot;,&quot;_box_shadow_hover_box_shadow&quot;:{&quot;horizontal&quot;:0,&quot;vertical&quot;:0,&quot;blur&quot;:10,&quot;spread&quot;:0,&quot;color&quot;:&quot;rgba(0,0,0,0.5)&quot;},&quot;_box_shadow_hover_box_shadow_position&quot;:&quot; &quot;,&quot;_border_hover_transition&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_mask_switch&quot;:&quot;&quot;,&quot;_mask_shape&quot;:&quot;circle&quot;,&quot;_mask_image&quot;:{&quot;url&quot;:&quot;&quot;,&quot;id&quot;:&quot;&quot;,&quot;size&quot;:&quot;&quot;},&quot;_mask_notice&quot;:&quot;&quot;,&quot;_mask_size&quot;:&quot;contain&quot;,&quot;_mask_size_tablet&quot;:&quot;&quot;,&quot;_mask_size_mobile&quot;:&quot;&quot;,&quot;_mask_size_scale&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:100,&quot;sizes&quot;:[]},&quot;_mask_size_scale_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_mask_size_scale_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_mask_position&quot;:&quot;center center&quot;,&quot;_mask_position_tablet&quot;:&quot;&quot;,&quot;_mask_position_mobile&quot;:&quot;&quot;,&quot;_mask_position_x&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_mask_position_x_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_mask_position_x_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_mask_position_y&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_mask_position_y_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_mask_position_y_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_mask_repeat&quot;:&quot;no-repeat&quot;,&quot;_mask_repeat_tablet&quot;:&quot;&quot;,&quot;_mask_repeat_mobile&quot;:&quot;&quot;,&quot;hide_desktop&quot;:&quot;&quot;,&quot;hide_tablet&quot;:&quot;&quot;,&quot;hide_mobile&quot;:&quot;&quot;,&quot;_attributes&quot;:&quot;&quot;,&quot;custom_css&quot;:&quot;&quot;},&quot;defaultEditSettings&quot;:{&quot;defaultEditRoute&quot;:&quot;content&quot;},&quot;elements&quot;:[],&quot;widgetType&quot;:&quot;elementor-syntax-highlighter&quot;,&quot;editSettings&quot;:{&quot;defaultEditRoute&quot;:&quot;content&quot;,&quot;panel&quot;:{&quot;activeTab&quot;:&quot;content&quot;,&quot;activeSection&quot;:&quot;content_section&quot;}},&quot;htmlCache&quot;:&quot;\\t\\t&lt;div class=\\&quot;elementor-widget-container\\&quot;&gt;\\n\\t\\t\\t&lt;pre&gt;&lt;code class=&#039;language-python&#039;&gt;```sql\\n CREATE SCHEMA hive.logistic WITH (location = &#039;gs:\/\/starburst-bluetab-test\/logistic&#039;);\\n\\nCREATE VIEW &amp;quot;hive&amp;quot;.&amp;quot;logistic&amp;quot;.&amp;quot;shipping_priority&amp;quot; SECURITY DEFINER AS\\nSELECT\\n  l.orderkey\\n, SUM((l.extendedprice * (1 - l.discount))) revenue\\n, o.orderdate\\n, o.shippriority\\nFROM\\n  tpch.tiny.customer c\\n, tpch.tiny.orders o\\n, tpch.tiny.lineitem l\\nWHERE ((c.mktsegment = &#039;BUILDING&#039;) AND (c.custkey = o.custkey) AND (l.orderkey = o.orderkey))\\nGROUP BY l.orderkey, o.orderdate, o.shippriority\\nORDER BY revenue DESC, o.orderdate ASC;\\n\\n\\nCREATE VIEW &amp;quot;hive&amp;quot;.&amp;quot;logistic&amp;quot;.&amp;quot;minimum_cost_supplier&amp;quot; SECURITY DEFINER AS\\nSELECT\\n  s.acctbal\\n, s.name SupplierName\\n, n.name Nation\\n, p.partkey\\n, p.mfgr\\n, s.address\\n, s.phone\\n, s.comment\\nFROM\\n  tpch.tiny.part p\\n, tpch.tiny.supplier s\\n, tpch.tiny.partsupp ps\\n, tpch.tiny.nation n\\n, tpch.tiny.region r\\nWHERE ((p.partkey = ps.partkey) AND (s.suppkey = ps.suppkey) AND (p.size = 15) AND (p.type LIKE &#039;%BRASS&#039;) AND (s.nationkey = n.nationkey) AND (n.regionkey = r.regionkey) AND (r.name = &#039;EUROPE&#039;) AND (ps.supplycost = (SELECT MIN(ps.supplycost)\\nFROM\\n  tpch.tiny.partsupp ps\\n, tpch.tiny.supplier s\\n, tpch.tiny.nation n\\n, tpch.tiny.region r\\nWHERE ((p.partkey = ps.partkey) AND (s.suppkey = ps.suppkey) AND (s.nationkey = n.nationkey) AND (n.regionkey = r.regionkey) AND (r.name = &#039;EUROPE&#039;))\\n)))\\nORDER BY s.acctbal DESC, n.name ASC, s.name ASC, p.partkey ASC;\\n\\n\\n\\nselect\\n  cst.name as CustomerName,\\n  cst.address,\\n  cst.phone,\\n  cst.nationkey,\\n  cst.acctbal as BookedOrders,\\n  cst.mktsegment,\\n  nat.name as Nation,\\n  reg.name as Region\\nfrom tpch.sf1.customer as cst\\njoin tpch.sf1.nation as nat on nat.nationkey = cst.nationkey\\njoin tpch.sf1.region as reg on reg.regionkey = nat.regionkey\\nwhere reg.regionkey = 1;\\n\\nselect\\n  nat.name as Nation,\\n  avg(cst.acctbal) as average_booking\\nfrom tpch.sf100.customer as cst\\njoin tpch.sf100.nation as nat on nat.nationkey = cst.nationkey\\njoin tpch.sf100.region as reg on reg.regionkey = nat.regionkey\\nwhere reg.regionkey = 1\\ngroup by nat.name;\\n```\\n &lt;\/code&gt;&lt;\/pre&gt;&lt;script&gt;\\nif (!document.getElementById(&#039;syntaxed-prism&#039;)) {\\n\\tvar my_awesome_script = document.createElement(&#039;script&#039;);\\n\\tmy_awesome_script.setAttribute(&#039;src&#039;,&#039;https:\/\/bluetab.net\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js&#039;);\\n\\tmy_awesome_script.setAttribute(&#039;id&#039;,&#039;syntaxed-prism&#039;);\\n\\tdocument.body.appendChild(my_awesome_script);\\n} else {\\n\\twindow.Prism &amp;&amp; Prism.highlightAll();\\n}\\n&lt;\/script&gt;\\t\\t&lt;\/div&gt;\\n\\t\\t&quot;}]} <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4965c62 elementor-widget elementor-widget-text-editor\" data-id=\"4965c62\" data-element_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 esta prueba lo m\u00e1s relevante es que vamos a escribir los datos de la tablas customer(15000000 rows), orders(150000000 rows), supplier(1000000 rows), nation(25 rows) y region(5 rows) en nuestro bucket de GCS.<\/span><\/p><p><span style=\"font-weight: 400;\">Como comentamos anteriormente, Starburst no solo es una herramienta que te permite lanzar consultas para analizar datos, sino que tambi\u00e9n te puede ayudar en las migraciones de datos de tu compa\u00f1\u00eda, volcando la informaci\u00f3n de tu base de datos a tu plataforma de la nube. Una cosa muy importante a tener en cuenta es que Starburst te permite trabajar con distintos tipos de fichero, pudiendo escribir tus tablas finales en ORC, Parquet o formatos como Delta o Hudi d\u00e1ndote una libertad muy amplia en las migraciones al cloud.<\/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-c8e2549 elementor-widget elementor-widget-image\" data-id=\"c8e2549\" data-element_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=\"1024\" height=\"321\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image10-1024x321.png\" class=\"attachment-large size-large wp-image-15276 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image10-1024x321.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image10-300x94.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image10-768x241.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image10-1536x482.png 1536w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image10.png 1898w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/321;\" \/>\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-c63f080 elementor-widget elementor-widget-text-editor\" data-id=\"c63f080\" data-element_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 \u00faltima prueba para ver que todo est\u00e1 funcionando correctamente, vamos a lanzar una consulta para federar distintos datos de diversas fuentes. En nuestro caso, federaremos datos de la anterior tabla que hemos creado en Google Cloud Storage llamada <\/span><b>customer <\/b><span style=\"font-weight: 400;\">con una tabla llamada <\/span><b>nation,<\/b><span style=\"font-weight: 400;\"> que nos crearemos en el PostgreSQL que hemos configurado en nuestro despliegue, y la tabla <\/span><b>region<\/b><span style=\"font-weight: 400;\"> que est\u00e1 en el esquema tcph. Esta consulta la podemos encontrar en el archivo `federate.sql`:<\/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-fd25c6c elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"fd25c6c\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>create schema postgres.logistic;\ncreate table postgres.logistic.nation as select * from tpch.sf1.nation;\n\nselect\n  cst.name as CustomerName,\n  cst.address,\n  cst.phone,\n  cst.nationkey,\n  cst.acctbal as BookedOrders,\n  cst.mktsegment,\n  nat.name as Nation,\n  reg.name as Region\nfrom hive.datalake.customer as cst\njoin postgres.logistic.nation as nat on nat.nationkey = cst.nationkey\njoin tpch.sf1.region as reg on reg.regionkey = nat.regionkey\nwhere reg.regionkey = 1;\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2f07ce2 elementor-widget elementor-widget-text-editor\" data-id=\"2f07ce2\" data-element_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;\">Este tipo de consultas es uno de los puntos fuertes que tiene Starburst, poder federar consultas que se encuentren en distintos silos de informaci\u00f3n sin la necesidad de migrar los datos y pudiendo atacar a distintos Cloud o a informaci\u00f3n que se tenga en el onpremise.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Una vez que hemos probado que tanto las consultas como la escritura en GCS funcionan correctamente, vamos a realizar unos test de performance para simular usuarios en paralelo y ver como autoescala nuestra plataforma. Vamos a configurar JMeter para estas pruebas. Para ello hemos tenido que configurar el conector jdbc de trino para que mande consultas a nuestro cluster.<\/span><\/p><p><span style=\"font-weight: 400;\">Vamos a simular 20 usuarios en paralelo, y cada uno lanzar\u00e1 una secuencia de 5 consultas. Esto significa que habr\u00e1 20 consultas en paralelo al mismo tiempo, simulando un escenario real, ya que generalmente no se lanzar\u00e1n consultas de todos los usuarios en el mismo momento. Las consultas que vamos a ejecutar son las siguiente:<\/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-c25d2fe elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"c25d2fe\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```sql\nselect\n  cst.name as CustomerName,\n  cst.address,\n  cst.phone,\n  cst.nationkey,\n  cst.acctbal as BookedOrders,\n  cst.mktsegment,\n  nat.name as Nation,\n  reg.name as Region\nfrom tpch.sf1.customer as cst\njoin tpch.sf1.nation as nat on nat.nationkey = cst.nationkey\njoin tpch.sf1.region as reg on reg.regionkey = nat.regionkey\nwhere reg.regionkey = 1;\n\nSELECT\n  s.acctbal\n, s.name SupplierName\n, n.name Nation\n, p.partkey\n, p.mfgr\n, s.address\n, s.phone\n, s.comment\nFROM\n  tpch.tiny.part p\n, tpch.tiny.supplier s\n, tpch.tiny.partsupp ps\n, tpch.tiny.nation n\n, tpch.tiny.region r\nWHERE ((p.partkey = ps.partkey) AND (s.suppkey = ps.suppkey) AND (p.size = 15) AND (p.type LIKE &#039;%BRASS&#039;) AND (s.nationkey = n.nationkey) AND (n.regionkey = r.regionkey) AND (r.name = &#039;EUROPE&#039;) AND (ps.supplycost = (SELECT MIN(ps.supplycost)\nFROM\n  tpch.tiny.partsupp ps\n, tpch.tiny.supplier s\n, tpch.tiny.nation n\n, tpch.tiny.region r\nWHERE ((p.partkey = ps.partkey) AND (s.suppkey = ps.suppkey) AND (s.nationkey = n.nationkey) AND (n.regionkey = r.regionkey) AND (r.name = &#039;EUROPE&#039;))\n)))\nORDER BY s.acctbal DESC, n.name ASC, s.name ASC, p.partkey ASC;\n\nSELECT\ncount(*)\nFROM\n  tpch.sf1.customer c\n, tpch.sf1.orders o\n, tpch.sf1.lineitem l\nWHERE ((c.mktsegment = &#039;BUILDING&#039;) AND (c.custkey = o.custkey) AND (l.orderkey = o.orderkey))\nGROUP BY l.orderkey, o.orderdate, o.shippriority\nORDER BY o.orderdate ASC;\n```\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.es\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3a66471 elementor-widget elementor-widget-image\" data-id=\"3a66471\" data-element_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=\"1024\" height=\"325\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image3-1024x325.png\" class=\"attachment-large size-large wp-image-15278 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image3-1024x325.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image3-300x95.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image3-768x244.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image3-1536x487.png 1536w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image3.png 1837w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/325;\" \/>\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-810a697 elementor-widget elementor-widget-text-editor\" data-id=\"810a697\" data-element_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;\">Si nos fijamos, en nuestro cluster de Kubernetes podemos ver que se est\u00e1n levantando m\u00e1s workers de Starburst por el momento de alta demanda en nuestra simulaci\u00f3n:<\/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-f7377b6 elementor-widget elementor-widget-image\" data-id=\"f7377b6\" data-element_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=\"1024\" height=\"143\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image7-1024x143.png\" class=\"attachment-large size-large wp-image-15280 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image7-1024x143.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image7-300x42.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image7-768x107.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image7.png 1271w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/143;\" \/>\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-b9a63c2 elementor-widget elementor-widget-image\" data-id=\"b9a63c2\" data-element_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=\"750\" height=\"191\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image5.png\" class=\"attachment-large size-large wp-image-15282 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image5.png 750w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image5-300x76.png 300w\" data-sizes=\"(max-width: 750px) 100vw, 750px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 750px; --smush-placeholder-aspect-ratio: 750\/191;\" \/>\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-a4016d3 elementor-widget elementor-widget-text-editor\" data-id=\"a4016d3\" data-element_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;\">Esto es una de las caracter\u00edsticas m\u00e1s c\u00f3modas e importantes que nos da Starburst, ya que hace que nuestra plataforma de anal\u00edtica de datos sea 100% el\u00e1stica y podamos ir adapt\u00e1ndonos a los picos de demanda que tengamos.<\/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-7b2b8ef elementor-widget elementor-widget-heading\" data-id=\"7b2b8ef\" data-element_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\">M\u00e9tricas<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e3d9fa4 elementor-widget elementor-widget-text-editor\" data-id=\"e3d9fa4\" data-element_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;\">Por \u00faltimo, Starburst nos proporciona una interfaz donde visualizar ciertas m\u00e9tricas del consumo de nuestro cluster, como puede ser la memoria, la cpu o las consultas realizadas en tiempo real en nuestro cluster.<\/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-a676b1f elementor-widget elementor-widget-image\" data-id=\"a676b1f\" data-element_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=\"1024\" height=\"412\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image9-1024x412.png\" class=\"attachment-large size-large wp-image-15284 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image9-1024x412.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image9-300x121.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image9-768x309.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image9-1536x618.png 1536w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image9.png 1842w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/412;\" \/>\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-93b2a96 elementor-widget elementor-widget-text-editor\" data-id=\"93b2a96\" data-element_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;\">Adem\u00e1s de estas m\u00e9tricas, hemos a\u00f1adido tambi\u00e9n a nuestra configuraci\u00f3n el despliegue de Prometheus y Grafana para integrarnos con las herramientas m\u00e1s comunes dentro de cualquier organizaci\u00f3n. Las m\u00e9tricas que hemos a\u00f1adido a Grafana son consumo de memoria de nuestro cluster de Starburst, consultas realizadas por los usuarios, consultas con errores, memoria total de nuestro cluster de Kubernetes y Workers activos. Una vez integradas dichas m\u00e9tricas, el dashboard que tendr\u00edamos ser\u00eda el siguiente:<\/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-853aab6 elementor-widget elementor-widget-image\" data-id=\"853aab6\" data-element_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=\"1024\" height=\"594\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image8-1024x594.png\" class=\"attachment-large size-large wp-image-15286 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image8-1024x594.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image8-300x174.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image8-768x446.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image8-1536x891.png 1536w, https:\/\/bluetab.org\/wp-content\/uploads\/2023\/05\/image8.png 1822w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/594;\" \/>\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-7611c7d elementor-widget elementor-widget-text-editor\" data-id=\"7611c7d\" data-element_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;\">Una vez integrado con Grafana, podr\u00edamos crearnos alertas de env\u00edo de mensajes por si hay alg\u00fan problema en nuestro cluster de Starburst, y as\u00ed tener todo el flujo de operaciones cubierto para evitarnos dolores de cabeza si hubiera alg\u00fan tipo de incidencia o indisponibilidad.<\/span><\/p><p><span style=\"font-weight: 400;\">El dashboard est\u00e1 publicado en Grafana<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">14<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\"> para que cualquier persona pueda hacer uso de \u00e9l.<\/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-adc35da elementor-widget elementor-widget-heading\" data-id=\"adc35da\" data-element_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\">Conclusiones<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d2d5707 elementor-widget elementor-widget-text-editor\" data-id=\"d2d5707\" data-element_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;\">Desde hace ya unos a\u00f1os, las grandes corporaciones se enfrentan a un desaf\u00edo com\u00fan cuando intentan compartir y analizar informaci\u00f3n entre departamentos ya que cada departamento almacena y gestiona sus datos de manera aislada. Estos silos dificultan el acceso y la integraci\u00f3n de datos, lo que impide una visi\u00f3n completa y unificada de la informaci\u00f3n empresarial. La falta de interoperabilidad entre los silos de datos obstaculiza la toma de decisiones informada, ralentiza los procesos anal\u00edticos y limita la capacidad de las organizaciones para obtener una ventaja competitiva. Si tu organizaci\u00f3n se encuentra en una situaci\u00f3n similar, Starburst es tu herramienta.<\/span><\/p><p><span style=\"font-weight: 400;\">Starburst te facilita el acceso y an\u00e1lisis a todos estos silos de informaci\u00f3n y da la capacidad de federar datos de diversas fuentes y ubicaciones, ya sea datos en el Cloud o en tu datacenter onpremise. Permite realizar consultas en tiempo real sin necesidad de mover o transformar los datos previamente. Esto agiliza el proceso anal\u00edtico y brinda a las organizaciones una visi\u00f3n 360 de sus datos. Adem\u00e1s, no solo te ayuda a la hora de consultar datos de distintas fuentes, sino que tambi\u00e9n te puede ayudar en tus migraciones al Cloud, ya que te permite consultar cualquier origen y volcar dicha informaci\u00f3n en un almacenamiento como S3 o GCS en formato de ficheros abierto, como puede ser Parquet.<\/span><\/p><p><span style=\"font-weight: 400;\">Una de las principales ventajas de Starburst, es que te permite desplegar la infraestructura en Kubernetes para aprovechar as\u00ed todo su potencial. Kubernetes te da la capacidad de adaptarse din\u00e1micamente a la carga de trabajo. Con esta funci\u00f3n, los cl\u00fasteres de Starburst pueden aumentar o disminuir autom\u00e1ticamente el n\u00famero de Workers seg\u00fan la demanda. Esto permite optimizar el uso de recursos y garantizar un rendimiento \u00f3ptimo, ya que los pods adicionales se crean cuando la carga aumenta y se eliminan cuando disminuye. Esto dentro de cualquier organizaci\u00f3n es un punto muy importante, ya que mejora la eficiencia operativa al minimizar el tiempo de inactividad y los costos innecesarios, al tiempo que asegura una disponibilidad constante y una respuesta \u00e1gil a los picos de trabajo. Adem\u00e1s, una cosa a tener en cuenta es que puedes realizar la instalaci\u00f3n de Starburst tanto en cualquiera de los Cloud, como en onpremise.<\/span><\/p><p><span style=\"font-weight: 400;\">Adem\u00e1s, tambi\u00e9n te permite tener un roleado y gobierno de los usuarios dentro de tu plataforma, dando una granularidad a nivel de acceso a los datos a cada usuario, permiti\u00e9ndote crear roles para ciertos esquemas, tablas o hasta columnas y filas dentro de una tabla.<\/span><\/p><p><span style=\"font-weight: 400;\">Los que trabajamos con datos sabemos de la dificultad de trabajar con multitud de fuentes de datos, entornos diversos, herramientas de todo tipo, etc. Uno de los puntos m\u00e1s diferenciales de Starburst es tener la capacidad de consultar los datos desde su almacenamiento, eliminando duplicidad de informaci\u00f3n, pudiendo as\u00ed tener una mejor eficiencia en cuanto al storage, y facilitando tambi\u00e9n el gobierno de estos datos.<\/span><\/p><p><span style=\"font-weight: 400;\">En conclusi\u00f3n, Starburst es una herramienta a tener en cuenta si quieres llevar a tu organizaci\u00f3n al siguiente nivel en el mundo de los datos, o si te est\u00e1s planteando una estrategia de datos con una visi\u00f3n y una filosof\u00eda m\u00e1s orientada al data mesh.<\/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\" 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-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;\">[1] Qu\u00e9 es Starburst.[<\/span><a href=\"https:\/\/www.starburst.io\/\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">[2] Qu\u00e9 es Trino. [<\/span><a href=\"https:\/\/trino.io\/\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[3] Principios del Data Mesh. [<\/span><a href=\"https:\/\/martinfowler.com\/articles\/data-mesh-principles.html\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[4] Introducci\u00f3n\u00a0 a DBT. [<\/span><a href=\"https:\/\/www.getdbt.com\/\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[5] Introducci\u00f3n a Jupyter Notebook. [<\/span><a href=\"https:\/\/jupyter.org\/\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[6] Introducci\u00f3n a Power BI. [<\/span><a href=\"https:\/\/powerbi.microsoft.com\/en-au\/\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[7] Qu\u00e9 es Prometheus.. [<\/span><a href=\"https:\/\/prometheus.io\/\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[8] Qu\u00e9 es Grafana. [<\/span><a href=\"https:\/\/grafana.com\/\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[9] Qu\u00e9 es Terraform. [<\/span><a href=\"https:\/\/developer.hashicorp.com\/terraform\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[10] Qu\u00e9 es Jmeter.[<\/span><a href=\"https:\/\/jmeter.apache.org\/\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[11] M\u00f3dulo de GKE.[<\/span><a href=\"https:\/\/github.com\/lucasberlang\/gcp-gke\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[12] M\u00f3dulo de VPC.[<\/span><a href=\"https:\/\/github.com\/lucasberlang\/gcp-network\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[13] Qu\u00e9 es TPCH.[<\/span><a href=\"https:\/\/www.tpc.org\/tpch\/\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[14] Dashboard Grafana.[<\/span><a href=\"https:\/\/grafana.com\/grafana\/dashboards\/18767-starburst-k8s\/\"><span style=\"font-weight: 400;\">link<\/span><\/a><span style=\"font-weight: 400;\">]<\/span><\/p><p><span style=\"font-weight: 400;\">[15] Repositorio de Github con el despliegue.[<\/span><a href=\"https:\/\/github.com\/lucasberlang\/starburst-deploy-gcp\"><span style=\"font-weight: 400;\">link<\/span><\/a><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-65c3381 elementor-widget elementor-widget-spacer\" data-id=\"65c3381\" data-element_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\">\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-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 headings were found on this page.&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\" 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\">\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\">\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\">\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-7c5b092 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"7c5b092\" data-element_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\/lucascalvoberlanga\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2021\/09\/lucas-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-12198 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2021\/09\/lucas-150x150.png 150w, https:\/\/bluetab.es\/wp-content\/uploads\/2021\/09\/lucas-300x300.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2021\/09\/lucas-768x768.png 768w, https:\/\/bluetab.es\/wp-content\/uploads\/2021\/09\/lucas-75x75.png 75w, https:\/\/bluetab.es\/wp-content\/uploads\/2021\/09\/lucas.png 888w\" 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\/lucascalvoberlanga\/\" target=\"_blank\">Lucas Calvo<\/a><\/h4><p class=\"elementor-image-box-description\">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-50 elementor-inner-column elementor-element elementor-element-816937f\" data-id=\"816937f\" data-element_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-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=\"Share on 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=\"Share on 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-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\">\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-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-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-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\">\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\">\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-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\">\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\">\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-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:\/\/bluetab.org\/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\">\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-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:\/\/bluetab.org\/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\">\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-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:\/\/bluetab.org\/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\">\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-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\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>Lucas Calvo Cloud Engineer Introducci\u00f3n En este nuevo art\u00edculo vamos a hablar de uno de nuestros partners: Starburst[1]. Starburst es la versi\u00f3n empresarial de Trino[2] realizando nuevas integraciones, mejoras de rendimiento, una capa de seguridad y restando complejidad a la gesti\u00f3n con una interfaz de usuario muy f\u00e1cil de usar y que te permite realizar [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":17828,"comment_status":"open","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":[19,668,633],"tags":[],"class_list":{"0":"post-16030","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-blog","8":"category-practices-en","9":"category-tech-en","10":"entry"},"uagb_featured_image_src":{"full":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9.png",1200,600,false],"thumbnail":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9-150x150.png",150,150,true],"medium":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9-300x150.png",300,150,true],"medium_large":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9-768x384.png",768,384,true],"large":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9-1024x512.png",1024,512,true],"1536x1536":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9.png",1200,600,false],"2048x2048":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9.png",1200,600,false],"sidebar-featured":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9-75x75.png",75,75,true],"genesis-singular-images":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/05\/9-702x526.png",702,526,true]},"uagb_author_info":{"display_name":"Bluetab","author_link":"https:\/\/bluetab.es\/en\/author\/user\/"},"uagb_comment_info":0,"uagb_excerpt":"Lucas Calvo Cloud Engineer Introducci\u00f3n En este nuevo art\u00edculo vamos a hablar de uno de nuestros partners: Starburst[1]. Starburst es la versi\u00f3n empresarial de Trino[2] realizando nuevas integraciones, mejoras de rendimiento, una capa de seguridad y restando complejidad a la gesti\u00f3n con una interfaz de usuario muy f\u00e1cil de usar y que te permite realizar&hellip;","_links":{"self":[{"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/posts\/16030","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/comments?post=16030"}],"version-history":[{"count":1,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/posts\/16030\/revisions"}],"predecessor-version":[{"id":16031,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/posts\/16030\/revisions\/16031"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/media\/17828"}],"wp:attachment":[{"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/media?parent=16030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/categories?post=16030"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/tags?post=16030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}