Una conexión de Snowflake carga los datos semanales en tablas de un esquema de tu propia cuenta de Snowflake, como explican las cargas en tu almacén de datos: una tabla por conjunto de datos, cada semana sustituida de una vez, con los mismos planes y tras la misma publicación semanal. MercaMap entra como un usuario de servicio de tu cuenta con un par de claves que crea para la conexión: nunca nos das una contraseña ni una clave.
Cómo entra
Cuando guardas la conexión, MercaMap crea para ella un par de claves RSA. La clave privada se queda con nosotros, cifrada, y no se muestra nunca a nadie; la clave pública va en las sentencias de Da acceso, y tú la pones en el usuario. Cada petición que enviamos lleva un token firmado con esa clave, que dura minutos. Snowflake lo comprueba con la clave pública del usuario, así que la clave solo llega a lo que permite tu rol.
Para cambiar la clave, pulsa Crear una clave nueva: creamos otro par junto al que está en uso. Pon su clave pública en el otro hueco del usuario con la sentencia de Da acceso (RSA_PUBLIC_KEY_2) y pulsa Probar la conexión. Cuando Snowflake acepta la clave nueva, pasa a ser la clave en uso, y Da acceso muestra la sentencia que quita la antigua. Hasta entonces los envíos semanales siguen con la clave en uso, así que no se pierde ninguna semana.
Configurarlo
- Conecta: abre Conectores, entra en Snowflake e indica el identificador de tu cuenta (el nombre de tu organización y el de tu cuenta unidos por un guion: lo devuelve
SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();; conserva los guiones bajos de tu cuenta, que su dirección escribe como guiones), el usuario, el rol, el almacén virtual, la base de datos y el esquema. Escribe los nombres como los creaste, sin comillas: Snowflake los guarda en mayúsculas, y nosotros también. La base de datos y el esquema deben existir. Cada conexión de Snowflake necesita su propio usuario: en uno compartido, la clave de una sustituiría a la de la otra, así que no se admite una segunda con un usuario que ya tiene otra. - Da acceso muestra, con Comprobar, las sentencias que hay que ejecutar una vez en un archivo SQL de Snowsight (Projects › Workspaces › + Add New › SQL File), como ACCOUNTADMIN: un rol propio, un almacén virtual X-Small de primera generación, sin aceleración de consultas, que se suspende solo al cabo de un minuto (salvo que indicaras uno tuyo), los permisos del rol, el usuario de servicio, el rol concedido a SYSADMIN y nuestra clave pública en el usuario.
- Elige los datos y, en Prueba y activa, pulsa Probar la conexión: crea una tabla propia, carga en ella una fila, la vacía en una transacción y la borra, como los envíos semanales. Si sale bien, aparece Activar.
CREATE WAREHOUSE IF NOT EXISTS "MERCAMAP_WH" WAREHOUSE_SIZE = XSMALL GENERATION = '1' AUTO_SUSPEND = 60 AUTO_RESUME = TRUE INITIALLY_SUSPENDED = TRUE ENABLE_QUERY_ACCELERATION = FALSE;
GRANT USAGE ON WAREHOUSE "MERCAMAP_WH" TO ROLE "MERCAMAP_LOADER";
GRANT USAGE ON DATABASE "ANALYTICS" TO ROLE "MERCAMAP_LOADER";
GRANT USAGE, CREATE TABLE ON SCHEMA "ANALYTICS"."MERCAMAP" TO ROLE "MERCAMAP_LOADER";
CREATE USER IF NOT EXISTS "MERCAMAP_LOADER" TYPE = SERVICE;
El rol no necesita más: es el propietario de las tablas que crea, así que puede escribirlas y leerlas, y nada más de lo tuyo. Danos un esquema propio. Tus otros roles leen nuestras tablas cuando les das SELECT sobre ellas. Si tu cuenta tiene una política de red, escríbenos antes de configurarlo: nuestras peticiones aún no salen de direcciones fijas.
Las tablas
Nuestras tablas se llaman MERCAMAP_ y el nombre del conjunto de datos (MERCAMAP_SHELF_SNAPSHOT, MERCAMAP_GAPS…), con las columnas de los archivos en mayúsculas (WEEK, STORE_ID…), así que select week from mercamap_gaps las lee sin comillas. Un texto es VARCHAR; un recuento, NUMBER(38,0); un número, FLOAT; y un sí o un no, BOOLEAN.
Cada carga deja las filas de la semana en una tabla transitoria propia (MERCAMAP_STAGING_ y una clave), sin conservar versiones anteriores; después una transacción borra las filas de esa semana de la tabla e inserta las de la tabla intermedia, y se anula entera ante cualquier error; y la tabla intermedia se borra. Una semana sin filas se borra con una sola sentencia. La tabla de la prueba es MERCAMAP_TEST_ y una clave propia. Una tabla intermedia o de prueba que quedó tras una interrupción la borra una carga posterior cuando tiene un día, si el rol sigue siendo su propietario.
Lo que cuesta
Las sentencias se ejecutan en tu almacén virtual, así que Snowflake te las factura a ti, a los precios de tu cuenta (precios de Snowflake):
- Los créditos del almacén virtual, por segundo mientras funciona, con un minuto como mínimo cada vez que se reanuda: las inserciones de la semana, su sustitución y la prueba. Basta un almacén X-Small. La sentencia de Da acceso lo crea de la primera generación de Snowflake, que gasta un crédito por hora, y con la aceleración de consultas desactivada: donde Snowflake ofrece su segunda generación, un almacén nuevo es de esa, que gasta más créditos por hora, y tiene activada la aceleración de consultas, que se factura como cómputo adicional. Un almacén que ya existe, indicado por ti o creado antes, conserva su configuración; la tabla de consumo de Snowflake da los créditos de cada uno.
- Los servicios en la nube solo se facturan cuando pasan de una décima parte del uso de tus almacenes virtuales ese día.
- El almacenamiento de las filas que conserves, a tu precio de almacenamiento. Nuestras tablas son permanentes, así que las filas que borra cada sustitución se quedan un día en Time Travel, o el tiempo que fijen tu cuenta, tu base de datos o tu esquema, y después una semana en Fail-safe; las tablas intermedias son transitorias y no pasan por Fail-safe (Time Travel).
Nuestras sentencias llevan la etiqueta de consulta mercamap: las encuentras en tu historial de consultas, y los créditos que gastó cada una en SNOWFLAKE.ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY, que deja fuera las consultas muy cortas y el tiempo de inactividad del almacén virtual.
Cuando una carga falla
La conexión muestra su último fallo con nuestras palabras:
| Último fallo | Qué hacer |
|---|---|
| «Snowflake no aceptó la clave de MercaMap para el usuario…» | Pon la clave pública con la sentencia de Da acceso; comprueba que el usuario existe y está activo |
| «al rol le falta un privilegio que necesita…» | Ejecuta los permisos de Da acceso y concede el rol al usuario |
| «el almacén virtual, la base de datos o el esquema no existen…» | Revisa los nombres, y que el rol pueda usar cada uno |
| «una tabla nuestra se cambió…» | Cambia el nombre de esa tabla para conservar sus semanas; el próximo envío vuelve a crear la nuestra |
| «ninguna cuenta de Snowflake responde a ese identificador» | Revisa el identificador de la cuenta |
| «no pudimos abrir el par de claves guardado…» | Crea una clave nueva y ponla en el usuario |
Cada uno cuenta como un fallo de la conexión, salvo el último, que es nuestro. «No respondió» es nuestro o de Snowflake, y nunca cuenta.