• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar al pie de página
Bluetab

Bluetab

an IBM Company

  • Soluciones
    • DATA STRATEGY
    • DATA FABRIC
    • AUGMENTED ANALYTICS
  • Assets
    • TRUEDAT
    • FASTCAPTURE
  • Conócenos
  • Oficinas
    • España
    • Mexico
    • Perú
    • Colombia
  • talento
    • TALENT HUB BIZKAIA
    • TALENT HUB ALICANTE
  • Blog
  • ES
    • EN

Tech

¿Qué está pasando en el mundo de la AI?

marzo 6, 2023 by Bluetab

¿Qué está pasando en el mundo de la AI?

Luis San Roman

Researcher and developer in machine learning

Uno de los eventos más importante que encontramos en el mundo IA es el WAICF (World Artificial Intelligence Cannes Festival).

Cannes es una ciudad ubicada en la Riviera francesa, que, aparte de ser una ciudad muy bonita, es conocida por el festival de cine que se celebra todos los años. Un lugar perfecto para poner la moqueta roja al mundo de AI.

La revolución de los modelos generativos autorregresivos

Sin duda uno de los temas más comentados fue ChtaGPT. La arquitectura de los Transformers, que es la base de modelos como ChatGPT, ha sido completamente revolucionaria, permitiendo entrenar modelos ultra-grandes con varios cientos de billones (americanos) de parámetros. Todos los grandes players de AI están trabajando sobre ellos.

Los modelos ultra-grandes han sido preentrenados con trillones (americanos) de palabras. Esto les permite hace cosas impresionantes, están revolucionando los casos de uso de NLP (Natural Language Processing) y abren la puerta a una ola de innovación. También tienen limitaciones… el camino hacia una inteligencia artificial que pueda aprender y planificar es largo.

Estos modelos son transformacionales. Su entrada puede ser cualquier tipo de secuencia: texto, imágenes o voz. Los casos de uso donde se están aplicando son de todo tipo. En el WAICF pudimos ver ejemplos que van desde el análisis de documentos, chats, sistemas que interactúan con voz, hasta robótica.

Cómo desarrollar AI a escala

Pensar a largo plazo, vincular el desarrollo de AI con objetivos de negocio, pensar en líneas de investigación transformacionales con AI, construir un equipo AI de primer nivel, gestionar el cambio cultural, pensar en todo el ciclo de AI, especialmente en la última milla y establecer alianzas con la comunidad AI son las características que más se escuchan para desarrollar AI a escala.

AI responsable

En el WAICF, cuando algún ponente expuso casos de uso de AI con un fin de ayudar a las personas, y en particular a colectivos minoritarios, la audiencia aplaudió esporádicamente.

AI responsable es una de las materias que más interés está generando en esta ola de innovación con AI. ¿Un modelo de AI optimizado para que tenga una precisión muy buena incorpora salvaguardas de sesgo y de equidad?

El desarrollo de AI responsable requiere un trade-off entre la precisión y el sesgo y la equidad del modelo, y tener muy presente los aspectos éticos a la hora de definir “el problema” que se quiere resolver con AI.

AI responsable es una materia muy compleja de implementar. Matemáticamente requiere analizar el comportamiento de los modelos en diferentes colectivos con umbrales que disparen señales de alarma.

Los mundos corporativo, académico y startups

La unión de los mundos corporativos, académico y startups es un valor seguro. Es una unión imprescindible para la evolución de AI.

En definitiva, el mundo de la AI está en ebullición y hoy en día es en eventos como el WAICF, donde se escenifica dando lugar a un espacio de aprendizaje con enfoques estratégicos, casos de uso y diferentes líneas de investigación que pueden confluir.

Luis San Roman

Researcher and developer in machine learning

¿Quieres saber más de lo que ofrecemos y ver otros casos de éxito?
DESCUBRE BLUETAB

SOLUCIONES, SOMOS EXPERTOS

DATA STRATEGY
DATA FABRIC
AUGMENTED ANALYTICS

Te puede interesar

Cómo preparar la certificación AWS Data Analytics – Specialty

noviembre 17, 2021
LEER MÁS

Análisis de vulnerabilidades en contenedores con trivy

noviembre 16, 2020
LEER MÁS

¿Existe el Azar?

noviembre 10, 2021
LEER MÁS

Snowflake, el Time Travel sin DeLorean para unos datos Fail-Safe.

febrero 23, 2023
LEER MÁS

Data Mesh

julio 27, 2022
LEER MÁS

Big Data e IoT

febrero 10, 2021
LEER MÁS

Publicado en: Tech

Snowflake, el Time Travel sin DeLorean para unos datos Fail-Safe.

febrero 23, 2023 by Bluetab

Snowflake, el Time Travel sin DeLorean para unos datos Fail-Safe.

Roberto García Parra

Technical Delivery Manager

Gabriel Gallardo Ruiz

Senior Data Architect

Introducción a Snowflake

Este artículo supone una continuación del artículo inicial que hicimos sobre el almacenamiento en Snowflake, y será el primero de una serie donde entraremos a fondo en las características más diferenciadoras de Snowflake. El primer artículo se puede consultar aquí.

Recordar que una de las características principales del almacenamiento en Snowflake es la inmutabilidad de los archivos: Cuando hay una operación DML sobre una tabla, los ficheros donde están los datos nunca se modifican, sino que se van creando nuevas versiones de los mismos, archivando todas las versiones anteriores por las que han ido pasando los ficheros durante el tiempo de retención establecido en el parámetro DATA_RETENTION_TIME_IN_DAYS parámetro que se puede establecer a nivel base de datos, esquema o tabla.

Este archivado es lo que posibilita las dos funcionalidades avanzadas de Snowflake que se van a ver en este artículo: El Time Travel y el Fail-Safe.

¿Qué es el Time Travel?

El Time Travel es una funcionalidad que permite acceder a versiones históricas por las que han ido pasando los datos en las tablas. Por ejemplo, si tenemos un proceso de carga diaria de una tabla de movimientos contables, podríamos lanzar una consulta de cuál era el estado de los movimientos contables tres días atrás.

¿Qué es el Fail-Safe?

Es un periodo adicional de siete días por el que Snowflake almacena las versiones de los datos para una posible recuperación. Este periodo no es configurable, siempre es de siete días, y únicamente aplica en un tipo de tablas: Las permanentes. 

Los objetos con Fail-Safe son las bases de datos, esquemas y tablas.

¿Qué se puede hacer con el Time Travel?

  • Consultar una foto estática de cualquier momento del pasado hasta un máximo de 90 días. Por ejemplo, de una tabla de movimientos contables, podríamos sacar un balance con los movimientos congelados a una fecha.
  • Recuperar tablas que se hayan borrado accidentalmente de forma muy sencilla mediante un simple comando SQL (UNDROP).
  • Recovery point-in-time: Recuperar datos en un punto concreto, dentro del plazo de los 90 días máximo del time travel.
  • Poder sacar snapshots de los datos para guardarlos permanentemente → Para esto podríamos combinar dos funcionalidades: El time travel y el zero-copy cloning, que veremos más adelante.

¿Cómo utilizar el Fail-Safe?

El Fail-Safe permite recuperar datos hasta siete días máximo después de la expiración del Time Travel. Esta recuperación solamente puede ser hecha a través del equipo de soporte de Snowflake, a diferencia del Time Travel, y se debe hacer vía petición. El Fail-Safe es un mecanismo para poder recuperar datos en caso de emergencia, no está pensado para hacer queries históricas, etc. para eso hay que usar el Time Travel.

No hay un SLA asociado a la recuperación de datos en Fail-Safe: Snoflake habla de horas incluso días para recuperar estos datos.

¿Cómo se configura el Time Travel?

Es un servicio que nos proporciona Snowflake y no hay que hacer nada adicional, más allá de configurar el número de días que queremos que nuestros objetos lo tengan activo. Hay que tener en cuenta lo siguiente:

  • Dependiendo de la edición que tengamos contratada de Snowflake, el número de días permitido de Time Travel puede diferir. A día de hoy, en la edición Standard solamente se puede habilitar hasta un día de Time Travel, mientras que a partir de la edición Enterprise podemos habilitar hasta 90 días de Time Travel.
  • El Time Travel de hasta 90 días solamente está habilitado en las tablas permanentes. Resto de tablas, un día máximo de Time Travel. Si quieres saber más sobre los tipos de tablas, hablamos sobre ellas en nuestro anterior artículo sobre almacenamiento, en la sección DML’s en Snowflake. El parámetro que configura el número de días de Time Travel en las tablas es el DATA_RETENTION_TIME_IN_DAYS. Este valor está por defecto a 1, pero podemos especificar un valor distinto a nivel base de datos o esquema, para que todos los objetos por debajo hereden dicho valor. También es posible configurar un tiempo mínimo de retención a nivel de cuenta, mediante el parámetro MIN_DATA_RETENTION_TIME_IN_DAYS. Este parámetro solamente es configurable por el rol ACCOUNTADMIN, y en caso de tener un valor, el tiempo de retención de una tabla sería el máximo del valor MIN_DATA_RETENTION_TIME_IN_DAYS a nivel cuenta y el DATA_RETENTION_TIME_IN_DAYS de la propia tabla.
  • Si queremos deshabilitar el TIME TRAVEL, simplemente tenemos que establecer un valor cero al parámetro DATA_RETENTION_TIME_IN_DAYS.

