Te damos la bienvenida a la quickstart guide Tasty Bytes - De cero a Snowflake centrada en la transformación.
En esta quickstart guide veremos un gran número de funcionalidades de Snowflake que abarcan funciones clave como Zero Copy Cloning y Time Travel para cumplir un requisito empresarial de Tasty Bytes.
En esta quickstart guide se narra una historia de Tasty Bytes mediante una hoja de trabajo SQL en Snowsight. Esta página servirá de guía completa paralela con comentarios adicionales, imágenes y enlaces a la documentación.
En esta sección te explicaremos cómo iniciar sesión en Snowflake, crear una nueva hoja de trabajo, cambiar el nombre de la hoja de trabajo, copiar SQL de GitHub y pegar el que utilizaremos en esta quickstart guide.
Como parte del análisis de la flota de food trucks de Tasty Bytes, nuestro desarrollador se ha encargado de añadir una columna con la antigüedad calculada de cada vehículo en nuestra tabla de food trucks.
Como buenos desarrolladores que somos, sabemos que no podemos desarrollar en una tabla de producción. Primero, tenemos que crear un entorno de desarrollo que imite al de producción.
Gracias a la arquitectura única de Snowflake, podemos crear al momento una instantánea de nuestra producción raw_pos.truck
con la función CLONE y llamarla raw_pos.truck_dev
.
Ahora, vamos a ejecutar nuestro siguiente conjunto de consultas para configurar el contexto del rol de tasty_dev
y crear un clon de la tabla. Hay que tener en cuenta que en este caso no es necesario establecer un contexto de almacén, ya que la clonación no requiere uno.
USE ROLE tasty_dev;
CREATE OR REPLACE TABLE frostbyte_tasty_bytes.raw_pos.truck_dev
CLONE frostbyte_tasty_bytes.raw_pos.truck;
Con nuestro clon de Zero Copy Cloning disponible al instante, ya podemos empezar a desarrollar en él sin miedo a que esto afecte a la tabla de producción. Sin embargo, antes de hacer ningún cambio, vamos a ejecutar un par de consultas simples en él y a probar la caché del conjunto de resultados de Snowflake.
Ahora que vamos a ejecutar consultas en la tabla, necesitaremos utilizar el almacén tasty_dev_wh
.
Vamos a ejecutar las dos siguientes consultas con la segunda sentencia para producir un conjunto de resultados que muestren nuestros food trucks, su antigüedad, marca y modelo, asegurándonos de que ordenamos la columna truck_id
gracias al comando ORDER BY.
USE WAREHOUSE tasty_dev_wh;
SELECT
t.truck_id,
t.year,
t.make,
t.model
FROM frostbyte_tasty_bytes.raw_pos.truck_dev t
ORDER BY t.truck_id;
Para probar la caché de conjunto de resultados de Snowflake, la consulta que vamos a ejecutar será idéntica a la anterior. Sin embargo, ahora iremos un paso más allá y accederemos a Query Profile para comprobar si la consulta ha devuelto los resultados al instante porque los obtuvo de la caché de conjunto de resultados.
Después de ejecutar la consulta que se muestra a continuación, sigue los pasos indicados en la captura de pantalla para acceder a Query Profile. En Query Profile veremos un único nodo que indica QUERY RESULT REUSE
.
SELECT
t.truck_id,
t.year,
t.make,
t.model
FROM frostbyte_tasty_bytes.raw_pos.truck_dev t
ORDER BY t.truck_id;
Según el resultado obtenido, debemos corregir el error en la escritura de los registros "Ford_" que hemos visto en la columna make
. Desde ahí, podemos empezar a trabajar en el cálculo que nos proporcionará la antigüedad de cada food trucks.
Antes de empezar esta sección, vamos a asegurarnos de corregir el error de escritura ejecutando una nueva consulta, que utiliza UPDATE para cambiar las filas de truck_dev
en las que el valor de marca sea igual a Ford_. Se indica mediante el comando WHERE.
UPDATE frostbyte_tasty_bytes.raw_pos.truck_dev
SET make = 'Ford'
WHERE make = 'Ford_';
Una vez corregido el error, ya podemos calcular la antigüedad en años de los food trucks de nuestra flota. Para obtener el cálculo, ejecuta la siguiente consulta en la que utilizaremos las funciones YEAR y CURRENT_DATE.
SELECT
t.truck_id,
t.year,
t.make,
t.model,
(YEAR(CURRENT_DATE()) - t.year) AS truck_age_year
FROM frostbyte_tasty_bytes.raw_pos.truck_dev t;
Ya hemos realizado y corregido el cálculo de la antigüedad en años de los food trucks. Ahora, vamos a añadir una nueva columna a nuestra tabla clonada para apoyar el cálculo y terminar actualizando la columna para que refleje los valores calculados.
Para comenzar, ejecuta la siguiente consulta, que utiliza ALTER TABLE... ADD COLUMN para crear una columna truck_age
vacía del tipo de datos NUMBER en nuestra tabla truck_dev
.
Esta consulta dará como resultado Statement executed successfully
para indicar que la consulta se ha ejecutado correctamente.
ALTER TABLE frostbyte_tasty_bytes.raw_pos.truck_dev
ADD COLUMN truck_age NUMBER(4);
Tras haber añadido las columnas, ya podemos iniciar la siguiente consulta, que utilizará UPDATEpara actualizar la nueva columna truck_age
vacía con el cálculo de la antigüedad de los food trucks que hemos generado en la sección anterior.
UPDATE frostbyte_tasty_bytes.raw_pos.truck_dev t
SET truck_age = (YEAR(CURRENT_DATE()) / t.year);
Ahora que ya hemos actualizado los datos, vamos a ejecutar una consulta rápida en la tabla para ver si todo ha salido bien con la columna truck_age
.
SELECT
t.truck_id,
t.year,
t.truck_age
FROM frostbyte_tasty_bytes.raw_pos.truck_dev t;
¡Vaya! Menos mal que somos unos desarrolladores perspicaces y no hemos hecho nada de esto a ciegas en la tabla de producción.
Parece que hemos metido la pata con el cálculo de la columna truck_age
. Estábamos haciendo una división en lugar de una resta. Vamos a tener que solucionarlo en la siguiente sección.
Aunque hayamos cometido un error, Snowflake cuenta con muchas funciones que nos pueden ayudar a solucionarlo. El proceso que vamos a seguir utiliza el historial de consultas, las variables de SQL y Time Travel para volver a dejar nuestra tabla truck_dev
tal y como estaba antes de ejecutar la sentencia incorrecta de actualización.
Para comenzar el proceso de recuperación, ejecuta la siguiente consulta, que utiliza la función QUERY_HISTORY de Snowflake para recuperar una lista con todas las sentencias de actualización que hemos ejecutado en nuestra tabla truck_dev
.
SELECT
query_id,
query_text,
user_name,
query_type,
start_time
FROM TABLE(frostbyte_tasty_bytes.information_schema.query_history())
WHERE 1=1
AND query_type = 'UPDATE'
AND query_text LIKE '%frostbyte_tasty_bytes.raw_pos.truck_dev%'
ORDER BY start_time DESC;
Como cabía esperar, aparece la corrección del error de escritura, así como la actualización del cálculo erróneo y el ID único asociado a cada consulta de la columna (query_id). Ejecuta la siguiente consulta, que crea una variable de SQL query_id
que utilizaremos para revertir los cambios en el siguiente paso con Time Travel.
Una vez ejecutada la consulta, el resultado será Statement executed successfully
para indicar que la consulta se ha ejecutado correctamente.
SET query_id =
(
SELECT TOP 1 query_id
FROM TABLE(frostbyte_tasty_bytes.information_schema.query_history())
WHERE 1=1
AND query_type = 'UPDATE'
AND query_text LIKE '%SET truck_age = (YEAR(CURRENT_DATE()) / t.year);'
ORDER BY start_time DESC
);
Al haber almacenado el ID de la consulta errónea como una variable y gracias a Time Travel, podemos ejecutar la siguiente consulta, que reemplazará la tabla truck_dev
con la que teníamos antes de ejecutar la sentencia de query_id incorrecta. Utilizaremos el comando BEFORE.
CREATE OR REPLACE TABLE frostbyte_tasty_bytes.raw_pos.truck_dev
AS
SELECT * FROM frostbyte_tasty_bytes.raw_pos.truck_dev
BEFORE(STATEMENT => $query_id);
En la lista que aparece a continuación puedes ver otras opciones disponibles de Time Travel.
Ahora que tenemos la tabla truck_dev
como estaba antes de la sentencia incorrecta de actualización, podemos asegurarnos de que la columna se actualiza correctamente. A continuación, promoveremos nuestra tabla a producción con el cálculo correcto para completar la tarea asignada.
Siguiendo el mismo proceso que antes, ejecuta la siguiente consulta y asegúrate de comprobar que ahora estamos usando la resta en lugar de la división.
UPDATE frostbyte_tasty_bytes.raw_pos.truck_dev t
SET truck_age = (YEAR(CURRENT_DATE()) - t.year);
Ya hemos completado todo en truck_dev
. Ahora inicia las siguientes dos consultas, donde asumiremos el rol sysadmin
, que tiene más privilegios. Como sysadmin
, la segunda consulta utiliza ALTER TABLE... SWAP WITH para promover la tabla truck_dev
a truck
y viceversa.
Una vez completada la consulta, el resultado será Statement executed successfully.
para indicar que la consulta se ha ejecutado correctamente.
USE ROLE sysadmin;
ALTER TABLE frostbyte_tasty_bytes.raw_pos.truck_dev
SWAP WITH frostbyte_tasty_bytes.raw_pos.truck;
Para confirmar que el proceso se ha realizado correctamente, vamos a echar un vistazo a la tabla de producción truck
para poder validar que el cambio se ha realizado y que los resultados de truck_age
son correctos.
SELECT
t.truck_id,
t.year,
t.truck_age
FROM frostbyte_tasty_bytes.raw_pos.truck t
WHERE t.make = 'Ford';
Oficialmente podemos decir que nuestro desarrollador ha terminado la tarea que se le asignó. Con la columna truck_age
en su sitio y con todos los cálculos correctos, sysadmin
ya puede eliminar la tabla borrador y dar por terminada su jornada.
Para eliminar una tabla de nuestra base de datos, ejecuta la siguiente consulta, que utiliza DROP TABLE.
DROP TABLE frostbyte_tasty_bytes.raw_pos.truck;
¡Vaya! Según el conjunto de resultados, parece que hasta nuestro sysadmin
puede cometer errores. Hemos borrado por error la tabla de producción truck
en lugar de la tabla de desarrollo truck_dev
. Por suerte, Snowflake Time Travel puede acudir de nuevo al rescate.
Date prisa y ejecuta la nueva consulta antes de que pueda afectar a algún sistema. Esta consulta recuperará la tabla truck
con UNDROP.
UNDROP TABLE frostbyte_tasty_bytes.raw_pos.truck;
Pues ya podemos acabar con esto oficialmente ejecutando una última consulta para borrar correctamente truck_dev
.
DROP TABLE frostbyte_tasty_bytes.raw_pos.truck_dev;
¡Bien hecho! Has completado la quickstart guide Tasty Bytes - De cero a Snowflake - Transformación.
De este modo, habrás: -clonado una tabla; - usado la caché del conjunto de resultados de Snowflake; - añadido una columna a una tabla; - actualizado los datos de una columna; - utilizado Time Travel para recuperar los datos ante un desastre; - cambiado, borrado y recuperado una tabla.
Si deseas volver a empezar esta quickstart guide, ejecuta las secuencias de comandos de restauración que aparecen en la parte inferior de la hoja de trabajo asociada.
Si quieres ampliar tu experiencia con Snowflake Data Cloud, haz clic en el siguiente enlace para descubrir otras quickstart guides Powered by Tasty Bytes.