Optimización de consultas en Snowflake

Introducción a Snowflake SQL

George Boorman

Senior Curriculum Manager, DataCamp

¿Por qué optimizar las consultas en Snowflake?

  • Consigue resultados más rápidos
  • Rentabilidad
    • Los tiempos de consulta más cortos consumen menos recursos, como CPU y memoria.

Imagen que muestra el alto uso de la CPU y la memoria que conduce a la pérdida de dinero

Introducción a Snowflake SQL

Problemas comunes con las consultas

  • Explosión de uniones: ¡Ten cuidado!

Incorrecto

SELECT *
FROM order_details AS od
JOIN pizzas AS p -- Missing ON condition leading to exploding joins

Resultados de la consulta: filas y detalles de tiempo sin la condición « ON »

Introducción a Snowflake SQL

Problemas comunes con las consultas

  • Explosión de uniones: ¡Cuidado!

Correcto

SELECT *
FROM order_details AS od
JOIN pizzas AS p
ON od.pizza_id = p.pizza_id

Consultar los resultados de la consulta y los detalles de tiempo con una condici ON

Introducción a Snowflake SQL

Problemas comunes con las consultas

  • UNION o UNION ALL: Conoce la diferencia
    • UNION elimina duplicados, ralentiza la consulta
    • UNION ALL es más rápido si no hay duplicados
  • Manejo de grandes volúmenes de datos
    • Utiliza filtros para reducir los datos
    • Aplica límites para obtener resultados más rápidos.
Introducción a Snowflake SQL

¿Cómo optimizar las consultas?

SELECT * ⌛

SELECT
    *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Detalles de la consulta, tiempo y detalles de las filas

SELECT LIMIT 10* ⚡

SELECT *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS
LIMIT 10

Consulta los detalles, el tiempo y las filas utilizando LIMIT 10

Introducción a Snowflake SQL

¿Cómo optimizar las consultas?

Uso de SELECT *

SELECT 
    *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Detalles de la consulta, tiempo y detalles de las filas

Evita SELECT *

SELECT o_orderdate, 
    o_orderstatus 
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Detalles de la consulta, hora y filas utilizando nombres de columnas seleccionados

Introducción a Snowflake SQL

¿Cómo optimizar las consultas?

Filtrar temprano

  • Utiliza la cláusula « WHERE » desde el principio.
  • Aplica filtros antes de JOINs
    • JOIN procesará menos filas
Introducción a Snowflake SQL

Sin filtrado previo

SELECT orders.order_id, 
       orders.order_date, 
       pizza_type.name, 
       pizzas.pizza_size
FROM orders
JOIN order_details 
ON orders.order_id = order_details.order_id
JOIN pizzas 
ON order_details.pizza_id = pizzas.pizza_id
JOIN pizza_type 
ON pizzas.pizza_type_id = pizza_type.pizza_type_id
WHERE orders.order_date = '2015-01-01';  -- Filtering after JOIN
Introducción a Snowflake SQL

Con filtrado temprano

WITH filtered_orders AS (
  SELECT *
  FROM orders
  WHERE order_date = '2015-01-01'  -- Filtering in CTE before JOIN
)
SELECT filtered_orders.order_id, 
       filtered_orders.order_date, 
       pizza_type.name, 
       pizzas.pizza_size
FROM filtered_orders -- Joining with CTE
JOIN order_details
ON filtered_orders.order_id = order_details.order_id
JOIN pizzas
ON order_details.pizza_id = pizzas.pizza_id
JOIN pizza_type
ON pizzas.pizza_type_id = pizza_type.pizza_type_id;
Introducción a Snowflake SQL

Historial de consultas

  • Historial de consultas
    • snowflake.account_usage.query_history
    • El historial de consultas proporciona diferentes métricas, como el tiempo de ejecución.
SELECT query_text, start_time, end_time, execution_time 
FROM
   snowflake.account_usage.query_history
WHERE query_text ILIKE '%order_details%'

Screenshot 2023-09-01 at 14.32.29.png

  • ILIKE: Coincidencia de cadenas sin distinción entre mayúsculas y minúsculas
Introducción a Snowflake SQL

Historial de consultas

  • Detecta consultas lentas o que se ejecutan con frecuencia.
SELECT query_text, 
    start_time, 
    end_time, 
    execution_time 
FROM
   snowflake.account_usage.query_history
WHERE
   execution_time > 1000

Filtrar el resultado en función de un tiempo de ejecución superior a 1000 ms

Introducción a Snowflake SQL

¡Vamos a practicar!

Introducción a Snowflake SQL

Preparing Video For Download...