¿Cómo se configura el Fail-Safe?

El Fail-Safe no es configurable. Es un periodo fijo de siete días que se activa automáticamente en tablas permanentes sin necesidad de intervención alguna por parte del usuario, una vez que finaliza el periodo de Time Travel, o si se reduce este periodo, y hay datos con antigüedad superior al nuevo periodo definido, los cuales pasarían también automáticamente a Fail-Safe.

Consideraciones a tener en cuenta en el Time Travel y el Fail-Safe

¿Es posible modificar el Time Travel de un objeto?

Sí, es posible, pero hay que tener en cuenta el impacto que tiene dicha modificación:

  • Si se incrementa, la extensión solamente afecta a datos que estén archivados en ese momento, no así a datos que ya hayan pasado a Fail-Safe. Imaginemos que tenemos una tabla con un Time-Travel de 5 días y la modificamos a 10 días, los datos dentro de los 5 días sí se les extendería su periodo a 10, pero los datos con una antigüedad mayor a 5 días que hayan pasado al Fail-Safe, seguirían en el Fail-Safe, incluso si solo ha pasado por ejemplo un día desde que están en el Fail-Safe.
  • Si se disminuye, solamente los datos dentro del nuevo periodo de Time Travel permanecen ahí, mientras que el resto pasa a Fail-Safe. Si reducimos por ejemplo de 20 días a dos días, solamente se mantendrán los datos que se hayan generado en estos últimos dos días, mientras que los datos con antigüedad mayor o igual a 3 días pasan a Fail-Safe.

La modificación del Time Travel de un objeto se hace mediante una sentencia ALTER TABLE, modificando el parámetro DATA_RETENTION_TIME_IN_DAYS al nuevo tiempo en días deseado.

¿Qué pasa cuando el periodo de retención de un contenedor y un objeto chocan y el contenedor es borrado?

El contenedor se refiere a un objeto Snowflake que a su vez contiene 1..n objetos. Dos claros ejemplos son una base de datos, que a su vez contiene 1..n esquemas, y un esquema que a su vez contiene 1..n objetos de esquema tales como tablas, vistas o procedimientos almacenados entre otros.

Cuando una base de datos o esquema tiene definido un periodo de retención, y los objetos hijos tienen definidos un periodo de retención propio, cuando se borra el contenedor padre todo lo que esté contenido se retiene por el periodo definido en el padre, incluso si algunos de los objetos hijo tiene su propio periodo de retención y es diferente al del padre.

Esto quiere decir que si tenemos una base de datos con un periodo de retención de 5 días, y uno de los esquemas contenidos tiene definido un periodo de 10 días, si hay un borrado de la base de datos solamente tendríamos 5 días para recuperar no solo la base de datos sino también cualquiera de los esquemas. Esto aplica también a cuando tenemos un periodo de retención a nivel de objetos, y borramos el esquema que los contiene. En ese caso, el periodo de retención que cuenta siempre es el del esquema.

Si se desea mantener un periodo de retención diferente para alguno de los hijos, estos deben ser borrados previamente a la eliminación del contenedor. Por ejemplo, se borran primero las tablas en las que quiero mantener su periodo propio de retención, y posteriormente se borra el esquema.

Costes del Time Travel y el Fail-Safe

El Time Travel y el Fail Safe aumentan nuestra factura de almacenamiento. Todas las versiones históricas que se vayan archivando de nuestros datos, ocupan un almacenamiento que tendremos que pagar, aunque hay que tener en cuenta que Snowflake, cómo vimos en el artículo de almacenamiento, gestiona esto de la manera más eficiente posible, con lo que si por ejemplo, modificamos datos que afectan a una única micropartición, solo esta micropartición es archivada, pero no archivaría microparticiones no afectadas por la modificación.

Hay que tener cuidado en los siguientes supuestos, que sobre todo en tablas de alto volumen, pueden incrementar considerablemente los costes:

  • Truncados-borrados e inserciones continuos en tablas de alto volumen. Imaginemos que tenemos una tabla de varios gigas, que continuamente borramos y volvemos a cargar. En estos casos, cada vez que hiciéramos esa operación de borrado-inserción, estaríamos archivando varios gigas de tabla, y eso si se multiplica varias veces por el número de días, puede ser importante en la factura.
  • Actualizaciones masivas de datos con frecuencia. Imaginemos que tenemos un proceso que actualiza una columna después de cada inserción. Esto también generaría el archivado de toda la tabla entera.
  • Drops de tablas. Por el mismo motivo que un truncate, esto genera que se archive la tabla completa. Si hacemos continuos drops y recreaciones de la tabla con datos nuevos, una tabla permanente puede disparar los costes de almacenamiento.

Se recomienda para controlar los costes derivados del Time Travel y el Fail-Safe lo siguiente:

  • Si tenemos tablas que son fácilmente reproducibles desde fuera de Snowflake, mejor utilizar tablas transitorias que permanentes. De esta manera, nos ahorraremos los siete días de Fail-Safe y como máximo tendremos un día de Time Travel. Por ejemplo, tablas de lookup, o tablas de apoyo-staging para ciertos procesos ETL’s que no son esenciales. En este último caso, si no es necesario que la tabla persista más allá de la vida de la sesión, se puede configurar incluso como tabla temporal y ahorrar más, ya que en cuanto termina la sesión la tabla desaparece y no se puede recuperar.
  • Las tablas de hechos normalmente deberían ser tablas permanentes, pero si de igual manera las podemos recuperar fácilmente desde el sistema origen en caso de desastre, nos podemos plantear generar algunas como transitorias, y sacar backups periódicos con zero-copy cloning, característica que también se desarrollará en este artículo.

¿Cómo utilizar el Time Travel? Casos de uso prácticos

En nuestro ejemplo, tenemos una tabla donde se carga un stock diario. Lo que hemos hecho, ha sido el día 10 de noviembre cargar el stock de esa fecha, y el día 11 de noviembre hemos machacado el stock del 10 de noviembre por el actual a 11 de noviembre. Fijamos un Time Travel de treinta días a nivel base de datos (que es el que aplicaría por defecto a los objetos por debajo). Pasan 19 días desde la última carga.

Casos de uso que se plantean:

  • Un usuario quiere recuperar mediante una consulta la foto del 10 de noviembre.
  • Por error, uno de nuestros analistas borró la tabla. Es necesario recuperar el stock que teníamos de producto lo más rápido posible.
  • Un usuario nos pide que guardemos una foto del estado del stock a 10 de noviembre, por si nos lo piden en alguna auditoría.
  • Un analista necesita actualizar el stock de un producto concreto en el día 11 de noviembre, pero se equivoca y actualiza todos los productos. Restaurar la tabla al punto de antes del error.

Partimos ya de un stage interno creado en Snowflake donde hemos volcado los ficheros del 10 y el 11 de noviembre, y lanzamos el COPY INTO para insertarlos en la tabla cada día.

Primer caso de uso: Consulta de un estado anterior de la tabla

Si hacemos una consulta sobre la tabla, lo que obtenemos es el stock a día 11 de noviembre:

Para el usuario poder consultar la información a 10 de noviembre en esta tabla, tendría tres opciones:

  • Consulta con un timestamp fijo. Es decir, consultamos la tabla tal cual estaba en un momento específico del tiempo. En nuestro caso, la consultamos a 10 de noviembre:
  • Mediante un offset en segundos. Aquí lo que hacemos es decir que queremos consultar la información al estado de hace 19 días (cuando hacemos la consulta es 29 de noviembre, y queremos los datos del 10 de noviembre). Para ir 19 días hacia atrás, como el offset es en segundos, multiplicamos 60*60*24 (con esto pasamos los segundos a días) y por 19 (que son los días que queremos viajar hacia atrás):
  • Con un ID de query. Ojo con esta opción porque también puede dar problemas. En nuestro caso, cuando la ejecutamos, da el siguiente error:

