Use a analogia do golfe ao explicar para os executivos.
Use uma analogia com um carro para todos os outros. - Confúcio.

O objetivo das funções de janela é traduzir os requisitos de relatórios comerciais de forma declarativa e eficaz para o SQL, de modo que o desempenho da consulta e a eficiência do desenvolvedor/analista de negócios melhorem drasticamente. Já vi relatórios e painéis do mundo real passarem de horas para minutos e de minutos para segundos depois de usar as funções de janela. O tamanho da consulta diminuiu de 40 páginas para algumas páginas. Nos anos 90, o banco de dados Redbrick realmente entendeu o caso de uso comercial e criou uma nova camada de funcionalidade para fazer relatórios comerciais que incluíam classificação, execução de totais, cálculo de comissões e inventário com base em subgrupos, posições etc. Esses recursos foram incluídos no padrão SQL em 2003. Todas as camadas de BI (como Tableau, Looker, Cognos) exploram essa funcionalidade.

Introdução às funções de janela

Imagine que você tenha as pontuações de seis jogadores de golfe em duas rodadas. Agora, você precisa criar a tabela de classificação e classificá-los. Classifique-os usando SQL.

Jogador Rodada1 Rodada2
Marco 75 73
Johan 72 68
Chang 67 76
Isha 74 71
Sitaram 68 72
Bingjie 71 67

Insira os dados no Couchbase.

SEM funções de janela (estado atual - Couchbase 6.0)

Para escrever a consulta sem o uso de funções de janela, você precisa de uma subconsulta para calcular a classificação de cada jogador. Essa subconsulta precisa examinar todos os dados resultando na pior complexidade algorítmica de O(N^2), o que aumenta drasticamente o tempo de execução e a taxa de transferência.

Com funções de janela no Mad-Hatter (versão futura)

Essa consulta retorna o jogador, o total após duas rodadas (T), o quanto da pontuação está acima/abaixo do par (ToPar) e, em seguida classificações com base nas pontuações das duas primeiras rodadas. Essa é a NOVA funcionalidade do Mad-Hatter. A complexidade de tempo disso é O(N), o que significa que o tempo de execução só aumentará linearmente.  

Observações:

  1. A consulta expressa os requisitos de forma simples e clara.
  2. O desempenho dessa consulta em um cenário do mundo real é muito melhor. Planejamos medir.
  3. Quando os requisitos de classificação dependem de vários documentos, a consulta se torna bastante complexa - para escrever, otimizar e executar.
  4. Tudo isso afeta o TCO em geral.

Agora, vamos criar um painel expandido.

Mostre a classificação densa, o número da linha, quem está na frente e o número de tacadas atrás do líder. Todas essas informações são muito comuns em uma situação de relatório. Você está vendo a nova função de janela sempre que vê a cláusula OVER(). A consulta abaixo tem seis funções de janela.

Como você viu anteriormente, fazer essa consulta com seis funções de janela usando será uma consulta mais trabalhosa, cara e propensa a erros.

Além de transformar os agregados internos (COUNT, SUM, AVG etc.) em funções de janela, o Sitaram adicionou as seguintes funções de janela. A sintaxe e a semântica de cada uma delas estão bem definidas no padrão e bem descritas nos artigos da seção de referência abaixo.

RANK()
DENSE_RANK()
PERCENT_RANK()
CUME_DIST()
NTILE()
RATIO_TO_REPORT()
ROW_NUMBER()
LAG()
FIRST_VALUE()
LAST_VALUE()
NTH_VALUE()
LEAD()

Referências:

  1. Provavelmente o recurso mais legal do SQL: Funções de janela. https://blog.jooq.org/2013/11/03/probably-the-coolest-sql-feature-window-functions/
  2. Uma janela para o mundo das funções analíticas. https://blogs.oracle.com/oraclemagazine/a-window-into-the-world-of-analytic-functions
  3. Referência Oracle: https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions004.htm#SQLRF06174

Autor

Postado por Keshav Murthy

Keshav Murthy é vice-presidente de P&D da Couchbase. Anteriormente, ele trabalhou na MapR, IBM, Informix e Sybase, com mais de 20 anos de experiência em design e desenvolvimento de bancos de dados. Ele liderou a equipe de P&D de SQL e NoSQL na IBM Informix. Recebeu dois prêmios President's Club na Couchbase e dois Outstanding Technical Achievement Awards na IBM. Keshav é bacharel em Ciência da Computação e Engenharia pela Universidade de Mysore, Índia, detém dez patentes nos EUA e tem três patentes pendentes nos EUA.

Deixar uma resposta