{"id":14441,"date":"2022-10-03T17:57:53","date_gmt":"2022-10-03T17:57:53","guid":{"rendered":"https:\/\/beta.bluetab.net\/guia-avanzada-sobre-almacenamiento-en-snowflake\/"},"modified":"2023-10-17T12:54:29","modified_gmt":"2023-10-17T12:54:29","slug":"snowflake-advanced-storage-guide","status":"publish","type":"post","link":"https:\/\/bluetab.es\/en\/snowflake-advanced-storage-guide\/","title":{"rendered":"Snowflake Advanced Storage Guide"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"14441\" class=\"elementor elementor-14441\" 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\">Gu\u00eda avanzada sobre almacenamiento en Snowflake<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7843b8f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7843b8f\" data-element_type=\"section\">\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-1a4ee60\" data-id=\"1a4ee60\" 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-7f3f444 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"7f3f444\" 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\/roberto-garc%C3%ADa-parra-1b914128\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/roberto-garc%C3%ADa-parra-1b914128\/\" target=\"_blank\">Roberto Garc\u00eda Parra<\/a><\/h4><p class=\"elementor-image-box-description\">Technical Delivery Manager <\/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-ed6cc51\" data-id=\"ed6cc51\" 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-173edbe 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=\"173edbe\" 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\/03\/8-1024x512.png\" class=\"attachment-large size-large wp-image-17834\" alt=\"\" srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2023\/03\/8-1024x512.png 1024w, https:\/\/bluetab.es\/wp-content\/uploads\/2023\/03\/8-300x150.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2023\/03\/8-768x384.png 768w, https:\/\/bluetab.es\/wp-content\/uploads\/2023\/03\/8.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 a Snowflake<\/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;\">Snowflake es una plataforma avanzada de datos que se consume en modalidad SaaS 100% en cloud. El principal factor diferenciador de Snowflake es que <\/span><b>proporciona capacidades avanzadas para todas las necesidades de datos de las compa\u00f1\u00edas<\/b><span style=\"font-weight: 400;\"> (Almacenamiento, procesamiento, explotaci\u00f3n y soluciones de anal\u00edtica avanzada) de una manera <\/span><b>m\u00e1s flexible y sencilla<\/b><span style=\"font-weight: 400;\"> que las soluciones de Datawarehouse tradicionales.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">El motor de queries y procesamiento de Snowflake est\u00e1 <\/span><b>basado 100% en SQL<\/b><span style=\"font-weight: 400;\"> para facilitar el acceso a la mayor\u00eda de los profesionales de datos, aunque Snowflake est\u00e1 haciendo esfuerzos por ampliar las posibilidades de desarrollo (Por ejemplo, recientemente ha sacado Snowpark, una API que permite a los desarrolladores que est\u00e9n habituados a trabajar con Spark tanto en Scala c\u00f3mo en Java y recientemente en Python, a poder migrar sus c\u00f3digos de forma sencilla a Snowflake). Adem\u00e1s, dispone de conectores nativos con una serie de partners que abarca todas las fases de la ingenier\u00eda de datos, c\u00f3mo por ejemplo partners de integraci\u00f3n de datos tan importantes c\u00f3mo Matillion, Informatica, DBT o DataStage; de Business Intelligence c\u00f3mo Domo, Cognos o Looker; o de Machine Learning c\u00f3mo Alteryx, Dataiku o AWS Sagemaker.<\/span><\/p><p><span style=\"font-weight: 400;\">La otra ventaja diferenciadora de Snowflake es que tiene unas c<\/span><b>apacidades de optimizaci\u00f3n que no requieren apenas de mantenimiento<\/b><span style=\"font-weight: 400;\"> y cubren un abanico muy amplio de casos de uso, entre las que se podr\u00edan destacar <\/span><b>la clusterizaci\u00f3n autom\u00e1tica, el cacheo y el search optimization service<\/b><span style=\"font-weight: 400;\">, elementos en los que ahondaremos en detalle en futuros art\u00edculos, ya que en \u00e9ste nos vamos a centrar sobre todo en las capacidades de almacenamiento.<\/span><\/p><p><span style=\"font-weight: 400;\">Principales caracter\u00edsticas diferenciadoras de Snowflake:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Pone al alcance de los usuarios <\/span><b>funcionalidades avanzadas que se gestionan de forma sencilla<\/b><span style=\"font-weight: 400;\">, abstrayendo a los usuarios de lo que se maneja por debajo.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Multi-cloud: <\/span><b>Se puede desplegar en cualquiera de los tres clouds<\/b><span style=\"font-weight: 400;\"> m\u00e1s importantes (Amazon, Azure y Google) e incluso permite implementar una <\/span><b>estrategia multi-cloud <\/b><span style=\"font-weight: 400;\">d\u00f3nde la mayor\u00eda de la administraci\u00f3n y operaci\u00f3n corre por cuenta de Snowflake.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>No hay que mantener ni hardware ni software<\/b><span style=\"font-weight: 400;\">. Todo gestionado por Snowflake y sin p\u00e9rdida de servicio.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Gesti\u00f3n sencilla de las unidades de procesamiento<\/b><span style=\"font-weight: 400;\"> (Llamadas Virtual Warehouses). Es muy sencillo subir o bajar la talla del procesamiento (a golpe de click o una sencilla sentencia SQL), y los cluster se pueden configurar para que se bajen autom\u00e1ticamente tras un tiempo de inactividad, y vuelvan a levantarse de forma r\u00e1pida cu\u00e1ndo entre una nueva petici\u00f3n (en menos de un segundo la mayor de las veces). Dado que una de las variables que marcan el coste es el tiempo de actividad de un warehouse, esto permite eficientar los costes, sin tener que preocuparnos de estar bajando-levantando instancias en funci\u00f3n del uso de la plataforma.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">La arquitectura de Snowflake est\u00e1 basada en tres principales capas:<\/span><\/p><ol><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">La <\/span><b>capa de almacenamiento<\/b><span style=\"font-weight: 400;\">, que es en la que nos centraremos en este art\u00edculo. Esta capa basada en microparticiones es la base de algunas de las funcionalidades m\u00e1s disruptivas de Snowflake c\u00f3mo por ejemplo el Zero-copy cloning o el Time-to-Travel, que veremos tambi\u00e9n en futuros art\u00edculos.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Capa de procesamiento<\/b><span style=\"font-weight: 400;\">.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Cloud Services<\/b><span style=\"font-weight: 400;\">, que es la capa con la que se interact\u00faa con Snowflake y es el cerebro que gestiona y coordina el resto de capas y componentes.<\/span><\/li><\/ol>\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-6ce4b0e elementor-widget elementor-widget-image\" data-id=\"6ce4b0e\" 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=\"858\" height=\"485\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake1.png\" class=\"attachment-large size-large wp-image-14305 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake1.png 858w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake1-300x170.png 300w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake1-768x434.png 768w\" data-sizes=\"(max-width: 858px) 100vw, 858px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 858px; --smush-placeholder-aspect-ratio: 858\/485;\" \/>\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-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\">Objetivo del art\u00edculo\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cffc795 elementor-widget elementor-widget-text-editor\" data-id=\"cffc795\" data-element_type=\"widget\" data-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;\">Vamos a entender en profundidad c\u00f3mo funciona Snowflake en la capa de almacenamiento. A grandes l\u00edneas, veremos:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">C\u00f3mo se almacenan, distribuyen y comprimen los datos.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">La importancia de los metadatos a la hora de escanear de forma eficiente el almacenamiento cu\u00e1ndo se hace tanto una consulta, c\u00f3mo una operaci\u00f3n DML de inserci\u00f3n, actualizaci\u00f3n o borrado.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">C\u00f3mo es este proceso de b\u00fasqueda en los datos, para reducir al m\u00e1ximo el n\u00famero de bytes a escanear (y por tanto, la reducci\u00f3n en los tiempos de consulta).<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Esto ser\u00e1 la base para entender varias de las funcionalidades diferenciales que ofrece Snowflake:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">A nivel rendimiento: Clustering, caching, search optimization service y query acceleration service (Recientemente liberada). Estos servicios-funcionalidades ayudan a optimizar diferentes casos de uso d\u00f3nde lo proporcionado por el almacenamiento no sea suficiente para obtener el rendimiento deseado.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Data Sharing, sin necesidad de replicar los datos f\u00edsicamente.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Resiliencia: Zero-copy cloning, Time Travel y Fail Safe.<\/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-fa9fd2d elementor-widget elementor-widget-heading\" data-id=\"fa9fd2d\" data-element_type=\"widget\" id=\"escalabilidad\" 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 al almacenamiento<\/h2>\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>El almacenamiento en Snowflake se basa en la generaci\u00f3n de ficheros comprimidos con un tama\u00f1o m\u00e1ximo aproximado de 16MB y que se almacenan en un repositorio orientado a objetos tipo el S3 de AWS. Estos ficheros son inmutables, y cualquier operaci\u00f3n de inserci\u00f3n-borrado-actualizaci\u00f3n siempre se hace generando un nuevo fichero de datos y actualizando los metadatos para saber cu\u00e1les son los ficheros que est\u00e1n activos en cada momento, adem\u00e1s de otros metadatos que veremos m\u00e1s adelante en profundidad para eficientar la cantidad de bytes escaneados a la hora de ejecutar una query.<\/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-953e3be elementor-widget elementor-widget-heading\" data-id=\"953e3be\" data-element_type=\"widget\" id=\"objetivosal\" 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\">Objetivos del almacenamiento Snowflake<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7194037 elementor-widget elementor-widget-text-editor\" data-id=\"7194037\" 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 forma en la que almacena los datos Snowflake est\u00e1 <\/span><b>enfocada a dos objetivos principales<\/b><span style=\"font-weight: 400;\">:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Optimizar el rendimiento de las consultas<\/b><span style=\"font-weight: 400;\">, con una combinaci\u00f3n de organizaci\u00f3n autom\u00e1tica de los datos, almacenamiento columnar y el mantenimiento de una metadata.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Posibilitar varias de las caracter\u00edsticas diferenciales<\/b><span style=\"font-weight: 400;\"> que tiene Snowflake frente a otros Datawarehouse tradicionales, c\u00f3mo por ejemplo:<\/span><ul><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Zero-copy cloning.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Time Travel.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Data Sharing sin necesidad de replicar el dato f\u00edsicamente.<\/span><\/li><\/ul><\/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-7f116da elementor-widget elementor-widget-heading\" data-id=\"7f116da\" data-element_type=\"widget\" id=\"principalal\" 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\">Principales caracter\u00edsticas del almacenamiento en Snowflake<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3fd4aa7 elementor-widget elementor-widget-text-editor\" data-id=\"3fd4aa7\" data-element_type=\"widget\" data-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>Compresi\u00f3n columnar:<\/b><span style=\"font-weight: 400;\"> Snowflake <\/span><b>analiza y comprime autom\u00e1ticamente los datos<\/b><span style=\"font-weight: 400;\"> durante la carga de la tabla, <\/span><b>agrup\u00e1ndolos por columnas<\/b><span style=\"font-weight: 400;\">. En funci\u00f3n del tipo de datos de cada una de las columnas, selecciona el esquema de compresi\u00f3n m\u00e1s \u00f3ptimo para cada una de ellas: Cada columna puede tener su propio esquema de compresi\u00f3n y aumentar-reducir de forma independiente. Gracias a esta eficiencia en la compresi\u00f3n, se obtiene una mejora significativa en los rendimientos al reducir la cantidad de datos a escanear, adem\u00e1s de un ahorro en costes de almacenamiento, ya que Snowflake factura por la cantidad almacenada ya comprimida.<\/span><\/p><p><b>Microparticiones: <\/b><span style=\"font-weight: 400;\">Son unidades de almacenamiento contiguo en las que Snowflake va almacenando los datos en el orden de la ingesta. A diferencia de otros motores de bases de datos, <\/span><b>en Snowflake no es necesario declarar una forma de particionar los datos<\/b><span style=\"font-weight: 400;\"> por una o m\u00e1s columnas, sino que \u00e9l ya lo hace de manera autom\u00e1tica de la siguiente forma: Por un lado, va insertando los datos seg\u00fan le llegan en bloques de almacenamiento que oscilan entre los 50 y los 500MB antes de compresi\u00f3n (16MB aprox comprimidos). Cu\u00e1ndo se llena un bloque, pasa al siguiente, y as\u00ed sucesivamente hasta que todos los datos son insertados. Snowflake tambi\u00e9n <\/span><b>encripta tanto en tr\u00e1nsito c\u00f3mo en destino todos los datos.<\/b><\/p><p><b>Cada una de estas particiones son inmutables<\/b><span style=\"font-weight: 400;\">: en el caso en el que haya una actualizaci\u00f3n en alguna de las microparticiones, lo que se hace es crear una nueva versi\u00f3n de la misma, y se mantienen las versiones antiguas por el tiempo parametrizado en el time travel (propiedad DATA_RETENTION_TIME_IN_DAYS en la tabla Snowflake). La inmutabilidad permite cosas c\u00f3mo por ejemplo poder acceder a versiones de los datos en diferentes momentos del tiempo o hacer clonados de tablas sin tener que replicar los 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-0ec9bd2 elementor-widget elementor-widget-heading\" data-id=\"0ec9bd2\" data-element_type=\"widget\" id=\"metacatos\" 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\">Metadatos en las microparticiones Snowflake<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fb46eef elementor-widget elementor-widget-text-editor\" data-id=\"fb46eef\" data-element_type=\"widget\" data-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 cada micropartici\u00f3n, Snowflake genera una metadata con la siguiente informaci\u00f3n:<\/span><\/p><p><b>A nivel columna<\/b><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">El rango de valores para cada una de las columnas de la micropartici\u00f3n.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Valores m\u00ednimo y m\u00e1ximo.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Conteo de valores diferentes.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Conteo de nulos.<\/span><\/li><\/ul><p><b>A nivel tabla<\/b><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Tama\u00f1o de tabla (en bytes).<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Referencias de archivos y extensiones de tabla.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Conteo de filas.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Otras propiedades adicionales usadas tanto para la optimizaci\u00f3n c\u00f3mo para el procesamiento de las queries.<\/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-c52d16d elementor-widget elementor-widget-heading\" data-id=\"c52d16d\" data-element_type=\"widget\" id=\"principalmicro\" 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\">Principales caracter\u00edsticas del microparticionamiento de Snowflake<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-94c83b5 elementor-widget elementor-widget-text-editor\" data-id=\"94c83b5\" data-element_type=\"widget\" data-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\"><b>Autom\u00e1tico y transparente para el usuario: <\/b><span style=\"font-weight: 400;\">A diferencia de otros sistemas tradicionales, no hay que declarar previamente un campo de partici\u00f3n, ni hacer un mantenimiento posterior.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Asegura la eficiencia en el podado<\/b><span style=\"font-weight: 400;\"> tanto <\/span><b>en las consultas<\/b><span style=\"font-weight: 400;\">, c\u00f3mo <\/span><b>en las operaciones <\/b><span style=\"font-weight: 400;\">DML.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Todas las particiones tienen un tama\u00f1o similar:<\/b><span style=\"font-weight: 400;\"> En otros sistemas, el tama\u00f1o de las particiones depende del campo elegido, y puede haber un claro desbalance de particiones en funci\u00f3n del n\u00famero de ocurrencias que tenga cada valor del campo particionado (Hot partition Keys). El trade-off para tener estos tama\u00f1os similares es que pueden solaparse valores: Un determinado valor de columna (por ejemplo una fecha) puede estar en m\u00e1s de una micropartici\u00f3n. Cu\u00e1nto mayor es el solapamiento en las particiones de un valor, menor ser\u00e1 el podado, ya que habr\u00e1 que recorrer m\u00e1s particiones para filtrar los valores correctos en una b\u00fasqueda.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Seg\u00fan Snowflake, <\/span><b>este m\u00e9todo de particionado autom\u00e1tico ser\u00eda suficiente para tablas con tama\u00f1os de hasta 1TB<\/b><span style=\"font-weight: 400;\"> sin tener que plantearse otras opciones c\u00f3mo por ejemplo el clusterizado.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>En campos secuenciales<\/b><span style=\"font-weight: 400;\"> c\u00f3mo fechas o num\u00e9ricos es d\u00f3nde m\u00e1s vemos que s<\/span><b>e puede obtener un beneficio en esta forma de particionar<\/b><span style=\"font-weight: 400;\">, ya que si la inserci\u00f3n de los datos est\u00e1 ordenada por dichos campos, el podado (pruning) ser\u00e1 altamente eficiente, y en consecuencia la cantidad de datos a escanear y la rapidez en la resoluci\u00f3n de las queries.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">El almacenamiento columnar permite que Snowflake <\/span><b>solamente escanee aquellas columnas inclu\u00eddas en la consulta<\/b><span style=\"font-weight: 400;\">. De ah\u00ed que sea importante incluir solamente las columnas que realmente necesitemos y evitar queries del tipo SELECT * si no es necesario consultar todas las columnas.<\/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-04e0a80 elementor-widget elementor-widget-heading\" data-id=\"04e0a80\" data-element_type=\"widget\" id=\"entendiendo\" 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\">Entendiendo la organizaci\u00f3n de datos en Snowflake<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bac2fec elementor-widget elementor-widget-text-editor\" data-id=\"bac2fec\" 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;\">Partiendo de los siguientes datos de ejemplo:<\/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-9151418 elementor-widget elementor-widget-image\" data-id=\"9151418\" 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<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"700\" height=\"336\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/snowflake2.jpg\" class=\"attachment-large size-large wp-image-14314 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/snowflake2.jpg 700w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/snowflake2-300x144.jpg 300w\" data-sizes=\"(max-width: 700px) 100vw, 700px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 700px; --smush-placeholder-aspect-ratio: 700\/336;\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\"><\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d74d722 elementor-widget elementor-widget-text-editor\" data-id=\"d74d722\" 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>Ordenados por fecha. Al insertarlos en Snowflake, para ilustrar este ejemplo se supone que se generan dos microparticiones, que se van llenando en el orden en el que entran los datos:<\/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-0a29dcc elementor-widget elementor-widget-image\" data-id=\"0a29dcc\" 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<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"900\" height=\"497\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/snowflake3.jpg\" class=\"attachment-large size-large wp-image-14317 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/snowflake3.jpg 900w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/snowflake3-300x166.jpg 300w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/snowflake3-768x424.jpg 768w\" data-sizes=\"(max-width: 900px) 100vw, 900px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 900px; --smush-placeholder-aspect-ratio: 900\/497;\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\"><\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-97349e3 elementor-widget elementor-widget-text-editor\" data-id=\"97349e3\" 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>Si por ejemplo, hacemos la siguiente query:<\/p><p><em>Select Fecha, sum(importe)<\/em><\/p><p><em>From ventas<\/em><\/p><p><em>Where fecha = \u201801\/01\/2022\u2019<\/em><\/p><p>Snowflake recorrer\u00eda los siguientes datos:<\/p><ul><li>Primero se podan las microparticiones que no est\u00e9n en el rango. En este caso, c\u00f3mo estamos buscando el 1 de Enero, ignorar\u00e1 la segunda micropartici\u00f3n.<\/li><li>Dentro de la primera micropartici\u00f3n, dado que en la query solamente se est\u00e1n seleccionando las columnas fecha e importe de venta, no recorre la parte de los datos del cliente. Esto es posible gracias al almacenamiento columnar.<\/li><\/ul><p>Si se buscan las ventas de un cliente espec\u00edfico:<\/p><p><em>Select sum(importe)<\/em><\/p><p><em>From ventas<\/em><\/p><p><em>Where cliente = \u2018C2\u2019<\/em><\/p><p>En este ejemplo, recorre las dos microparticiones, ya que C2 est\u00e1 dentro del rango de valores de ambas, aunque realmente C2 no est\u00e1 en la micropartici\u00f3n 1. Esto es lo que se comentaba en el apartado anterior de la posible dependencia que puede haber en la b\u00fasqueda de rangos en cada micropartici\u00f3n de c\u00f3mo est\u00e1n distribuidos los datos.<\/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-ce7de90 elementor-widget elementor-widget-heading\" data-id=\"ce7de90\" data-element_type=\"widget\" id=\"dml\" 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\">DML\u2019s en Snowflake<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b172ce elementor-widget elementor-widget-text-editor\" data-id=\"1b172ce\" 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 ver c\u00f3mo funcionan las principales operaciones de DML en Snowflake, hemos reproducido el siguiente experimento: Creamos una nueva tabla, partiendo de una tabla origen que tiene las ventas de varios d\u00edas de 60 call centers, seleccionando solamente los Call Center 1 y 20. Lo que haremos ser\u00e1 operaciones at\u00f3micas de <\/span><b>inserci\u00f3n, actualizaci\u00f3n y borrado<\/b><span style=\"font-weight: 400;\"> para ver c\u00f3mo se gestionan tanto los datos c\u00f3mo los metadatos.<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Inserci\u00f3n<\/b><span style=\"font-weight: 400;\">: Para comprobar c\u00f3mo funciona la inserci\u00f3n insertamos dos nuevos registros con Call Center que no existen: El 10 y el 11.<br \/><\/span>Los ficheros que componen las microparticiones son inmutables, por lo que Snowflake en la inserci\u00f3n puede ejecutar dos posibles acciones:<\/li><\/ul><ul><li style=\"list-style-type: none;\"><ul><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Crear un nuevo fichero con los registros existentes m\u00e1s el nuevo, y archivar el antiguo.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Crear una nueva partici\u00f3n para ese dato.<\/span><\/li><\/ul><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Actualizaci\u00f3n<\/b><span style=\"font-weight: 400;\">: Las acciones que realiza Snowflake para ejecutar una actualizaci\u00f3n son:<\/span><ul><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Identificar las microparticiones afectadas por la actualizaci\u00f3n.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Generar nuevos ficheros de micropartici\u00f3n que incluyan las modificaciones.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Archivar las versiones anteriores de los ficheros durante el tiempo marcado por el DATA_RETENTION_TIME_IN_DAYS.<\/span><\/li><\/ul><\/li><\/ul><p><span style=\"font-weight: 400;\">Para verificar esto, partiendo del ejemplo anterior hemos lanzado una consulta que actualice los call center 10 y 11 a 15 por ejemplo. Comprobamos que efectivamente Snowflake solamente recorre esa partici\u00f3n, y genera un nuevo fichero con los nuevos valores, archivando el anterior:<\/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-07d79af elementor-widget elementor-widget-image\" data-id=\"07d79af\" 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=\"424\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake5-1024x424.png\" class=\"attachment-large size-large wp-image-14319 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake5-1024x424.png 1024w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake5-300x124.png 300w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake5-768x318.png 768w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake5.png 1339w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/424;\" \/>\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-6fe8f8c elementor-widget elementor-widget-text-editor\" data-id=\"6fe8f8c\" 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 se actualiza alguno de los otros dos call center, el n\u00famero de particiones recorridas ser\u00eda mayor, lo cu\u00e1l implica que el coste de las operaciones DML tambi\u00e9n se ve afectado por la manera en que est\u00e9n organizados los datos.<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Borrado<\/b><span style=\"font-weight: 400;\">: Snowflake procede de manera similar a la actualizaci\u00f3n:<\/span><ul><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Identifica las microparticiones afectadas por el borrado.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Genera nuevos ficheros de micropartici\u00f3n d\u00f3nde no aparezcan los registros eliminados.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Archiva las versiones anteriores de los ficheros durante el tiempo marcado por el DATA_RETENTION_TIME_IN_DAYS.<\/span><\/li><\/ul><\/li><\/ul><p><span style=\"font-weight: 400;\">La importancia de entender c\u00f3mo gestiona Snowflake estas operaciones es por las implicaciones que tiene a nivel rendimiento y almacenamiento. Sobre todo en el segundo caso, hay que tener en cuenta que si tenemos un alto n\u00famero de d\u00edas de retenci\u00f3n en tablas (DATA_RETENTION_TIME_IN_DAYS) que se modifican frecuentemente, estaremos archivando muchas versiones de los datos que pueden incrementar considerablemente nuestro almacenamiento.<\/span><\/p><p><span style=\"font-weight: 400;\">La principal ventaja es que <\/span><b>Snowflake se encarga de todo este complejo mantenimiento siendo la gesti\u00f3n del almacenamiento transparente para el usuario<\/b><span style=\"font-weight: 400;\">.<\/span><\/p><p><span style=\"font-weight: 400;\">En estos casos, para eficientar el almacenamiento es fundamental conocer los tres tipos principales de tablas que pone a nuestra disposici\u00f3n Snowflake, as\u00ed c\u00f3mo el concepto de Fail-Safe y Time-Travel:<\/span><\/p><p><b>Time-Travel:<\/b><span style=\"font-weight: 400;\"> Periodo que, en funci\u00f3n de la edici\u00f3n de Snowflake, (hasta un d\u00eda en Standard y hasta 90 d\u00edas en tablas permanentes a partir de edici\u00f3n Enterprise) permite almacenar todas las versiones por las que pasa una tabla, y habilita funcionalidades c\u00f3mo poder restaurar datos en cualquier punto dentro de ese periodo, o hacer queries sobre un estado espec\u00edfico de los datos.<\/span><\/p><p><b>Fail-Safe:<\/b><span style=\"font-weight: 400;\"> per\u00edodo de siete d\u00edas durante el cu\u00e1l se almacena cada versi\u00f3n de los datos en la que ha expirado su DATA_RETENTION_TIME_IN_DAYS y que permite la restauraci\u00f3n de los mismos durante ese periodo pero solamente a trav\u00e9s del soporte de Snowflake (Los usuarios no tienen acceso directo al Fail-Safe). Este periodo no es configurable y solamente est\u00e1 disponible en las tablas permanentes, c\u00f3mo veremos a continuaci\u00f3n.<\/span><\/p><p><span style=\"font-weight: 400;\">Con estos dos conceptos claros, pasamos a describir los tres tipos principales de tablas en Snowflake:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Temporales<\/b><span style=\"font-weight: 400;\">: Solamente persisten durante la sesi\u00f3n, y no tienen Fail-Safe. Se puede definir Time-Travel de cero o 1 d\u00eda.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Transitorias<\/b><span style=\"font-weight: 400;\">: A diferencia de las temporales, s\u00ed pueden persistir m\u00e1s all\u00e1 de la sesi\u00f3n, pero solo permiten tener Time-Travel de hasta un d\u00eda y tampoco incorporan Fail-Safe.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Permanentes<\/b><span style=\"font-weight: 400;\">: Igual que las transitorias, persisten m\u00e1s all\u00e1 de una \u00fanica sesi\u00f3n, pero permiten extender el Time-Travel hasta 90 d\u00edas (siempre y cu\u00e1ndo se est\u00e9 trabajando en una edici\u00f3n Enterprise o superior) e incorporan de caja el Fail-Safe (No configurable ni removible).<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Por la naturaleza de cada una de las tablas, vemos que por ejemplo debemos tener en cuenta que si nuestra tabla se puede ver afectada por continuas operaciones DML de actualizaci\u00f3n-inserci\u00f3n, en el caso que tengamos una tabla permanente con un alto n\u00famero de d\u00edas de Time-Travel, nuestros costes de almacenamiento pueden verse incrementados.<\/span><\/p><p><span style=\"font-weight: 400;\">La recomendaci\u00f3n general para <\/span><b>optimizar el almacenamiento<\/b><span style=\"font-weight: 400;\"> es que se utilicen <\/span><b>tablas temporales<\/b><span style=\"font-weight: 400;\"> para tablas que simplemente utilicemos c\u00f3mo <\/span><b>tablas intermedias o staging<\/b><span style=\"font-weight: 400;\">, las <\/span><b>transitorias<\/b><span style=\"font-weight: 400;\"> para <\/span><b>tablas permanentes que puedan ser f\u00e1cilmente reproducibles desde fuera<\/b><span style=\"font-weight: 400;\">, y las <\/span><b>permanentes para tablas cr\u00edticas<\/b><span style=\"font-weight: 400;\"> que tengan que estar siempre disponibles y que el coste de reprocesamiento en caso de desastre ser\u00eda elevado.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bd8f0fe elementor-widget elementor-widget-heading\" data-id=\"bd8f0fe\" data-element_type=\"widget\" id=\"aspectos\" 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\">Aspectos a tener en cuenta respecto al almacenamiento<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0f9628f elementor-widget elementor-widget-text-editor\" data-id=\"0f9628f\" 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\"><b>Consultas por columnas no ordenadas en la inserci\u00f3n<\/b><span style=\"font-weight: 400;\">: Esta forma de particionar proporcional implica que haya solapes de valores en las diferentes microparticiones. En columnas de baja cardinalidad (por ejemplo con 2-3 valores diferentes) si los datos no est\u00e1n ordenados por esa columna y hacemos un filtro exclusivamente por dicha columna, hay que controlar el nivel de podado de microparticiones, porque puede pasar que esos 2-3 valores se encuentren en todas las particiones y que Snowflake no pueda podar ninguna. En estos casos, se recomienda para solucionarlo bien a\u00f1adir al filtro un campo tipo fecha o num\u00e9rico por el que est\u00e9n ordenados los datos, o plantear la posibilidad de a\u00f1adir una cluster key por dicho campo, que es uno de los servicios de optimizaci\u00f3n con los que cuenta Snowflake. Otra opci\u00f3n ser\u00eda crear una vista tanto standard c\u00f3mo materializada que ordene por ese campo.<br \/><br \/><\/span>Ejemplo d\u00f3nde queda evidenciado esto, es, lanzamos una consulta sobre una gran tabla de unos <b>14.000 millones de filas, cuyos datos est\u00e1n ordenados por fecha y cliente<\/b><span>. En esta tabla, queremos consultar los diferentes tipos de env\u00edo que se han hecho. Si lanzamos la consulta sin filtro:<\/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-f071f82 elementor-widget elementor-widget-image\" data-id=\"f071f82\" 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=\"331\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake6-1024x331.png\" class=\"attachment-large size-large wp-image-14321 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake6-1024x331.png 1024w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake6-300x97.png 300w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake6-768x248.png 768w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake6.png 1357w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/331;\" \/>\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-7b243d0 elementor-widget elementor-widget-text-editor\" data-id=\"7b243d0\" 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;\">Primero vemos que<\/span><b> se escanean las 49.448 microparticion<\/b><span style=\"font-weight: 400;\">es, lo cu\u00e1l es l\u00f3gico ya que no hemos inclu\u00eddo filtro alguno. Por otro lado, <\/span><b>se escanean 13,58GB de los 770GB<\/b><span style=\"font-weight: 400;\"> que tiene la tabla. Esto se debe a que en la query hemos inclu\u00eddo una \u00fanica columna, y ya que Snowflake c\u00f3mo hemos comentado almacena los datos de forma columnar y comprimida, solamente accede a los datos de la columna que consultamos.<\/span><\/p><p><span style=\"font-weight: 400;\">Si aplicamos un filtro sobre la columna Call Center, que es un num\u00e9rico que toma valores entre 1 y 60, y es un campo por el que no se ha ordenado en la inserci\u00f3n de los datos, y buscamos por ejemplo el call center n\u00famero 20:<\/span><\/p><p><span style=\"font-weight: 400;\">select distinct cr_ship_mode_sk from &#8220;SNOWFLAKE_SAMPLE_DATA&#8221;.&#8221;TPCDS_SF100TCL&#8221;.&#8221;CATALOG_RETURNS&#8221; where cr_call_center_sk = 20\u00a0<\/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-8707751 elementor-widget elementor-widget-image\" data-id=\"8707751\" 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<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"372\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake7-1024x372.png\" class=\"attachment-large size-large wp-image-14323 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake7-1024x372.png 1024w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake7-300x109.png 300w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake7-768x279.png 768w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake7.png 1334w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/372;\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\"><\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-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;\">Vemos que efectivamente, apenas se han podado valores: De las 49,448 microparticiones, 49.447 ten\u00edan en su rango de call center el 20, con lo cu\u00e1l ha habido que recorrerlas igualmente.<\/span><\/p><p><span style=\"font-weight: 400;\">Sin embargo, si inclu\u00edmos en el filtro uno de los campos de clusterizado, por ejemplo el c\u00f3digo de 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-c660519 elementor-widget elementor-widget-image\" data-id=\"c660519\" 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<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"391\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake8-1024x391.png\" class=\"attachment-large size-large wp-image-14325 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake8-1024x391.png 1024w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake8-300x114.png 300w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake8-768x293.png 768w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake8.png 1347w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/391;\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\"><\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b4c169f elementor-widget elementor-widget-text-editor\" data-id=\"b4c169f\" 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;\">Vemos que <\/span><b>s\u00f3lo se ha recorrido un 10% aprox de las microparticione<\/b><span style=\"font-weight: 400;\">s, y el tiempo de query ha bajado de 1 minuto 45 segundos a 12 segundos.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Con esto se puede concluir que <\/span><b>el principal factor de rendimiento en las consultas es el n\u00famero de bytes que tenga que escanear Snowflake<\/b><span style=\"font-weight: 400;\"> el cu\u00e1l viene <\/span><b>principalmente determinado por el n\u00famero de particiones a escanear, y la cantidad de datos de cada columna<\/b><span style=\"font-weight: 400;\">, y que si solamente incluimos en el filtro columnas por las que no est\u00e9n ordenados los datos o no est\u00e9n inclu\u00eddos en la cluster key, en tablas de gran tama\u00f1o el rendimiento puede verse afectado. <\/span><b>Es recomendable incluir en los filtros al menos uno de los campos de ordenaci\u00f3n o de las cluster ke<\/b><span style=\"font-weight: 400;\">y para que las queries sean eficientes, o de no poder ser as\u00ed, Snowflake nos proporciona otras alternativas para mejorar el rendimiento c\u00f3mo las vistas materializadas, el cacheo o el search optimization service.<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b>B\u00fasqueda por rangos en las microparticiones<\/b><span style=\"font-weight: 400;\">: A la hora de podar microparticiones, Snowflake busca en la metadata si el valor buscado est\u00e1 en el rango de valores m\u00ednimo-m\u00e1ximo de la columna filtrada en la micropartici\u00f3n. Esto genera una dependencia a la hora de podar valores en base a c\u00f3mo est\u00e9n distribuidos dichos rangos en las microparticiones, lo cu\u00e1l puede afectar a la cantidad de microparticiones podadas cu\u00e1ndo buscamos por columnas por las que no est\u00e9n ordenados o clusterizados los datos: Por ejemplo, nos podemos encontrar casos d\u00f3nde busquemos un valor que no existe, pero que por estar dentro del rango de valores en la metadata, obligue a Snowflake a recorrer igualmente todas las microparticiones.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">En estos casos, Snowflake dice que en tablas <\/span><b>con tama\u00f1os por debajo de 1TB la organizaci\u00f3n autom\u00e1tica de datos debe ser suficiente<\/b><span style=\"font-weight: 400;\"> para obtener buen rendimiento en las consultas.<\/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-0ac5542 elementor-widget elementor-widget-heading\" data-id=\"0ac5542\" data-element_type=\"widget\" id=\"pruebas\" 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\">Pruebas con Snowflake para entender c\u00f3mo funciona el microparticionado y los metadatos asociados a las microparticiones<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7addd25 elementor-widget elementor-widget-text-editor\" data-id=\"7addd25\" 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 tabla que se ha utilizado para estas pruebas contiene 100 millones de registros y seis columnas, d\u00f3nde los datos se han distribuido en 49 particiones ocupando un total de 708MB (unos 14,5MB de media por micropartici\u00f3n). Los datos est\u00e1n ordenados por un campo de fecha.<\/span><\/p><p><span style=\"font-weight: 400;\">Comentar que para estas pruebas, se ha utilizado la <\/span><b>herramienta de Profiling de Snowflake<\/b><span style=\"font-weight: 400;\">, que est\u00e1 <\/span><b>disponible desde el historial de queries<\/b><span style=\"font-weight: 400;\">. Hemos encontrado esta herramienta muy completa e intuitiva, y permite de un solo vistazo encontrar d\u00f3nde se est\u00e1n generando los cuellos de botella en las queries, todo el plan de ejecuci\u00f3n por el que pasa una query, as\u00ed c\u00f3mo las filas que salen de cada paso (lo cu\u00e1l nos permite por ejemplo detectar cosas habituales de mal rendimiento c\u00f3mo joins explosivos) y las microparticiones que se van podando en cada estado. Gracias a esta herramienta, hemos podido entender qu\u00e9 es lo que pasaba exactamente en cada una de las situaciones que hemos querido investigar y entender la gesti\u00f3n de Snowflake del almacenamiento.<\/span><\/p><p><span style=\"font-weight: 400;\">Esta herramienta de profiling est\u00e1 disponible en el men\u00fa History de la UI, pinchando en la query que queramos analizar.<\/span><\/p><p><span style=\"font-weight: 400;\">El objetivo de estas pruebas es entender la forma en la que <\/span><b>Snowflake selecciona las microparticiones a recorrer <\/b><span style=\"font-weight: 400;\">y c\u00f3mo de importante es <\/span><b>la forma en la que se insertan los datos para mejorar el rendimiento en nuestras consultas<\/b><span style=\"font-weight: 400;\">, as\u00ed c\u00f3mo las columnas por las que se filtre.<\/span><\/p><p><span style=\"font-weight: 400;\">En la tabla existe una columna, Call Center, d\u00f3nde hay diferentes valores entre el 1 y el 60 pero con saltos (no est\u00e1n todos los posibles valores). Si hacemos una b\u00fasqueda por un call center espec\u00edfico de los que est\u00e1n:<\/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-5e2f59b elementor-widget elementor-widget-image\" data-id=\"5e2f59b\" 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<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"764\" height=\"567\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake9.png\" class=\"attachment-large size-large wp-image-14327 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake9.png 764w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake9-300x223.png 300w\" data-sizes=\"(max-width: 764px) 100vw, 764px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 764px; --smush-placeholder-aspect-ratio: 764\/567;\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\"><\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-91292f9 elementor-widget elementor-widget-text-editor\" data-id=\"91292f9\" 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;\">Apreciamos que<\/span> <span style=\"font-weight: 400;\">sea cu\u00e1l sea el Call Center que incluyamos en el filtro <\/span><b>siempre se recorren todas las microparticiones<\/b><span style=\"font-weight: 400;\">. La explicaci\u00f3n es que Snowflake para determinar las microparticiones a recorrer, mira en la metadata de la columna Call Center si el valor buscado est\u00e1 dentro del rango, y en este caso, d\u00f3nde los datos est\u00e1n ordenados por fecha, siempre se cumple que el valor est\u00e1 dentro del rango, por lo que tiene que recorrer todas las microparticiones.<\/span><\/p><p><span style=\"font-weight: 400;\">Probamos a meter un nuevo registro de un Call Center con ID 11 que se sabe no aparece en los datos. Tras la inserci\u00f3n, el n\u00famero de microparticiones se mantiene en 49, por lo que Snowflake ha debido generar un nuevo archivo que incluye el nuevo registro, y ha archivado la versi\u00f3n anterior de la micropartici\u00f3n.<\/span><\/p><p><span style=\"font-weight: 400;\">Hacemos una b\u00fasqueda por ese Call Center, que a priori est\u00e1 en una \u00fanica micropartici\u00f3n, y al revisar el Profile:<\/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-1aee615 elementor-widget elementor-widget-image\" data-id=\"1aee615\" 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<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"749\" height=\"462\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake10.png\" class=\"attachment-large size-large wp-image-14329 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake10.png 749w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake10-300x185.png 300w\" data-sizes=\"(max-width: 749px) 100vw, 749px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 749px; --smush-placeholder-aspect-ratio: 749\/462;\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\"><\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c40613a elementor-widget elementor-widget-text-editor\" data-id=\"c40613a\" 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;\">Se aprecia que Snowflake ha tenido que escanear las 49 microparticiones aunque se sabe que el valor 11 est\u00e1 en una micropartici\u00f3n espec\u00edfica. Esto confirma que <\/span><b>Snowflake busca en base a rangos de valores por columna<\/b><span style=\"font-weight: 400;\">, y no conoce los valores espec\u00edficos de una columna que hay en cada micropartici\u00f3n.<\/span><\/p><p><span style=\"font-weight: 400;\">Para evidenciar a\u00fan m\u00e1s este hecho, insertamos un nuevo registro de Call Center que est\u00e9 fuera del posible rango de b\u00fasqueda: Call Center con ID 61. Tras la inserci\u00f3n, verificamos que el n\u00famero de particiones se mantiene, pero cuando se hace una b\u00fasqueda por ese valor:<\/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-d6d8c34 elementor-widget elementor-widget-image\" data-id=\"d6d8c34\" 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<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"725\" height=\"431\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake11.png\" class=\"attachment-large size-large wp-image-14334 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake11.png 725w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake11-300x178.png 300w\" data-sizes=\"(max-width: 725px) 100vw, 725px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 725px; --smush-placeholder-aspect-ratio: 725\/431;\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\"><\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc2b23f elementor-widget elementor-widget-text-editor\" data-id=\"fc2b23f\" 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>\u00danicamente ha escaneado una micropartici\u00f3n. Esto se debe a que el 61 es un valor que est\u00e1 fuera del rango de la metadata del resto de las microparticiones, con lo cu\u00e1l, ha podido saber que el Call Center 61 estaba en una \u00fanica micropartici\u00f3n.<\/p><p>La siguiente comprobaci\u00f3n es ver c\u00f3mo Snowflake ejecuta la b\u00fasqueda de un valor de la columna Call Center que no est\u00e1 en los datos, pero s\u00ed en los posibles rangos de valores de la columna en las microparticiones. Por ejemplo, tenemos Call Centers 10, 11 y 13, pero no el 12. Si buscamos por el 12:<\/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-448910c elementor-widget elementor-widget-image\" data-id=\"448910c\" 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<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"738\" height=\"477\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake12.png\" class=\"attachment-large size-large wp-image-14336 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake12.png 738w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake12-300x194.png 300w\" data-sizes=\"(max-width: 738px) 100vw, 738px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 738px; --smush-placeholder-aspect-ratio: 738\/477;\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\"><\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5b071a8 elementor-widget elementor-widget-text-editor\" data-id=\"5b071a8\" 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>C\u00f3mo era de esperar, recorre todas las microparticiones, ya que el 12 entra en todos los posibles rangos de valores.<\/p><p>Para terminar de confirmar si Snowflake busca exclusivamente por rangos de valores, se crea una nueva tabla \u00fanicamente con los Call Center 1, 10 y 11. Esta nueva tabla tiene 8 microparticiones.<\/p><p>Si buscamos por el Call Center 5 (dentro de rango), recorre las 8 microparticiones aunque el Call Center no exista.<\/p><p>Si buscamos por el Call Center 12, directamente la metadata devuelve que ese Call Center no existe, y por tanto, no recorre ninguna micropartici\u00f3n.<\/p><p>Pero ahora, si buscamos por el valor 11, que recordemos fue una nueva inserci\u00f3n que metimos y justo est\u00e1 en el final del rango, en este caso Snowflake s\u00ed es capaz de podar el resto de microparticiones d\u00f3nde no est\u00e1 el valor:<\/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-e02a09c elementor-widget elementor-widget-image\" data-id=\"e02a09c\" 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<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"757\" height=\"450\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake13.png\" class=\"attachment-large size-large wp-image-14338 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake13.png 757w, https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/10\/Snowflake13-300x178.png 300w\" data-sizes=\"(max-width: 757px) 100vw, 757px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 757px; --smush-placeholder-aspect-ratio: 757\/450;\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\"><\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7acb4b8 elementor-widget elementor-widget-text-editor\" data-id=\"7acb4b8\" 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;\">El motivo est\u00e1 en que se sabe que el resto de microparticiones tienen un rango 1-10, con lo cu\u00e1l, la \u00fanica que cumple estar en rango 1-11 es d\u00f3nde verdaderamente est\u00e1 el valor. Sin embargo, en la otra tabla d\u00f3nde era altamente probable que todas las microparticiones en la columna Call Center estuviesen en rango 1-60, ah\u00ed s\u00ed que tuvo que recorrerlas todas para saber d\u00f3nde estaba el Call Center 11.<\/span><\/p><p><b>Conclusi\u00f3n de las pruebas:<\/b><\/p><p><span style=\"font-weight: 400;\">Cu\u00e1ndo tengamos bajo rendimiento en consultas, hay <\/span><b>dos indicadores principales a revisar<\/b><span style=\"font-weight: 400;\"> en el profiling: <\/span><b>N\u00famero de particiones escaneadas y cantidad de datos procesados<\/b><span style=\"font-weight: 400;\">.<\/span><\/p><p><span style=\"font-weight: 400;\">Para mejorar la consulta, <\/span><b>el objetivo es reducir el n\u00famero de ambas<\/b><span style=\"font-weight: 400;\">: Para recorrer menos particiones hay que a\u00f1adir filtros por campos en base a los cu\u00e1les se est\u00e9n ordenando los datos (generalmente fechas o id\u2019s num\u00e9ricos) o replantearnos si ese campo es importante a la hora de filtrar, que los datos est\u00e9n ordenados por dicho campo. Por supuesto, revisar tambi\u00e9n si las columnas que utilizamos en la consulta se pueden reducir.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Si esto no es posible, tendr\u00edamos que plantearnos otras estrategias de optimizaci\u00f3n, c\u00f3mo clusterizar la tabla en base a ese campo, utilizaci\u00f3n de cach\u00e9s, ver si el caso de uso se ajusta a la utilizaci\u00f3n del search optimization service, o la utilizaci\u00f3n de vistas materializadas que pueden a su vez estar clusterizadas o no. El detalle de estas estrategias queda fuera del alcance de este art\u00edculo.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6cebff1 elementor-widget elementor-widget-heading\" data-id=\"6cebff1\" 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\">Principales conclusiones del funcionamiento del almacenamiento en Snowflake<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40b5e6b elementor-widget elementor-widget-text-editor\" data-id=\"40b5e6b\" 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\"><b>El orden de inserci\u00f3n de los datos importa<\/b><span style=\"font-weight: 400;\">. Es recomendable insertar los datos ordenadamente en base a los filtrados m\u00e1s frecuentes que se vayan a hacer en la explotaci\u00f3n.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Al almacenar de forma columnar los datos, el solamente <\/span><b>seleccionar las columnas necesarias para la consulta reduce el n\u00famero de bytes escaneados<\/b><span style=\"font-weight: 400;\"> y por tanto el tiempo de resoluci\u00f3n de consulta. Es recomendable evitar los SELECT * o a\u00f1adir columnas innecesarias en las queries.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Es muy importante de cara al rendimiento <\/span><b>seleccionar el tipo de datos m\u00e1s adecuado para cada columna<\/b><span style=\"font-weight: 400;\">, ya que Snowflake podr\u00e1 reducir de manera m\u00e1s eficiente el tama\u00f1o de los datos, y esto se traduce en menores tiempos de escaneo, y por tanto de respuestas en las queries.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Para que las queries tengan un buen rendimiento, <\/span><b>es aconsejable incluir un filtro de la columna por la que est\u00e9n ordenados-clusterizados los datos<\/b><span style=\"font-weight: 400;\"> y revisar en el profile de la query que tenga un buen porcentaje de poda de particiones.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>En columnas de cardinalidad muy baja<\/b><span style=\"font-weight: 400;\"> (1-10 valores diferentes), si hacemos b\u00fasquedas exclusivamente por ellas,<\/span><b> y los datos no est\u00e1n ordenados o clusterizados por estas columnas, puede que no se poden particiones en las b\u00fasquedas<\/b><span style=\"font-weight: 400;\">. Con vol\u00famenes de GB, el recorrer todas las particiones incluso con la talla m\u00e1s peque\u00f1a no perjudica el rendimiento y Snowflake maneja perfectamente, pero en vol\u00famenes en el rango de centenas de GB, la diferencia entre tener o no la cluster key para buscar un valor en concreto, s\u00ed puede afectar en el n\u00famero de bytes a escanear y por tanto en los tiempos de respuesta, con lo cu\u00e1l es importante hacer un estudio de tiempos de consulta, para lo cu\u00e1l Snowflake nos proporciona una potente herramienta de profiling, que a nosotros particularmente nos ha sido de gran utilidad para poder elaborar este art\u00edculo.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Entendiendo c\u00f3mo Snowflake gestiona el almacenamiento a nivel inserci\u00f3n, actualizaci\u00f3n y borrado de datos y c\u00f3mo se gestionan estos datos a la hora de realizar consultas, estar\u00edamos en disposici\u00f3n de dar el siguiente paso que es entender todas las funciones avanzadas que proporciona Snowflake a nivel de optimizaci\u00f3n, compartici\u00f3n y seguridad-resiliencia en los datos. \u00c9ste ser\u00e1 el objetivo de siguientes art\u00edculos.<\/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-30687e6 elementor-widget elementor-widget-spacer\" data-id=\"30687e6\" data-element_type=\"widget\" id=\"ref\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b2b8ef elementor-widget elementor-widget-heading\" data-id=\"7b2b8ef\" data-element_type=\"widget\" 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-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;\">Documentaci\u00f3n oficial de Snowflake <\/span><a href=\"https:\/\/docs.snowflake.com\/en\/\"><span style=\"font-weight: 400;\">https:\/\/docs.snowflake.com\/en\/<\/span><\/a><\/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-a718512 nav-post elementor-widget elementor-widget-text-editor\" data-id=\"a718512\" 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<h6><strong>Navegaci\u00f3n<\/strong><\/h6><p><a href=\"#intro\">Introducci\u00f3n<\/a><\/p><p><a href=\"#objetivo\">Objetivo<\/a><\/p><p><a href=\"#escalabilidad\">Introducci\u00f3n al almacenamiento<\/a><\/p><p><a href=\"#objetivosal\">Objetivos del almacenamiento<\/a><\/p><p><a href=\"#principalal\">Principales caracter\u00edsticas del almacenamiento<\/a><\/p><p><a href=\"#metacatos\">Metadatos en las microparticiones<\/a><\/p><p><a href=\"#principalmicro\">Principales caracter\u00edsticas del microparticionamiento<\/a><\/p><p><a href=\"#entendiendo\">Entendiendo la organizaci\u00f3n de datos<\/a><\/p><p><a href=\"#dml\">DML\u2019s en Snowflake<\/a><\/p><p><a href=\"#aspectos\">Aspectos a tener en cuenta respecto al almacenamiento<br \/><\/a><\/p><p><a href=\"#pruebas\">Pruebas con Snowflake<\/a><\/p><p><a href=\"#conclusiones\">Principales conclusiones<\/a><\/p><p><a href=\"#referencias\">Referencias<\/a><\/p><p><a href=\"#autores\">Autores<\/a><\/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\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-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<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\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-816937f\" data-id=\"816937f\" data-element_type=\"column\">\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-2bb61bc elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2bb61bc\" 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-34c49e9\" data-id=\"34c49e9\" 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-8eed0f2 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"8eed0f2\" 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\/roberto-garc%C3%ADa-parra-1b914128\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-13320 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-150x150.png 150w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-300x300.png 300w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-75x75.png 75w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-270x270.png 270w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-192x192.png 192w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-180x180.png 180w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab-32x32.png 32w, https:\/\/bluetab.es\/wp-content\/uploads\/2022\/03\/cropped-Isotipo-Bluetab.png 512w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/roberto-garc%C3%ADa-parra-1b914128\/\" target=\"_blank\">Roberto Garc\u00eda Parra<\/a><\/h4><p class=\"elementor-image-box-description\">Technical Delivery Manager<\/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-8c49e9b\" data-id=\"8c49e9b\" 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<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:\/\/www.bluetab.es\/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:\/\/www.bluetab.es\/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:\/\/www.bluetab.es\/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>Gu\u00eda avanzada sobre almacenamiento en Snowflake Roberto Garc\u00eda Parra Technical Delivery Manager Introducci\u00f3n a Snowflake Snowflake es una plataforma avanzada de datos que se consume en modalidad SaaS 100% en cloud. El principal factor diferenciador de Snowflake es que proporciona capacidades avanzadas para todas las necesidades de datos de las compa\u00f1\u00edas (Almacenamiento, procesamiento, explotaci\u00f3n y [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":17834,"comment_status":"closed","ping_status":"closed","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-14441","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\/03\/8.png",1200,600,false],"thumbnail":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/03\/8-150x150.png",150,150,true],"medium":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/03\/8-300x150.png",300,150,true],"medium_large":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/03\/8-768x384.png",768,384,true],"large":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/03\/8-1024x512.png",1024,512,true],"1536x1536":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/03\/8.png",1200,600,false],"2048x2048":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/03\/8.png",1200,600,false],"sidebar-featured":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/03\/8-75x75.png",75,75,true],"genesis-singular-images":["https:\/\/bluetab.es\/wp-content\/uploads\/2023\/03\/8-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":"Gu\u00eda avanzada sobre almacenamiento en Snowflake Roberto Garc\u00eda Parra Technical Delivery Manager Introducci\u00f3n a Snowflake Snowflake es una plataforma avanzada de datos que se consume en modalidad SaaS 100% en cloud. El principal factor diferenciador de Snowflake es que proporciona capacidades avanzadas para todas las necesidades de datos de las compa\u00f1\u00edas (Almacenamiento, procesamiento, explotaci\u00f3n y&hellip;","_links":{"self":[{"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/posts\/14441","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=14441"}],"version-history":[{"count":2,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/posts\/14441\/revisions"}],"predecessor-version":[{"id":14465,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/posts\/14441\/revisions\/14465"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/media\/17834"}],"wp:attachment":[{"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/media?parent=14441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/categories?post=14441"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/tags?post=14441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}