Nos cercioramos de que ese ID de query sí que existe en el historial completo (Base de datos SNOWFLAKE, esquema ACCOUNT_USAGE, tabla QUERY_HISTORY:

Vemos que el ID es correcto y es justo cuando hicimos el truncate de la tabla para borrar los datos del día 10. El motivo por el que creemos que viene el error es porque el detalle del historial de queries solamente se guarda durante 14 días, con lo cual, este método no es recomendable para lanzar consultas pasado este periodo. Aunque nuestro Time Travel sea mayor (como en este caso, 30 días) el detalle de datos de la query no es accesible.

Segundo caso de uso: Recuperación de una tabla borrada por error

Imaginemos que algún usuario de manera accidental borra del todo la tabla:

drop table stock_diario

Los usuarios empiezan a quejarse que hay aplicaciones que han dejado de funcionar, tardaríamos bastante tiempo en reprocesar el archivo en origen, dependemos de un equipo que nos lo haga…

Snowflake facilita la recuperación de una tabla borrada durante el tiempo del Time Travel con una simple instrucción. Undrop la cual al ser una operación de metadata se ejecuta inmediatamente. No es necesario tener que localizar un backup donde estaba esa tabla ok, restaurarlo, sacar la tabla… simplemente ejecutar esta sentencia.

Demostración a continuación, borramos la tabla:

Ejecutamos una query y nos devuelve el siguiente error:

Ejecutamos la sentencia undrop:

Y vemos que Snowflake nos devuelve el mensaje de que la tabla ha sido correctamente restaurada.

Y comprobamos que podemos volver a hacer queries. Por supuesto, el Time Travel después de la recuperación se mantiene, pudiendo también consultar fotos anteriores de la tabla tal y como vemos en la captura:

Importante a tener en cuenta: El UNDROP siempre restaura la última versión de los datos que hubiese en el momento del borrado.

Tercer caso de uso: Sacar una foto estática de un estado de la tabla

Ya se ha visto que durante el periodo de Time Travel podemos consultar el estado anterior de una tabla. Pero, ¿y si un usuario pidiera guardar el estado de esa tabla de forma permanente? Este caso de uso es frecuente en el mundo financiero y de la auditoría para cosas tales como poder sacar un estado de cuentas con los movimientos a una determinada fecha, o que un regulador nos pida sacar instantáneas de los datos a determinados momentos para una consulta posterior.

La opción más inmediata para satisfacer este requerimiento sería combinar las funcionalidades de zero-copy cloning y time travel. Las ventajas que nos ofrece esta opción sería:

  • No duplicamos almacenamiento por la instantánea. Durante el tiempo de Time Travel, tenemos un único fichero, y nuestro clon apuntaría a esa versión de los datos. Cuando el Time Travel expire, Snowflake sabrá que hay un clon apuntando a esos datos y por tanto no los borrará. Si lo hiciésemos insertando los datos en una nueva tabla, durante el Time Travel de esa versión de los datos se estaría duplicando el almacenamiento.
  • Creamos todo en una simple sentencia.

A continuación se muestra el clonado de nuestra tabla de stock con la foto del 10 de noviembre:

Imaginemos que pasa el time travel de esta tabla. Podemos simularlo haciendo un ALTER TABLE y poniendo la tabla a 10 días (han pasado más de 10 días desde la última modificación):

Si se intenta sacar la foto a 10 de Noviembre desde la tabla original, Snowflake devuelve el siguiente error:

Ya que ese estado de los datos tenían una antigüedad mayor a 10 días, Snowflake lo ha llevado directamente a Fail-Safe.

Si consultamos el clon que se acaba de generar:

Se ve que a pesar de que el Time Travel ha expirado, mantenemos la foto del 10 de noviembre, y esta foto persistirá salvo que borremos el clon.

Cuarto caso de uso: Restaurar la tabla a un estado anterior

Imaginemos que le piden a un usuario actualizar el stock de impresoras de 15 a 14 unidades. Para ello el usuario genera la siguiente consulta:

El usuario se ha olvidado de un pequeño detalle y es aplicar un where para únicamente actualizar la línea de las impresoras, con lo que ahora todo el stock está a 14 unidades de forma errónea.

Para recuperar la tabla, podríamos recrearla gracias al Time Travel, mediante una sentencia create or replace:

Lo que estamos haciendo es sustituir la tabla al estado al que estaba ayer (que es el correcto).

IMPORTANTE: Hay que tener en cuenta que cuando hacemos un REPLACE TABLE como en este caso, se genera una nueva tabla con una metadata limpia, con lo cual perdemos el Time Travel en esa tabla. Si por ejemplo, intentamos recuperar la información 5 minutos atrás, nos dirá que no hay Time Travel de ese momento:

Cuando hagamos estas restauraciones debemos estar muy seguros. Una opción recomendable sería antes de machacar la tabla original, hacer el replace en una tabla nueva y revisar que todo esté ok.

Conclusiones

El Time Travel y el Fail-Safe son dos funcionalidades que nos proporciona Snowflake sin tener que mantener ni configurar prácticamente nada, y que cubren gran cantidad de casos de uso cómo consultas de histórico, recuperación rápida en caso de error o problema y la posibilidad de sacar instantáneas a un momento determinado en combinación con el zero-copy cloning.

Es importante tener muy claro los tiempos de retención de cada una de las bases de datos-esquemas tablas, y seleccionar el tipo de tabla adecuado en consecuencia, para optimizar al máximo el coste de almacenamiento.

Navegación

Introducción

¿Qué es el Time Travel?

¿Qué es el Fail-Safe?

¿Qué se puede hacer con el Time Travel?

¿Cómo utilizar el Fail-Safe?

¿Cómo se configura el Time Travel?

¿Cómo se configura el Fail-Safe?

Consideraciones a tener en cuenta en el Time Travel y el Fail-Safe

Costes del Time Travel y el Fail-Safe

¿Cómo utilizar el Time Travel? Casos de uso prácticos

Principales conclusiones

Autores

¿Quieres saber más de lo que ofrecemos y ver otros casos de éxito?
DESCUBRE BLUETAB

Roberto García Parra

Technical Delivery Manager

Gabriel Gallardo Ruiz

Senior Data Architect

SOLUCIONES, SOMOS EXPERTOS

DATA STRATEGY
DATA FABRIC
AUGMENTED ANALYTICS

Te puede interesar

Snowflake: Zero-Copy clone, o cómo librarte del duplicado de datos al clonar.

marzo 22, 2023
LEER MÁS

Mi experiencia en el mundo de Big Data – Parte I

octubre 14, 2021
LEER MÁS

Mi experiencia en el mundo de Big Data – Parte II

febrero 4, 2022
LEER MÁS

Bluetab se incorporará a IBM

julio 9, 2021
LEER MÁS

Algunas de las capacidades de Matillion ETL en Google Cloud

julio 11, 2022
LEER MÁS

Guía avanzada sobre almacenamiento en Snowflake

octubre 3, 2022
LEER MÁS

Publicado en: Blog, Tech

Gobierno de Datos: ¿tendencia o necesidad?

octubre 13, 2022 by Bluetab

Gobierno de Datos: ¿tendencia o necesidad?

Alvar Noe Arellanos

Business & IT Strategy Professional

En los últimos años la implementación de un gobierno de datos corporativo dentro de las diferentes organizaciones, independientemente de la industria a la que pertenezca. En cada una de estas implementaciones surge una pregunta recurrente “El Gobierno de Datos es una necesidad o una tendencia”. Realmente no es una pregunta fácil de contestar ya que deben considerarse varios aspectos para poder contestarla.

Con la llegada de la pandemia, las organizaciones tuvieron que evolucionar de manera acelerada a un esquema digital en el cual los datos, las personas, la escalabilidad de tecnología y la evolución de procesos, juegan un rol esencial para la evolución y trascendencia de las empresas

Si los datos se posicionan como un pilar esencial dentro de la evolución de las organizaciones, tiene sentido que el control y aprovechamiento total de estos requiera la necesidad de un gobierno de datos.

El Gobierno de Datos, según el marco metodológico DAMA®, es definido de la siguiente forma:

"El ejercicio de autoridad compartida, control y toma de decisiones (planificación, seguimiento y aplicación) a través de la gestión de los activos de datos"

Hasta este momento hemos identificado que el Gobierno de Datos es necesario para la evolución de una organización, aun no determinamos en que aspectos se estaría se centraría. Estos aspectos los listamos a continuación:

Organización

Colaboradores que interactúan en la gestión y administración de los activos de datos de la empresa relacionados con el Gobierno de Datos.

Procesos

Las tareas y actividades que conforman los procesos de gestión del Gobierno de Datos

Políticas y Estándares

Las políticas, estándares y lineamientos que permitan gestionar, controlar y estandarizar el Gobierno de Datos.

Tecnología

Tecnología, arquitectura, herramientas que se utilizan para la administración de la información relacionada con el Gobierno de Datos

Si bien estos pilares del Gobierno de Datos permitirán que los datos soporten la evolución digital de la organización, es importante aclarar que para que esto funcione es necesario mantener un modelo alineado a la estrategia de negocio, que sea sustentable y flexible, permitiendo identificar y ajustar de forma activa nuevas fuentes de información, SLAs, entre otros requerimientos que soporten los objetivos de negocio.

Con la implementación de un Gobierno de Datos dentro de las organizaciones se podrán obtener beneficios asociados directamente a las áreas de negocio, por ejemplo:

La obtención de estos beneficios permitirá que la evolución de las organizaciones frente a los retos globales y de las industrias, sea posible.

Dicho lo anterior se pude inferir que el gobierno de datos configura la gestión general de la disponibilidad, usabilidad, integridad y seguridad de los datos usados en una organización, permitiendo a las organizaciones eliminar una administración ineficiente de la información que afectaría a las organizaciones. Especialmente si miramos desde la perspectiva financiera y consideramos que el flujo de datos ha aumentado de forma exponencial en los últimos años a raíz del desarrollo de nuevas tecnologías y del crecimiento del mercado.

Tener una buena gestión de datos significa tomar las mejores decisiones para el negocio, lo que resulta en el aumento de la productividad y de la eficiencia operacional y, consecuentemente, en un incremento en los ingresos empresariales.

Una vez identificada la importancia y los beneficios que el gobierno de datos puede presentar podemos llegar a la conclusión que la implementación de un Gobierno de Datos dentro de una empresa que esta evolucionando a una cultura digital y data driven, es necesaria y no solo una tendencia a implementar según la industria a la cual la organización pertenece.

Alvar Noe Arellanos

Business & IT Strategy Professional

¿Quieres saber más de lo que ofrecemos y ver otros casos de éxito?
DESCUBRE BLUETAB

SOLUCIONES, SOMOS EXPERTOS

DATA STRATEGY
DATA FABRIC
AUGMENTED ANALYTICS

Te puede interesar

Hacia un Gobierno del Dato 2.0: Del Gobierno del Dato al Gobierno de los Productos de datos

enero 31, 2022
LEER MÁS

Mitos y verdades de los ingenieros de software

junio 13, 2022
LEER MÁS

Los Incentivos y el Desarrollo de Negocio en las Telecomunicaciones

octubre 9, 2020
LEER MÁS

Hashicorp Boundary

diciembre 3, 2020
LEER MÁS

Una estrategia analítica eficiente

diciembre 13, 2022
LEER MÁS

¿Qué está pasando en el mundo de la AI?

marzo 6, 2023
LEER MÁS

Publicado en: Tech

Guía avanzada sobre almacenamiento en Snowflake

octubre 3, 2022 by Bluetab

Guía avanzada sobre almacenamiento en Snowflake

Roberto García Parra

Technical Delivery Manager

Introducción 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ñías (Almacenamiento, procesamiento, explotación y soluciones de analítica avanzada) de una manera más flexible y sencilla que las soluciones de Datawarehouse tradicionales. 

El motor de queries y procesamiento de Snowflake está basado 100% en SQL para facilitar el acceso a la mayoría de los profesionales de datos, aunque Snowflake está haciendo esfuerzos por ampliar las posibilidades de desarrollo (Por ejemplo, recientemente ha sacado Snowpark, una API que permite a los desarrolladores que estén habituados a trabajar con Spark tanto en Scala cómo en Java y recientemente en Python, a poder migrar sus códigos de forma sencilla a Snowflake). Además, dispone de conectores nativos con una serie de partners que abarca todas las fases de la ingeniería de datos, cómo por ejemplo partners de integración de datos tan importantes cómo Matillion, Informatica, DBT o DataStage; de Business Intelligence cómo Domo, Cognos o Looker; o de Machine Learning cómo Alteryx, Dataiku o AWS Sagemaker.

La otra ventaja diferenciadora de Snowflake es que tiene unas capacidades de optimización que no requieren apenas de mantenimiento y cubren un abanico muy amplio de casos de uso, entre las que se podrían destacar la clusterización automática, el cacheo y el search optimization service, elementos en los que ahondaremos en detalle en futuros artículos, ya que en éste nos vamos a centrar sobre todo en las capacidades de almacenamiento.

Principales características diferenciadoras de Snowflake:

  • Pone al alcance de los usuarios funcionalidades avanzadas que se gestionan de forma sencilla, abstrayendo a los usuarios de lo que se maneja por debajo.
  • Multi-cloud: Se puede desplegar en cualquiera de los tres clouds más importantes (Amazon, Azure y Google) e incluso permite implementar una estrategia multi-cloud dónde la mayoría de la administración y operación corre por cuenta de Snowflake.
  • No hay que mantener ni hardware ni software. Todo gestionado por Snowflake y sin pérdida de servicio.
  • Gestión sencilla de las unidades de procesamiento (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áticamente tras un tiempo de inactividad, y vuelvan a levantarse de forma rápida cuándo entre una nueva petición (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ón del uso de la plataforma.

La arquitectura de Snowflake está basada en tres principales capas:

  1. La capa de almacenamiento, que es en la que nos centraremos en este artículo. Esta capa basada en microparticiones es la base de algunas de las funcionalidades más disruptivas de Snowflake cómo por ejemplo el Zero-copy cloning o el Time-to-Travel, que veremos también en futuros artículos.
  2. Capa de procesamiento.
  3. Cloud Services, que es la capa con la que se interactúa con Snowflake y es el cerebro que gestiona y coordina el resto de capas y componentes.

Objetivo del artículo

Vamos a entender en profundidad cómo funciona Snowflake en la capa de almacenamiento. A grandes líneas, veremos:

  • Cómo se almacenan, distribuyen y comprimen los datos.
  • La importancia de los metadatos a la hora de escanear de forma eficiente el almacenamiento cuándo se hace tanto una consulta, cómo una operación DML de inserción, actualización o borrado.
  • Cómo es este proceso de búsqueda en los datos, para reducir al máximo el número de bytes a escanear (y por tanto, la reducción en los tiempos de consulta).

Esto será la base para entender varias de las funcionalidades diferenciales que ofrece Snowflake:

  • 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ónde lo proporcionado por el almacenamiento no sea suficiente para obtener el rendimiento deseado.
  • Data Sharing, sin necesidad de replicar los datos físicamente.
  • Resiliencia: Zero-copy cloning, Time Travel y Fail Safe.

Introducción al almacenamiento

El almacenamiento en Snowflake se basa en la generación de ficheros comprimidos con un tamaño máximo 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ón de inserción-borrado-actualización siempre se hace generando un nuevo fichero de datos y actualizando los metadatos para saber cuáles son los ficheros que están activos en cada momento, además de otros metadatos que veremos más adelante en profundidad para eficientar la cantidad de bytes escaneados a la hora de ejecutar una query.

Objetivos del almacenamiento Snowflake

La forma en la que almacena los datos Snowflake está enfocada a dos objetivos principales:

  • Optimizar el rendimiento de las consultas, con una combinación de organización automática de los datos, almacenamiento columnar y el mantenimiento de una metadata.
  • Posibilitar varias de las características diferenciales que tiene Snowflake frente a otros Datawarehouse tradicionales, cómo por ejemplo:
    • Zero-copy cloning.
    • Time Travel.
    • Data Sharing sin necesidad de replicar el dato físicamente.

Principales características del almacenamiento en Snowflake

Compresión columnar: Snowflake analiza y comprime automáticamente los datos durante la carga de la tabla, agrupándolos por columnas. En función del tipo de datos de cada una de las columnas, selecciona el esquema de compresión más óptimo para cada una de ellas: Cada columna puede tener su propio esquema de compresión y aumentar-reducir de forma independiente. Gracias a esta eficiencia en la compresión, se obtiene una mejora significativa en los rendimientos al reducir la cantidad de datos a escanear, además de un ahorro en costes de almacenamiento, ya que Snowflake factura por la cantidad almacenada ya comprimida.

Microparticiones: 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, en Snowflake no es necesario declarar una forma de particionar los datos por una o más columnas, sino que él ya lo hace de manera automática de la siguiente forma: Por un lado, va insertando los datos según le llegan en bloques de almacenamiento que oscilan entre los 50 y los 500MB antes de compresión (16MB aprox comprimidos). Cuándo se llena un bloque, pasa al siguiente, y así sucesivamente hasta que todos los datos son insertados. Snowflake también encripta tanto en tránsito cómo en destino todos los datos.

Cada una de estas particiones son inmutables: en el caso en el que haya una actualización en alguna de las microparticiones, lo que se hace es crear una nueva versión 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ómo 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.

Metadatos en las microparticiones Snowflake

Para cada micropartición, Snowflake genera una metadata con la siguiente información:

A nivel columna

  • El rango de valores para cada una de las columnas de la micropartición.
  • Valores mínimo y máximo.
  • Conteo de valores diferentes.
  • Conteo de nulos.

A nivel tabla

  • Tamaño de tabla (en bytes).
  • Referencias de archivos y extensiones de tabla.
  • Conteo de filas.
  • Otras propiedades adicionales usadas tanto para la optimización cómo para el procesamiento de las queries.

Principales características del microparticionamiento de Snowflake

  • Automático y transparente para el usuario: A diferencia de otros sistemas tradicionales, no hay que declarar previamente un campo de partición, ni hacer un mantenimiento posterior.
  • Asegura la eficiencia en el podado tanto en las consultas, cómo en las operaciones DML.
  • Todas las particiones tienen un tamaño similar: En otros sistemas, el tamaño de las particiones depende del campo elegido, y puede haber un claro desbalance de particiones en función del número de ocurrencias que tenga cada valor del campo particionado (Hot partition Keys). El trade-off para tener estos tamaños similares es que pueden solaparse valores: Un determinado valor de columna (por ejemplo una fecha) puede estar en más de una micropartición. Cuánto mayor es el solapamiento en las particiones de un valor, menor será el podado, ya que habrá que recorrer más particiones para filtrar los valores correctos en una búsqueda.
  • Según Snowflake, este método de particionado automático sería suficiente para tablas con tamaños de hasta 1TB sin tener que plantearse otras opciones cómo por ejemplo el clusterizado.
  • En campos secuenciales cómo fechas o numéricos es dónde más vemos que se puede obtener un beneficio en esta forma de particionar, ya que si la inserción de los datos está ordenada por dichos campos, el podado (pruning) será altamente eficiente, y en consecuencia la cantidad de datos a escanear y la rapidez en la resolución de las queries.
  • El almacenamiento columnar permite que Snowflake solamente escanee aquellas columnas incluídas en la consulta. De ahí que sea importante incluir solamente las columnas que realmente necesitemos y evitar queries del tipo SELECT * si no es necesario consultar todas las columnas.

Entendiendo la organización de datos en Snowflake

Partiendo de los siguientes datos de ejemplo:

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:

Si por ejemplo, hacemos la siguiente query:

Select Fecha, sum(importe)

From ventas

Where fecha = ‘01/01/2022’

Snowflake recorrería los siguientes datos:

  • Primero se podan las microparticiones que no estén en el rango. En este caso, cómo estamos buscando el 1 de Enero, ignorará la segunda micropartición.
  • Dentro de la primera micropartición, dado que en la query solamente se están seleccionando las columnas fecha e importe de venta, no recorre la parte de los datos del cliente. Esto es posible gracias al almacenamiento columnar.

Si se buscan las ventas de un cliente específico:

Select sum(importe)

From ventas

Where cliente = ‘C2’

En este ejemplo, recorre las dos microparticiones, ya que C2 está dentro del rango de valores de ambas, aunque realmente C2 no está en la micropartición 1. Esto es lo que se comentaba en el apartado anterior de la posible dependencia que puede haber en la búsqueda de rangos en cada micropartición de cómo están distribuidos los datos.

DML’s en Snowflake

Para ver cómo 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ías de 60 call centers, seleccionando solamente los Call Center 1 y 20. Lo que haremos será operaciones atómicas de inserción, actualización y borrado para ver cómo se gestionan tanto los datos cómo los metadatos.

  • Inserción: Para comprobar cómo funciona la inserción insertamos dos nuevos registros con Call Center que no existen: El 10 y el 11.
    Los ficheros que componen las microparticiones son inmutables, por lo que Snowflake en la inserción puede ejecutar dos posibles acciones:
    • Crear un nuevo fichero con los registros existentes más el nuevo, y archivar el antiguo.
    • Crear una nueva partición para ese dato.
  • Actualización: Las acciones que realiza Snowflake para ejecutar una actualización son:
    • Identificar las microparticiones afectadas por la actualización.
    • Generar nuevos ficheros de micropartición que incluyan las modificaciones.
    • Archivar las versiones anteriores de los ficheros durante el tiempo marcado por el DATA_RETENTION_TIME_IN_DAYS.

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ón, y genera un nuevo fichero con los nuevos valores, archivando el anterior:

Si se actualiza alguno de los otros dos call center, el número de particiones recorridas sería mayor, lo cuál implica que el coste de las operaciones DML también se ve afectado por la manera en que estén organizados los datos.

  • Borrado: Snowflake procede de manera similar a la actualización:
    • Identifica las microparticiones afectadas por el borrado.
    • Genera nuevos ficheros de micropartición dónde no aparezcan los registros eliminados.
    • Archiva las versiones anteriores de los ficheros durante el tiempo marcado por el DATA_RETENTION_TIME_IN_DAYS.

La importancia de entender cómo 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úmero de días de retención en tablas (DATA_RETENTION_TIME_IN_DAYS) que se modifican frecuentemente, estaremos archivando muchas versiones de los datos que pueden incrementar considerablemente nuestro almacenamiento.

La principal ventaja es que Snowflake se encarga de todo este complejo mantenimiento siendo la gestión del almacenamiento transparente para el usuario.

En estos casos, para eficientar el almacenamiento es fundamental conocer los tres tipos principales de tablas que pone a nuestra disposición Snowflake, así cómo el concepto de Fail-Safe y Time-Travel:

Time-Travel: Periodo que, en función de la edición de Snowflake, (hasta un día en Standard y hasta 90 días en tablas permanentes a partir de edición Enterprise) permite almacenar todas las versiones por las que pasa una tabla, y habilita funcionalidades cómo poder restaurar datos en cualquier punto dentro de ese periodo, o hacer queries sobre un estado específico de los datos.

Fail-Safe: período de siete días durante el cuál se almacena cada versión de los datos en la que ha expirado su DATA_RETENTION_TIME_IN_DAYS y que permite la restauración de los mismos durante ese periodo pero solamente a través del soporte de Snowflake (Los usuarios no tienen acceso directo al Fail-Safe). Este periodo no es configurable y solamente está disponible en las tablas permanentes, cómo veremos a continuación.

Con estos dos conceptos claros, pasamos a describir los tres tipos principales de tablas en Snowflake:

  • Temporales: Solamente persisten durante la sesión, y no tienen Fail-Safe. Se puede definir Time-Travel de cero o 1 día.
  • Transitorias: A diferencia de las temporales, sí pueden persistir más allá de la sesión, pero solo permiten tener Time-Travel de hasta un día y tampoco incorporan Fail-Safe.
  • Permanentes: Igual que las transitorias, persisten más allá de una única sesión, pero permiten extender el Time-Travel hasta 90 días (siempre y cuándo se esté trabajando en una edición Enterprise o superior) e incorporan de caja el Fail-Safe (No configurable ni removible).

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ón-inserción, en el caso que tengamos una tabla permanente con un alto número de días de Time-Travel, nuestros costes de almacenamiento pueden verse incrementados.

La recomendación general para optimizar el almacenamiento es que se utilicen tablas temporales para tablas que simplemente utilicemos cómo tablas intermedias o staging, las transitorias para tablas permanentes que puedan ser fácilmente reproducibles desde fuera, y las permanentes para tablas críticas que tengan que estar siempre disponibles y que el coste de reprocesamiento en caso de desastre sería elevado.

Aspectos a tener en cuenta respecto al almacenamiento

  • Consultas por columnas no ordenadas en la inserción: 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án 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ñadir al filtro un campo tipo fecha o numérico por el que estén ordenados los datos, o plantear la posibilidad de añadir una cluster key por dicho campo, que es uno de los servicios de optimización con los que cuenta Snowflake. Otra opción sería crear una vista tanto standard cómo materializada que ordene por ese campo.

    Ejemplo dónde queda evidenciado esto, es, lanzamos una consulta sobre una gran tabla de unos 14.000 millones de filas, cuyos datos están ordenados por fecha y cliente. En esta tabla, queremos consultar los diferentes tipos de envío que se han hecho. Si lanzamos la consulta sin filtro:

Primero vemos que se escanean las 49.448 microparticiones, lo cuál es lógico ya que no hemos incluído filtro alguno. Por otro lado, se escanean 13,58GB de los 770GB que tiene la tabla. Esto se debe a que en la query hemos incluído una única columna, y ya que Snowflake cómo hemos comentado almacena los datos de forma columnar y comprimida, solamente accede a los datos de la columna que consultamos.

Si aplicamos un filtro sobre la columna Call Center, que es un numérico que toma valores entre 1 y 60, y es un campo por el que no se ha ordenado en la inserción de los datos, y buscamos por ejemplo el call center número 20:

select distinct cr_ship_mode_sk from «SNOWFLAKE_SAMPLE_DATA».»TPCDS_SF100TCL».»CATALOG_RETURNS» where cr_call_center_sk = 20 

Vemos que efectivamente, apenas se han podado valores: De las 49,448 microparticiones, 49.447 tenían en su rango de call center el 20, con lo cuál ha habido que recorrerlas igualmente.

Sin embargo, si incluímos en el filtro uno de los campos de clusterizado, por ejemplo el código de cliente:

Vemos que sólo se ha recorrido un 10% aprox de las microparticiones, y el tiempo de query ha bajado de 1 minuto 45 segundos a 12 segundos. 

Con esto se puede concluir que el principal factor de rendimiento en las consultas es el número de bytes que tenga que escanear Snowflake el cuál viene principalmente determinado por el número de particiones a escanear, y la cantidad de datos de cada columna, y que si solamente incluimos en el filtro columnas por las que no estén ordenados los datos o no estén incluídos en la cluster key, en tablas de gran tamaño el rendimiento puede verse afectado. Es recomendable incluir en los filtros al menos uno de los campos de ordenación o de las cluster key para que las queries sean eficientes, o de no poder ser así, Snowflake nos proporciona otras alternativas para mejorar el rendimiento cómo las vistas materializadas, el cacheo o el search optimization service.

  • Búsqueda por rangos en las microparticiones: A la hora de podar microparticiones, Snowflake busca en la metadata si el valor buscado está en el rango de valores mínimo-máximo de la columna filtrada en la micropartición. Esto genera una dependencia a la hora de podar valores en base a cómo estén distribuidos dichos rangos en las microparticiones, lo cuál puede afectar a la cantidad de microparticiones podadas cuándo buscamos por columnas por las que no estén ordenados o clusterizados los datos: Por ejemplo, nos podemos encontrar casos dónde 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.

En estos casos, Snowflake dice que en tablas con tamaños por debajo de 1TB la organización automática de datos debe ser suficiente para obtener buen rendimiento en las consultas.

Pruebas con Snowflake para entender cómo funciona el microparticionado y los metadatos asociados a las microparticiones

La tabla que se ha utilizado para estas pruebas contiene 100 millones de registros y seis columnas, dónde los datos se han distribuido en 49 particiones ocupando un total de 708MB (unos 14,5MB de media por micropartición). Los datos están ordenados por un campo de fecha.

Comentar que para estas pruebas, se ha utilizado la herramienta de Profiling de Snowflake, que está disponible desde el historial de queries. Hemos encontrado esta herramienta muy completa e intuitiva, y permite de un solo vistazo encontrar dónde se están generando los cuellos de botella en las queries, todo el plan de ejecución por el que pasa una query, así cómo las filas que salen de cada paso (lo cuál nos permite por ejemplo detectar cosas habituales de mal rendimiento cómo joins explosivos) y las microparticiones que se van podando en cada estado. Gracias a esta herramienta, hemos podido entender qué es lo que pasaba exactamente en cada una de las situaciones que hemos querido investigar y entender la gestión de Snowflake del almacenamiento.

Esta herramienta de profiling está disponible en el menú History de la UI, pinchando en la query que queramos analizar.

El objetivo de estas pruebas es entender la forma en la que Snowflake selecciona las microparticiones a recorrer y cómo de importante es la forma en la que se insertan los datos para mejorar el rendimiento en nuestras consultas, así cómo las columnas por las que se filtre.

En la tabla existe una columna, Call Center, dónde hay diferentes valores entre el 1 y el 60 pero con saltos (no están todos los posibles valores). Si hacemos una búsqueda por un call center específico de los que están:

Apreciamos que sea cuál sea el Call Center que incluyamos en el filtro siempre se recorren todas las microparticiones. La explicación es que Snowflake para determinar las microparticiones a recorrer, mira en la metadata de la columna Call Center si el valor buscado está dentro del rango, y en este caso, dónde los datos están ordenados por fecha, siempre se cumple que el valor está dentro del rango, por lo que tiene que recorrer todas las microparticiones.

Probamos a meter un nuevo registro de un Call Center con ID 11 que se sabe no aparece en los datos. Tras la inserción, el número 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ón anterior de la micropartición.

Hacemos una búsqueda por ese Call Center, que a priori está en una única micropartición, y al revisar el Profile:

Se aprecia que Snowflake ha tenido que escanear las 49 microparticiones aunque se sabe que el valor 11 está en una micropartición específica. Esto confirma que Snowflake busca en base a rangos de valores por columna, y no conoce los valores específicos de una columna que hay en cada micropartición.

Para evidenciar aún más este hecho, insertamos un nuevo registro de Call Center que esté fuera del posible rango de búsqueda: Call Center con ID 61. Tras la inserción, verificamos que el número de particiones se mantiene, pero cuando se hace una búsqueda por ese valor:

Únicamente ha escaneado una micropartición. Esto se debe a que el 61 es un valor que está fuera del rango de la metadata del resto de las microparticiones, con lo cuál, ha podido saber que el Call Center 61 estaba en una única micropartición.

La siguiente comprobación es ver cómo Snowflake ejecuta la búsqueda de un valor de la columna Call Center que no está en los datos, pero sí 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:

Cómo era de esperar, recorre todas las microparticiones, ya que el 12 entra en todos los posibles rangos de valores.

Para terminar de confirmar si Snowflake busca exclusivamente por rangos de valores, se crea una nueva tabla únicamente con los Call Center 1, 10 y 11. Esta nueva tabla tiene 8 microparticiones.

Si buscamos por el Call Center 5 (dentro de rango), recorre las 8 microparticiones aunque el Call Center no exista.

Si buscamos por el Call Center 12, directamente la metadata devuelve que ese Call Center no existe, y por tanto, no recorre ninguna micropartición.

Pero ahora, si buscamos por el valor 11, que recordemos fue una nueva inserción que metimos y justo está en el final del rango, en este caso Snowflake sí es capaz de podar el resto de microparticiones dónde no está el valor:

El motivo está en que se sabe que el resto de microparticiones tienen un rango 1-10, con lo cuál, la única que cumple estar en rango 1-11 es dónde verdaderamente está el valor. Sin embargo, en la otra tabla dónde era altamente probable que todas las microparticiones en la columna Call Center estuviesen en rango 1-60, ahí sí que tuvo que recorrerlas todas para saber dónde estaba el Call Center 11.

Conclusión de las pruebas:

Cuándo tengamos bajo rendimiento en consultas, hay dos indicadores principales a revisar en el profiling: Número de particiones escaneadas y cantidad de datos procesados.

Para mejorar la consulta, el objetivo es reducir el número de ambas: Para recorrer menos particiones hay que añadir filtros por campos en base a los cuáles se estén ordenando los datos (generalmente fechas o id’s numéricos) o replantearnos si ese campo es importante a la hora de filtrar, que los datos estén ordenados por dicho campo. Por supuesto, revisar también si las columnas que utilizamos en la consulta se pueden reducir. 

Si esto no es posible, tendríamos que plantearnos otras estrategias de optimización, cómo clusterizar la tabla en base a ese campo, utilización de cachés, ver si el caso de uso se ajusta a la utilización del search optimization service, o la utilización de vistas materializadas que pueden a su vez estar clusterizadas o no. El detalle de estas estrategias queda fuera del alcance de este artículo.

Principales conclusiones del funcionamiento del almacenamiento en Snowflake

  • El orden de inserción de los datos importa. Es recomendable insertar los datos ordenadamente en base a los filtrados más frecuentes que se vayan a hacer en la explotación.
  • Al almacenar de forma columnar los datos, el solamente seleccionar las columnas necesarias para la consulta reduce el número de bytes escaneados y por tanto el tiempo de resolución de consulta. Es recomendable evitar los SELECT * o añadir columnas innecesarias en las queries.
  • Es muy importante de cara al rendimiento seleccionar el tipo de datos más adecuado para cada columna, ya que Snowflake podrá reducir de manera más eficiente el tamaño de los datos, y esto se traduce en menores tiempos de escaneo, y por tanto de respuestas en las queries.
  • Para que las queries tengan un buen rendimiento, es aconsejable incluir un filtro de la columna por la que estén ordenados-clusterizados los datos y revisar en el profile de la query que tenga un buen porcentaje de poda de particiones.
  • En columnas de cardinalidad muy baja (1-10 valores diferentes), si hacemos búsquedas exclusivamente por ellas, y los datos no están ordenados o clusterizados por estas columnas, puede que no se poden particiones en las búsquedas. Con volúmenes de GB, el recorrer todas las particiones incluso con la talla más pequeña no perjudica el rendimiento y Snowflake maneja perfectamente, pero en volúmenes en el rango de centenas de GB, la diferencia entre tener o no la cluster key para buscar un valor en concreto, sí puede afectar en el número de bytes a escanear y por tanto en los tiempos de respuesta, con lo cuál es importante hacer un estudio de tiempos de consulta, para lo cuál Snowflake nos proporciona una potente herramienta de profiling, que a nosotros particularmente nos ha sido de gran utilidad para poder elaborar este artículo.

Entendiendo cómo Snowflake gestiona el almacenamiento a nivel inserción, actualización y borrado de datos y cómo se gestionan estos datos a la hora de realizar consultas, estaríamos en disposición de dar el siguiente paso que es entender todas las funciones avanzadas que proporciona Snowflake a nivel de optimización, compartición y seguridad-resiliencia en los datos. Éste será el objetivo de siguientes artículos.

Referencias

Documentación oficial de Snowflake https://docs.snowflake.com/en/

Navegación

Introducción

Objetivo

Introducción al almacenamiento

Objetivos del almacenamiento

Principales características del almacenamiento

Metadatos en las microparticiones

Principales características del microparticionamiento

Entendiendo la organización de datos

DML’s en Snowflake

Aspectos a tener en cuenta respecto al almacenamiento

Pruebas con Snowflake

Principales conclusiones

Referencias

Autores

¿Quieres saber más de lo que ofrecemos y ver otros casos de éxito?
DESCUBRE BLUETAB

Roberto García Parra

Technical Delivery Manager

SOLUCIONES, SOMOS EXPERTOS

DATA STRATEGY
DATA FABRIC
AUGMENTED ANALYTICS

Te puede interesar

$ docker run 2021

febrero 2, 2021
LEER MÁS

Desplegando una plataforma CI/CD escalable con Jenkins y Kubernetes

septiembre 22, 2021
LEER MÁS

MODELOS DE ENTREGA DE SERVICIOS EN LA NUBE

junio 27, 2022
LEER MÁS

Creando una comunidad dataHub en tu organización

septiembre 15, 2022
LEER MÁS

Espiando a tu kubernetes con kubewatch

septiembre 14, 2020
LEER MÁS

Detección de Fraude Bancario con aprendizaje automático

septiembre 17, 2020
LEER MÁS

Publicado en: Blog, Tech

Características esenciales que debemos tener en cuenta al adoptar un paradigma en la nube

septiembre 12, 2022 by Bluetab

Características esenciales que debemos tener en cuenta al adoptar un paradigma en la nube

Alejandro León

Delivery Manager

El NIST (National Institute of Standards and Technology), habla de las 5 características esenciales para una buena administración e implementación del paradigma en la nube. En este artículo se revisarán estas características en profundidad, ya que son aspectos importantes para tener en cuenta al momento adoptar el cómputo en la nube.

Características esenciales

Existe una variedad de servicios diferentes que se ofrecen bajo la modalidad de cómputo en la nube, y cada uno de los servicios ofrecidos tiene un fin único. Sin embargo, existe una serie de características comunes que define al cómputo en la nube, y que hace posible identificarlo como tal.

Según el NIST, las 5 características esenciales del cómputo en la nube son:

  • Autoservicio bajo demanda
  • Despliegue de infraestructura desde la red
  • Agrupación de recursos
  • Elasticidad
  • Medir un servicio

Para entenderlas mejor, echemos un vistazo al detalle de cada uno de estos puntos.

Autoservicio bajo demanda

En estos casos, cada uno de los usuarios u organizaciones que opta por utilizar alguna de las ofertas de servicios de cómputo en la nube es responsable de la configuración de los recursos y el despliegue de estos.

De esta forma, el usuario final es quien decide que recursos quiere o necesita utilizar y cuál será la capacidad asignada a cada uno de los recursos, y es el mismo usuario quien puede configurar estas opciones desde un centro de administración de dichos recursos.

Despliegue de infraestructura desde la red

Todos los servicios ofrecidos bajo el paradigma de cómputo en la nube deben de ser accesibles a través de internet, de forma que un usuario puede hacer uso de ellos en cualquier momento de acuerdo con sus necesidades, y, muy importante desde cualquier parte del mundo, sin necesidad de tener acceso físico a la infraestructura que brinda soporte.

Agrupación de recursos (Disposición de infraestructura)

Cada proveedor de servicios de cómputo en la nube mantiene un gran número de recursos de hardware disponibles para sus clientes. Cada que uno de ellos realiza una solicitud y el proveedor asigna los recursos mediante un modelo de múltiples tenencias. Esto, en esencia significa que todos sus clientes están haciendo uso de la una infraestructura compartida. Además, todos los recursos disponibles se agrupan por cliente, al cual se le asigna un acceso único para cada uno de ellos. De esta forma, cada cliente solo puede ver sus recursos y no tiene conocimiento de los recursos asignados a otros clientes.

Elasticidad

Sin importar cual sea el proveedor de cómputo en la nube, el usuario cuenta con una flexibilidad en el despliegue de los recursos. Esta flexibilidad es una abstracción del despliegue de la infraestructura física que el proveedor de servicios debe realizar para satisfacer las necesidades del cliente.

La infraestructura que soporta los centros de datos de los proveedores de los servicios generalmente hace uso de técnicas de cómputo distribuido o virtualización, que son transparentes para el usuario final.

De esta forma, el usuario tiene el control sobre los recursos que necesita, por lo que puede realizar peticiones para aumentar o disminuir las cantidades y/o capacidades de los recursos contratados, y el proveedor debe ser el encargado de administrar ese cambio en su infraestructura de forma transparente y sencilla para dar una respuesta rápida y satisfactoria a las solicitudes de sus usuarios.

Maneras de medir el servicio

Los proveedores de servicios de cómputo en la nube establecen controles para poder realizar una medición de los servicios utilizados por los usuarios. Dependiendo del tipo de recurso ofrecido, se acuerda y establece con el usuario un método de medición de uso de este, por lo general es por uso, o por servicio.

Por ejemplo, en un servicio de almacenamiento de datos en la nube el proveedor puede establecer un precio fijo para los archivos almacenados, o por el tiempo de almacenamiento, o por el espacio de almacenamiento utilizando, o una combinación de 3 factores.

 

Conclusiones

El cómputo en la nube representa una evolución con respecto a un modelo de cómputo tradicional, en el cual particulares u organizaciones necesitan adquirir todos los elementos necesarios para construir una infraestructura tecnológica capaz de soportar sus operaciones o nuevos proyectos.

La oferta de servicios de cómputo en la nube hace más sencillo la implementación de sistemas de información, sin la necesidad de contar con espacio físico para la instalación de equipos físicos, y con un potencial ahorro al hacer uso de modelos de cobro como son las suscripciones de pago por uso.

Es importante subrayar que el cómputo en la nube no es un reemplazo directo para la implementación de un centro de datos en una organización, sino que representa una alternativa con un diferente modo de operación y un potencial ahorro en costos. Queda como responsabilidad de las organizaciones realizar un estudio para verificar la factibilidad en la contratación de servicios de cómputo en la nube y el modelo de servicios requerido según sus necesidades.

Alejandro León

Delivery Manager

¿Quieres saber más de lo que ofrecemos y ver otros casos de éxito?
DESCUBRE BLUETAB

SOLUCIONES, SOMOS EXPERTOS

DATA STRATEGY
DATA FABRIC
AUGMENTED ANALYTICS

Te puede interesar

Gobierno de Datos: ¿tendencia o necesidad?

octubre 13, 2022
LEER MÁS

Gobierno del Dato: Una mirada en la realidad y el futuro

mayo 18, 2022
LEER MÁS

Características esenciales que debemos tener en cuenta al adoptar un paradigma en la nube

septiembre 12, 2022
LEER MÁS

Introducción a los productos de HashiCorp

agosto 25, 2020
LEER MÁS

¿Cómo gobernar los productos de datos? Hacia un gobierno de los datos federado

mayo 12, 2022
LEER MÁS

¿Cuánto vale tu cliente?

octubre 1, 2020
LEER MÁS

Publicado en: Blog, Blog, Destacado, Tech

Data Mesh

julio 27, 2022 by Bluetab

Sí, Data Mesh es realmente transformacional, pero…
¿quién me ayuda a implantarlo?

En las últimas décadas, las compañías han tratado de generar o determinar un lugar que les permita mantener, controlar y acceder a datos analíticos de su empresa y del mercado; esto con el objetivo de mejorar su negocio.

Un ejemplo típico de ello es la utilización datos del comportamiento de los clientes y el uso de sus productos para la obtención de conocimientos claros y prácticos que les permitan administrar más eficientemente el negocio, así como mejorar y crear nuevos productos.

Sin embargo, al tratar de generar estas entradas de información, los profesionales dentro de la industria se enfrentan a varios retos que pueden llegar a crear mucha frustración y caminos cerrados. Tecnologías como el Big Data o los Data Lakes han ido dando soluciones conforme se evolucionaban los modelos.

Desde mayo de 2019 con la publicación de Zhamak Dehghani, estamos viendo una nueva evolución de las prácticas para diseñar arquitecturas de datos que están cambiando estos modelos del mundo del Big Data y del Data Lake.

Hasta ahora las clásicas tres capas de ingesta, procesamiento y publicación resultaban suficientemente eficientes. Pero esa eficiencia basada en la centralización y el gobierno, hoy genera silos de conocimiento, cuellos de botella en las organizaciones complejas, falta de escalabilidad en la agregación de características y en definitiva desconexión entre los originadores de la información y los consumidores.

El enfoque de Data Mesh es más que una metodología, un paradigma para la integración de una arquitectura de datos que descentraliza la propiedad de los dominios de datos, y al mismo tiempo define productos de datos analíticos, en un entorno que equilibra le gestión gobernada y la autonomía de los citados dominios. El paradigma Data Mesh, que hereda conceptos de la filosofía DDD (Data Driven Design), identifica cuatro conceptos como base de su modelo:

  • Los dominios como dueños de los datos, dominios cuya concepción inicial puede aproximarse a los dominios de negocio, y es donde se definen las entidades de datos y las relaciones con otros dominios para su consumo.
  • Los datos como producto, y como tal, pasan a ser susceptibles de proveer niveles de servicio. Pasando la responsabilidad de los mismo de la plataforma al equipo responsable del dominio.
  • La plataforma como autoservicio, automatizada y asegurando la independencia y la autonomía de cada dominio.
  • El gobierno federado, que asegure las decisiones próximas a los dominios pero que a la vez establezca las reglas de mínimos que aseguren la interoperabilidad entre ellos.

Este nuevo modelo supone además un cambio organizacional para asegurar su éxito. Los dominios además de dueños de sus productos de datos deben ser autónomos a la hora de desarrollar nuevos productos tanto para consumo propio como de otros dominios. Y, además, deben asegurar el consumo y el gobierno de los productos de datos. Y para ello deben contar con el conocimiento necesario de las plataformas, de forma que se asegure su autonomía, descargando del equipo de plataforma ciertas responsabilidades de gestión de dichos productos de datos.

Estos cambios a modelos más ágiles, pero a la vez de responsabilidades distribuidas, son fundamentalmente culturales, y requieren contar con equipos maduros capaces de asumir de forma autónoma la nueva distribución de responsabilidades, los nuevos procesos y su gobierno.

Vale, pero ¿por dónde empiezo?

Hoy nuestros clientes se enfrentan aún a un modelo en proceso de maduración en el mercado que genera muchas cuestiones de enfoque inicial.  Pese a que parece claro que ese equilibrio entre gobernabilidad y autonomía puede aportar eficiencias, el modelo metodológico de Data Mesh es aún emergente, y por descontado requiere del soporte de equipos senior técnicos y de negocio con alto nivel de madurez, capaces de tomar decisiones ágiles a lo largo del proceso, que no puede entenderse como puntual, sino de medio o largo plazo.

Bluetab a lo largo de los proyectos en entornos de clientes, ha desarrollado una metodología basada en experiencias de implantación de modelos de gobierno que aseguran un enfoque adecuado de este proceso de transformación. Una metodología muy operativa enfocada, más allá de un trabajo teórico, a la aplicación práctica de los modelos a los diferentes ecosistemas de nuestros clientes.

Esto se lleva a cabo estableciendo primero, casos de uso controlados y relevantes que permitan la visión desde la generación hasta el consumo de la información requerida por negocio, posteriormente, definiendo el plan de despliegue a los demás casos de uso de la organización y, finalmente y en paralelo, actuando sobre los requerimientos del cambio organizacional con comunicación y acciones específicas que habiliten la gestión del cambio.

Esta metodología inicia con el apoyo a la definición del contexto de dominios y la identificación de un primer caso de uso (MVP) que permita la visión end-to-end de los requerimientos a lo largo de los cuatro elementos, los citados dominios, los productos de datos y sus interdependencias, el modelo de autoservicio y las arquitecturas habilitadoras, y los requisitos de un gobierno no limitativo.

Una vez establecido dicho MVP e implantado, se genera el entendimiento global necesario para la definición de un plan de despliegue capaz de escalar a todo el ecosistema con éxito. Un plan que mediante métodos ágiles irá adaptándose a las diferentes particularidades y al propio cambio de requerimientos de negocio en el tiempo.

Pero el valor de nuestra aportación está en que, a lo largo de nuestros proyectos, hemos desarrollado herramientas prácticas de automatización para la implantación práctica de los modelos, aceleradores que Bluetab pone a disposición de sus clientes y que aseguran la optimización de los tiempos en el proceso de despliegue y su posterior evolución, y el apoyo a los clientes para una definición del modelo adecuado a su ecosistema y adaptada a sus requerimientos de negocio. Todo ello soportado por una estrategia de medición del valor aportado mediante datos objetivados KPIs.

En la definición de un ecosistema orientado a dominios es crucial el entendimiento del negocio y de la realidad de los consumos de datos dentro de cada una de las estructuras organizativas. A partir de ahí se puede establecer el debate para una definición de dominios consistente, acordada y de largo plazo.

Una herramienta como nuestra Matriz de Convergencia, donde se cruzan consumos, proyectos, orígenes, etc., permite una evaluación objetiva y profundizar en un mismo entendimiento y nomenclatura común en la organización. A partir de ahí, la definición del primer caso de uso y la priorización en el plan de escalado posterior se realiza de forma consistente.

En la generación de productos de datos, hay varios factores relevantes además del entendimiento y los modelos del consumo seguramente mediante API´s y una estrategia de disponibilización con la definición de mínimos requeribles. Uno de esos factores es la evaluación de la aportación del valor de dichos productos, y otro la estrategia de comunicación y comunicación/disponibilización a los demás dominios.

Para todo ello nuestro asset de gobierno del dato, Truedat, posibilita una solución que cubre desde el metadatado, a la generación de un Marketplace común, asegurando el control de los mínimos de gestión.

En la gestión del gobierno federado y el equilibrio entre el control y la autonomía de los dominios, nuestra Matriz de Madurez es fundamental para la evaluación del nivel de dicha madurez y el establecimiento del programa que cubra el gap de requerimientos. Y una vez establecido el programa, esta misma suite de servicios, Truedat, aporta capacidades adecuadas de calidad o trazabilidad que aseguran la implementación de las reglas que definan los propietarios en los dominios y la gestión técnica del end-to-end del ciclo de vida del dato.

Y finalmente en el desarrollo de una plataforma automatizada y enfocada al autoservicio de los dominios, nuestros modelos de arquitecturas, así como nuestras herramientas de despliegue automático de servicios y nuestros modelos de despliegue de estrategias Devops y MLops, aseguran una implantación optimizada de la estrategia y un time-to-market eficiente en su evolución de requerimientos.

La implantación de una estrategia Data Mesh genera aún muchas dudas sobre cómo abordarla en entornos complejos en el que coexisten diferentes arquitecturas, modelos de datos y requerimientos de consumo. Nuestro enfoque metodológico, más dirigido al desarrollo práctico de la puesta en marcha de cada uno de los pilares de la estrategia, puede asegurarte un despliegue ágil y en unos tiempos asumibles. De esta forma tanto las áreas técnicas como negocio pueden obtener el retorno de valor en los plazos requeridos.    

Síguenos y en próximos artículos entraremos en mayor detalle sobre cómo aterrizar de forma práctica y eficiente en este nuevo paradigma Data Mesh.

Autores

Liliana Palestina

CTO

Alvar Noe Arellanos

Business & IT Strategy Professional

Juan Manuel Sanchez

Data Strategy

Armando Camargo

Data Governance Manager

Jesus Saavedra

BI Manager

José Carranceja

COO

¿Quieres saber más de lo que ofrecemos y ver otros casos de éxito?
DESCUBRE BLUETAB

SOLUCIONES, SOMOS EXPERTOS

DATA STRATEGY
DATA FABRIC
AUGMENTED ANALYTICS

Te puede interesar

Databricks sobre Azure – Una perspectiva de Arquitectura (parte 1)

febrero 15, 2022
LEER MÁS

Data-Drive Agriculture; Big Data, Cloud & AI aplicados

noviembre 4, 2020
LEER MÁS

Serverless Microservices

octubre 14, 2021
LEER MÁS

Tenemos Plan B

septiembre 17, 2020
LEER MÁS

Databricks sobre AWS – Una perspectiva de arquitectura (parte 2)

enero 27, 2022
LEER MÁS

Del negocio físico a la explosión del On-Line

abril 7, 2021
LEER MÁS

Publicado en: Blog, Tech

  • Ir a la página 1
  • Ir a la página 2
  • Ir a la página 3
  • Páginas intermedias omitidas …
  • Ir a la página 5
  • Ir a la página siguiente »

Footer

LegalPrivacidadPolítica de cookies

Patrono

Patrocinador

© 2022 Bluetab Solutions Group, SL. All rights reserved.