SELECTSELECT

SELECT

Cómo usar Query Timeouts en Snowflake

By Ian WhitestoneMar 18, 20233 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

Los query timeouts son una herramienta clave para quienes usan Snowflake y quieren controlar costos y evitar picos de gasto inesperados. En este post te contamos por qué son útiles y cómo configurarlos.

¿Qué son los query timeouts en Snowflake?

Un query timeout es un parámetro que impide que una consulta en Snowflake se ejecute durante demasiado tiempo. Si una consulta supera ese límite, Snowflake la cancela automáticamente.

SELECT query timeout

¿Por qué usar un timeout?

En Snowflake, las consultas corren sobre virtual warehouses y se cobra por cada segundo que un warehouse está activo (en estado "resumed"). Por ejemplo, si alguien ejecuta una consulta ineficiente sobre un dataset grande y tarda 2 días en terminar en un warehouse extra-large, esa sola consulta le costará al cliente cerca de 2.000 dólares.

Al bajar el valor del query timeout, los clientes de Snowflake logran controlar sus costos y se evitan cobros inesperados por consultas que se alargan demasiado.

¿Cuál es el query timeout por defecto en Snowflake?

El query timeout por defecto en Snowflake es de 2 días (172.800 segundos), tanto para sesiones como para warehouses (fuente). Dado que el valor por defecto es tan alto, la mayoría de los clientes de Snowflake debería plantearse reducir sus query timeouts a tiempos más cortos.

Cómo configurar query timeouts en Snowflake

Los query timeouts se pueden configurar de varias formas: a nivel de cuenta, por usuario, para una sesión puntual o para un warehouse específico. Todos los métodos usan el parámetro STATEMENT_TIMEOUT_IN_SECONDS.

Query Timeout de sesión

Para consultar el valor actual del query timeout en la sesión activa, ejecuta el siguiente comando:

1show parameters for session

Para fijar el query timeout en 1 hora para la sesión actual, ejecuta:

1alter session set statement_timeout_in_seconds = 3600

Query Timeout por usuario

Para ver el valor actual del query timeout de un usuario en particular (analytics_user), ejecuta:

1show parameters for user analytics_user

Para fijar el query timeout en 1 hora para ese usuario, ejecuta:

1alter user analytics_user set statement_timeout_in_seconds = 3600

Timeout a nivel de cuenta

Para ver el valor actual del query timeout a nivel de cuenta, ejecuta:

1show parameters for account

Lo más probable es que esté en el valor por defecto de 2 días (172.800). Para bajarlo a 1 día, ejecuta:

1alter account set statement_timeout_in_seconds = 86400

Query Timeout de warehouse

Para consultar el query timeout actual de un warehouse existente, ejecuta el siguiente comando. En este ejemplo, el warehouse se llama COMPUTE.

1show parameters for warehouse compute

Para cambiar el query timeout a 1 hora en ese warehouse, ejecuta:

1alter warehouse compute set statement_timeout_in_seconds = 3600

El timeout también se puede definir al momento de crear un nuevo warehouse:

create warehouse compute
    warehouse_size = 'XSMALL'
    statement_timeout_in_seconds = 3600
;

¿Qué query timeout se aplica cuando hay varios configurados?

Cuando coexisten varios query timeouts, Snowflake aplica el valor más bajo. Por ejemplo, si una sesión tiene un timeout de 1 hora y un warehouse uno de 10 minutos, Snowflake cancelará cualquier consulta que supere los 10 minutos.

Cómo configurar timeouts de tasks en Snowflake

Los timeouts de las tasks de Snowflake se configuran con el parámetro USER_TASK_TIMEOUT_MS. El valor por defecto es de 1 hora (fuente). Ten en cuenta que la unidad es milisegundos, a diferencia de los segundos que se usan en los query timeouts.

Al igual que con los warehouses y las sesiones, puedes consultar el valor actual ejecutando show parameters for task my_task. Para cambiar el timeout de la task a 60 segundos, ejecuta alter task my_task set user_task_timeout_ms = 60000.

¿Se cobran las consultas y tasks que Snowflake cancela por timeout?

Sí. Snowflake le cobra a sus clientes por cada segundo que un virtual warehouse está activo. Si una consulta corre durante 4 horas en un virtual warehouse antes de que Snowflake la cancele, se cobrarán esas 4 horas en las que el warehouse estuvo activo.

Ian Whitestone·Co-founder & CEO de SELECT

Ian es Co-founder & CEO de SELECT, una plataforma SaaS para gestionar y optimizar costos en Snowflake. Antes de fundar SELECT, Ian dedicó 6 años a liderar equipos full stack de data science e ingeniería en Shopify y Capital One. En Shopify estuvo al frente de la optimización del data warehouse y del trabajo para ganar visibilidad sobre los costos.