Quadros de janela

Funções de janela no Snowflake

Jake Roach

Field Data Engineer

Quadros de janela

Saída mostrando uma janela composta por todos os registros.

Funções de janela no Snowflake

Quadros de janela

Saída que mostra janelas construídas usando o campo member_id para particionar registros.

Funções de janela no Snowflake

Quadros de janela dinâmicos

Saída que mostra um quadro de janela "deslizante".

Funções de janela no Snowflake

Encontrando um cálculo cumulativo

SELECT
    ...

    AVG(<1>) OVER(
        PARTITION BY ...
        ORDER BY <2>

        -- Janela entre a primeira
        -- e a linha atual

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) ...

ROWS BETWEEN nos permite criar um quadro de janela dinâmico

  • UNBOUNDED PRECEEDING AND CURRENT ROW
  • Primeira linha na sequência até a linha atual
  • Cálculo "cumulativo", não rolante
  • CURRENT ROW AND UNBOUNDED FOLLOWING

$$

<1>: campo para cálculo

<2>: sequencia resultados, constrói quadro de janela

Funções de janela no Snowflake

Total acumulado de calorias queimadas

SELECT
    member_id AS m_id, 
    calories_burned AS cb,

    -- Total acumulado!
    SUM(calories_burned) OVER(
        PARTITION BY member_id
        ORDER BY workout_date

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS running_total FROM fitness.workouts;

         m_id  |    cb   |  running_total
       ------- | ------- | --------------
        m_192  |   105   |      105 
        m_192  |   156   |      261 
        m_192  |    69   |      330 
        m_192  |   102   |      432  

        m_74   |   374   |      374  
        m_74   |   396   |      770  
        m_74   |   504   |     1274  

        m_233  |    51   |       51  
        m_233  |    81   |      132  

Funções de janela no Snowflake

LINHA ATUAL E SEGUINTE ILIMITADA

SELECT
    member_id AS m_id, 
    calories_burned AS cb,

    SUM(calories_burned) OVER(
        PARTITION BY member_id
        ORDER BY workout_date

        -- Janela entre a linha atual e a última

ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) AS left_to_burn FROM fitness.workouts;

         m_id  |    cb   |  left_to_burn
       ------- | ------- | --------------
        m_192  |   105   |      432 
        m_192  |   156   |      327 
        m_192  |    69   |      171 
        m_192  |   102   |      102  

        m_74   |   374   |     1274  
        m_74   |   396   |      900 
        m_74   |   504   |      504  

        m_233  |    51   |      132  
        m_233  |    81   |       81  

Funções de janela no Snowflake

Tendências de queima de calorias

SELECT
    member_id,
    workout_date,
    calories_burned,

    AVG(calories_burned) OVER(   -- Média móvel de calorias queimadas
        PARTITION BY member_id

        -- Cria uma janela por data de treino, do primeiro ao atual 
        ORDER BY workout_date
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

    ) AS avg_calories_burned

FROM FITNESS.workouts;
Funções de janela no Snowflake

Tendências de queima de calorias


            member_id  |  workout_date  |  calories_burned  |  average_calories_burned
           ----------- | -------------- | ----------------- | -------------------------
              m_192    |   2025-01-01   |        105        |          105.0
              m_192    |   2025-01-03   |        156        |          130.5
              m_192    |   2025-01-04   |         69        |          110.0
              m_192    |   2025-01-10   |        102        |          108.0

               m_74    |   2025-02-10   |        374        |          374.0
               m_74    |   2025-02-13   |        396        |          385.0
               m_74    |   2025-02-14   |        504        |          426.7

              m_233    |   2025-03-05   |         51        |           51.0
              m_233    |   2025-03-12   |         81        |           66.0

Funções de janela no Snowflake

Vamos praticar!

Funções de janela no Snowflake

Preparing Video For Download...