Como ya presentamos en el post ¿Qué es Snowflake?, Snowflake es una plataforma ofrecida en formato SaaS que proporciona un data-warehouse construido en la nube y que da la posibilidad al usuario de elegir sobre qué proveedor de servicios cloud (ya sea AWS, Azure o GCP) quiere que ésta se levante.
Snowflake está construido completamente sobre infraestructura en cloud y, por ello, todos sus componentes se ejecutan sobre una infraestructura de nube pública (a excepción de SnowSQL, su cliente de línea de comandos, el cual es opcional), lo que hace que no exista ningún software que instalar, configurar y/o administrar.
Además, como ya os contamos, su arquitectura está compuesta por 3 capas integradas entre sí de forma lógica pero que se encuentran físicamente separadas; un enfoque que permite combinar las ventajas de una arquitectura de disco compartido con el rendimiento y los beneficios de escalabilidad horizontal de una arquitectura distribuida. Estas tres capas las conforman:
Un almacenamiento centralizado.
Un cómputo totalmente separado de los datos.
Un conjunto de servicios en la nube.
Y aunque Snowflake admite varias formas de conectarse al servicio, en este post, os vamos a presentar su interfaz gráfica y algunas de sus principales características, utilizando para ello un pequeño conjunto de datos sobre reservas hoteleras (disponible en kaggle). Además, os enseñaremos cómo realizar y consumir de forma sencilla copias compartidas de datos utilizando la funcionalidad de Data-Sharing.
Conociendo Snowflake UI
Snowflake UI es una interfaz de usuario basada en web desde la que se puede acceder a todos los aspectos de gestión y uso de Snowflake.
Esta interfaz está dividida en un menú superior con las diferentes opciones bajo el cual se encuentra lo que podríamos llamar la ‘zona de trabajo’ y que varía en función de la opción que seleccionemos en el menú.
En lo que se refiere al menú las opciones que presenta difieren en función del rol con el que se interactúa, mostrando menos posibilidades cuanto menos permisos tenga el rol.
En la imagen anterior, os mostramos cuál es su apariencia y lo hacemos accediendo con el rol de ‘ACCOUNTADMIN’ por ser el que dispone de todas sus opciones (sin embargo, para el resto de roles su apariencia no varía, sino que únicamente algunas de las opciones desaparecen). Todas estas opciones son:
Databases: desde donde se realiza toda la operativa relacionada con las bases de datos y los objetos que éstas contienen (tablas, vistas, esquemas…)
Shares: aquí se accede a la funcionalidad que permite el intercambio de datos, ya sea de salida (pudiéndose crear copias compartidas de datos y administrar las mismas) o de entrada (permitiendo visualizar aquellas copias de datos sobre las que tenemos acceso y crear bases de datos a partir de ellas).
Data Marketplace: donde se accede a la funcionalidad que permite al usuario ser tanto consumidor como proveedor de datos. Como consumidor puede acceder a una variedad de datos de terceros, permitiéndole tener esos datasets disponibles directamente en su cuenta y realizar, por ejemplo, consultas sobre los mismos o enriquecer con ellos sus propios datos. Mientras que como proveedor puede publicar sus propios conjuntos de datos para que sean utilizados por terceros.
Warehouses: realiza toda la operativa relacionada con los ‘virtual warehouses’, los cuales hacen referencia a los recursos informáticos que Snowflake destina al cómputo.
Worksheets: pueden realizarse todas las consultas SQL (tanto operaciones DML como DDL) y ver los resultados devueltos.
History: nos permite consultar todos los detalles referentes a las consultas ejecutadas en los últimos 14 días, incluidas aquellas realizadas desde SnowSQL (el cliente de línea de comandos de Snowflake) u otros clientes SQL.
Account: para gestionar todos los aspectos relativos a la cuenta, como son el consumo, la facturación, la administración de usuarios, roles y políticas...
Partner Connect: permite crear cuentas de pruebas con partners de Snowflake e integrarlas con Snowflake; lo cual es una opción interesante de cara a integrar herramientas ya que permite probar distintas alternativas y poder adoptar aquellas que mejor se adapten según necesidades.
Notifications: desde donde pueden habilitarse los avisos relacionados con la monitorización de recursos (como, por ejemplo, el consumo de la cuenta o de un virtual warehouse).
Pestaña de usuario: para cambiar la contraseña, el rol (en caso de que el usuario tenga más de uno habilitado) y las preferencias de la cuenta, así como cerrar sesión.
Snowflake Worksheets
De todas las opciones del menú superior, quizá la principal sea la relativa a los Worksheets, ya que desde ella nos es posible realizar casi todas las tareas (algunas de ellas relativas a otras opciones del menú) simplemente usando SQL. Entre estas tareas estarían:
La creación y administración de usuarios y otros objetos a nivel de cuenta (siempre y cuando se tengan los permisos de administración necesarios).
La creación y uso de warehouses (empleados para el cómputo).
La creación y modificación de bases de datos y todos sus objetos relativos (tablas, vistas, esquemas, etc.).
La carga de datos en tablas y la manipulación de éstos.
La realización de consultas y la monitorización de las mismas.
Su apariencia es la siguiente y está dividida en 6 grandes bloques que hemos enumerado en la imagen:
Navegador de objetos: el usuario puede explorar las bases de datos, esquemas, tablas y vistas que son accesibles por el rol utilizado para el worksheet; listado que se actualiza de forma automática cuando se cambia el contexto.
Menú contextual: el usuario puede configurar el contexto de ejecución para el worksheet, ya que le permite seleccionar qué rol (siempre y cuando el usuario disponga de más de uno habilitado) y qué virtual warehouse utilizar pudiendo incluso modificar el tamaño del mismo con un simple click. Además, también podrá establecer cuál será el esquema y la base de datos a la que se enviarán las próximas consultas SQL.
Editor de SQL: se escriben y ejecutan las instrucciones SQL.
Panel de información sobre la tabla/vista seleccionada en el navegador de objetos: Donde el usuario podrá ver de forma rápida el número de registros que contiene la tabla/vista y el tamaño que ocupa, así como el listado de sus campos y el tipo de datos de cada uno de ellos.
Panel de resultados: Donde el usuario podrá ver, además de los resultados devueltos por la consulta SQL, el número de registros que esa consulta devuelve y un resumen de la duración total de la misma sobre una pequeña una barra de estado; detalle que podrá ampliar posicionándose sobre dicha barra ya que aparecerá una ventana emergente que mostrará el desglose completo de la duración.
Historial de las últimas sentencias SQL ejecutadas: Se trata de un breve resumen de las últimas 50 queries ejecutadas desde donde consultar aspectos como la duración o la sentencia ejecutada. Para obtener más detalles sobre cada una de ellas, bastará con seleccionar el link correspondiente a su query ‘Query ID’. Y en caso de querer consultar una mayor profundidad histórica, podremos acceder al histórico de los últimos 14 días seleccionando la opción ‘History’ del menú superior.
Mencionar, también, que Snowflake está preparando una modernización de su interfaz, la cual dispondrá de nuevas funcionalidades, entre las que se encuentra Snowsight, que será el reemplazo de las hojas de trabajo SQL (conocidas como Worksheets) y que está diseñado para el análisis de datos, permitiendo tanto la realización de consultas SQL sobre los datos como la representación gráfica de los resultados devueltos por estas.
Compartiendo datos con Snowflake Data-Sharing
A medida que el volumen de datos en las organizaciones continúa aumentando de forma exponencial, también lo hace su necesidad de intercambiar información; sin embargo, la forma tradicional de compartir datos es, en ocasiones, ineficiente, ya que implica tener que copiar, preparar y descargar los datos antes de enviarlos. Es por ello que, con la motivación de esta necesidad, cada vez es mayor la búsqueda de nuevas formas que permitan compartir datos a escala de forma segura.
Snowflake proporciona a las organizaciones la posibilidad de crear sus propios intercambios de datos para mejorar la colaboración a través de Data-Sharing; funcionalidad que permite intercambiar datos de forma segura, y a la cual puede accederse desde la pestaña Shares del menú.
Mediante esta funcionalidad, Snowflake permite compartir datos a través de recursos compartidos (llamados shares), que son creados por proveedores de datos e "importados" por consumidores de datos. Por tanto, una cuenta puede tener:
Inbound shares: recursos que otras cuentas de proveedores de datos han compartido con el usuario de la cuenta, el cual actúa como consumidor de esos datos. Desde la interfaz, el usuario consumidor puede ver todos los recursos compartidos de sus proveedores de datos y crear bases de datos a partir de ellos.
Outbound shares: recursos compartidos creados por el usuario de la cuenta como proveedor de datos con el propósito de compartir los mismos con cuentas de terceros que actúan como consumidores. Desde la interfaz, el usuario proveedor puede crear estos recursos compartidos, ver y administrar los que haya creado previamente o aquellos sobre los que tiene privilegios de acceso, agregar cuentas de consumidores a sus recursos, así como también editarlos y eliminarlos.
Con Data-Sharing no se copian ni transfieren datos reales entre cuentas, sino que el intercambio de datos se realiza a través de la capa de servicios y el almacén de metadatos únicos de Snowflake. Esto implica que:
Los datos existen una única vez (esto es, en un único sitio) y es el proveedor el dueño de los mismos y quien otorga el acceso a ellos a los consumidores, los cuales podrán consultarlos mediante la creación de una base de datos de solo lectura a partir del recurso compartido. Por tanto, los usuarios de una cuenta de consumidor pueden ver y consultar datos, pero no pueden insertar ni actualizar datos, ni tampoco crear objetos en la base de datos, asimismo tampoco podrán crear un clon de la información ni compartirla con otras cuentas.
Los datos compartidos no ocupan espacio de almacenamiento en la cuenta de los consumidores, los cuales, por tanto, no incurren en costes de almacenamiento aunque sí en costes de cómputo asociados a los recursos informáticos utilizados para consultarlos.
Los shares (y todos los nuevos objetos agregados a los mismos) están disponibles de inmediato en el momento en que se comparten para todos los consumidores, lo que brinda acceso en tiempo real a los datos compartidos.
Además, es importante señalar que el intercambio de datos solo se admite entre cuentas de Snowflake. Sin embargo, para facilitar el intercambio de datos con aquellos consumidores que aún no tienen una cuenta, Snowflake da la posibilidad a los proveedores de crear ‘reader accounts’ (cuentas de sólo lectura). Estas cuentas pertenecen a la cuenta del proveedor que las crea y proporcionan una forma rápida y fácil de compartir datos sin que el consumidor se convierta en cliente de Snowflake, aunque tienen la limitación de que únicamente pueden consumir datos de la cuenta del proveedor al que pertenecen.
Una vez explicado qué es Data-Sharing y cómo funciona, vamos a contaros cómo crear un outbound-share desde una cuenta proveedor y cómo consumir un inbound-share desde una cuenta consumidor:
Creación de un share
Para la realización de las tareas asociadas con la creación, la configuración y el mantenimiento de recursos compartidos es necesario utilizar el rol de ACCOUNTADMIN (o un rol al que se le haya otorgado el privilegio global CREATE SHARES). Con dicho rol, accederemos a la pestaña ‘Shares’ del menú superior y seleccionaremos la pestaña de ‘Outbound’ desde donde seleccionaremos la opción de crear.
Tras ello, deberemos indicar el nombre que tendrá el recurso compartido y seleccionar qué base de datos y qué objetos queremos compartir.
Una vez creado, Snowflake nos dará la opción revisarlo, obtener una vista previa de sus tablas y validar las vistas.
A continuación, podremos añadir las cuentas consumidoras de esa información.
En nuestro caso, crearemos una cuenta de solo lectura a la que concederemos el acceso a los datos.
Una vez creado, desde la pestaña de ‘Outbound’ de la pestaña ‘Shares’ podrá visualizarse el recurso compartido y gestionarse todos sus aspectos relacionados.
Consumo de un share
Para la realización de las tareas asociadas con la creación de bases de datos a partir de recursos compartidos puestos a disposición por los proveedores de datos y el uso de las bases de datos para consultas y otras operaciones es necesario utilizar el rol de ACCOUNTADMIN (o un rol al que se le haya otorgado el privilegio global IMPORT SHARES). Con dicho rol, accederemos a la pestaña ‘Shares’ del menú superior y seleccionaremos la pestaña de ‘Inbound’ desde donde podremos visualizar todos los recursos compartidos sobre los que tenemos acceso.
A continuación, seleccionamos el recurso que queremos consumir y crearemos una nueva base de datos a partir de él. Es importante tener en cuenta que solo podremos realizar esta acción si previamente no se ha creado una base de datos para dicho recurso compartido (es decir, si la columna ‘Database’ está vacía).
Una vez creada la base de datos, desde la pestaña de ‘Inbound’ del menú de ‘Shares’ podrá visualizarse el recurso compartido y toda la información relativa al misma, incluyendo la base de datos a la que acceder para realizar las consultas sobre los datos; consultas que podrá realizar desde la pestaña de ‘Worksheets’ del menú superior.
Como habréis podido ver, es una funcionalidad muy potente y que, además, es muy sencilla de realizar a través de la propia interfaz de la herramienta.
Conclusiones
Tras haber probado la plataforma, creemos que tiene un gran potencial, y el hecho de que sea en formato SaaS elimina la complejidad asociada a la administración y mantenimiento de la misma, lo que permite a los usuarios centrarse más en los datos. Además, como hemos mostrado, tiene una interfaz bastante sencilla e intuitiva, lo que facilita mucho trabajar con ella.
En lo que se refiere a la funcionalidad de Data-Sharing, creemos que es una de sus características más relevantes y le hace diferenciarse respecto a otras plataformas de data warehouse.
Para cualquier usuario, el hecho de poder intercambiar datos con tan solo unos clicks tiene una enorme utilidad pues simplifica el proceso de compartir datos y reduce tanto los tiempos como los costes asociados a esa operativa ya que no es necesario tener que copiar, preparar y descargar los datos antes de enviarlos. Asimismo, el consumo de datos compartidos es igual de sencillo, pues los datos compartidos están listos para consultarse sin necesidad de tener que prepararlos y cargarlos en el sistema una vez se reciben. Además, dado que los datos existen una única vez (esto es, en un único sitio), cualquier modificación en los mismos inmediatamente se ve reflejada en la copia compartida, lo que hace que los datos compartidos estén siempre actualizados en tiempo real.
En conclusión, aunque se trata de una plataforma relativamente nueva creemos que es una herramienta que ofrece muchas posibilidades y que continúa ampliando su oferta de funcionalidades, por lo que puede ser una herramienta a tener en cuenta.
Silvia Macho González
Graduada de Administración y Dirección de Empresas e Ingeniería Técnica en Informática de Gestión por la Universidad Rey Juan Carlos en 2013. Desde el inicio de mi carrera profesional he tenido la oportunidad de trabajar dentro del mundo de los datos, donde he ido adquiriendo experiencia en Business Intelligence, Data Analytics y, más recientemente, en Big Data. Actualmente trabajo como Data Engineer en Paradigma participando en proyectos de transformación digital y ayudando a los clientes a extraer el máximo valor de sus datos.
Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.
Cuéntanos qué te parece.