Atribuindo números de linha

Funções de janela no Snowflake

Jake Roach

Field Data Engineer

Funções de janela

Usado para realizar um cálculo em uma "janela" de linhas e retornar um valor para cada linha

$$

$$

Classificação

  • RANK, DENSE_RANK
  • FIRST_VALUE, LAST_VALUE, NTH_VALUE
  • LAG, LEAD

Agregação

  • COUNT, SUM, AVG
Funções de janela no Snowflake

Funções de janela

Funções de janela nos ajudam a responder novos tipos de perguntas!

$$

  • Qual é o terceiro concerto mais popular em cada local?
  • Como as vendas de um item variaram dia a dia?
  • Minha média móvel de visualizações está subindo ou descendo?
Funções de janela no Snowflake

Funções tradicionais

Função de agregação tradicional deve ter uma cláusula GROUP BY.

Uma representação visual de uma função de agregação.

Funções de janela no Snowflake

Funções de janela

Uma representação visual do resultado de uma função de janela.

                                                 Não requerem GROUP BY!

Funções de janela no Snowflake

Atribuindo números de linha

SELECT
    <other-fields>,

    ROW_NUMBER() OVER(
        ORDER BY <field>
    ) AS <alias>

FROM SCHEMA.table

...;

A função ROW_NUMBER() atribui um número de linha a cada registro no conjunto de resultados

$$

  • OVER() define a janela
  • Dê um alias à coluna resultante
  • Sem GROUP BY!
Funções de janela no Snowflake

Presença em concertos

SELECT
    customer_id,
    event_name,

    -- Atribua um número de linha a cada 
    -- registro no conjunto de resultados

    ROW_NUMBER() OVER(
        ORDER BY time_spent_minutes
    ) AS row_num

FROM concerts.attendance;
  customer_id  |  event_name  |  row_num  
 ------------- | ------------ | ---------
     1931292   |  Music Fest  |    1    
     5462384   |  Elton John  |    2    
     7732891   |  Coachella   |    3    
     3124888   |  Porch Fest  |    4

$$

$$

Lembre-se da sintaxe: ROW_NUMBER() OVER( ORDER BY ...)!

Funções de janela no Snowflake

Vamos praticar!

Funções de janela no Snowflake

Preparing Video For Download...