como lidar com dados temporais e intervalos com a linguagem sql

25
1 Como lidar com dados temporais e intervalos com a linguagem SQL Mauro Pichiliani ([email protected]) @pichiliani @databasecast

Upload: pichiliani

Post on 18-Aug-2015

756 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Como lidar com dados temporais e intervalos com a linguagem SQL

1

Como lidar com dadostemporais e intervalos com

a linguagem SQL

Mauro Pichiliani ([email protected])@pichiliani

@databasecast

Page 2: Como lidar com dados temporais e intervalos com a linguagem SQL

2

Quem sou eu

• Mestre e doutorando em computação pelo ITA

• Escritor da SQL Magazine, Fórum Access, Java Magazine, SQLServerCentral.com e outras

• Colaborador do iMasters há 14 anos

• Autor do livro “Conversando sobre banco de dados”

• Co-produtor do podcast DatabaseCast

• Consultor independente e autor de cursos on-line

Page 3: Como lidar com dados temporais e intervalos com a linguagem SQL

3

Tópicos

Dados temporais

Pesquisas e operações

SQL nem sempre é o melhor…

OLAP….?

Novas abordagens

Recomendações gerais

Page 4: Como lidar com dados temporais e intervalos com a linguagem SQL

4

Dados temporais Temporal Event Data Eventos com timestamp (data + hora) Múltiplos registros Intervalos ou períodos:

Fechados (inicio e fim) Abertos (sem começo e/ou fim) Período dentro de período Duração

Page 5: Como lidar com dados temporais e intervalos com a linguagem SQL

5

Dados temporais: características “Gap” entre eventos/intervalos Posicionamento e sobreposição (intervalos)

Em um mesmo registro Em registros diferentes

Ordem de ocorrência de eventos/intervalos é importante! Quero os registros onde os eventos A, B, C, e D aconteceram nesta ordem ou

todos os registros onde esta ordem NÃO aconteceu!

Quais registros contém intervalos onde os eventos E1, E2 e E3 aconteceram nesta sequência ou em qualquer variação desta sequência?

Page 6: Como lidar com dados temporais e intervalos com a linguagem SQL

6

Exemplo 1: Registros médicos Histórico da vida do paciente:

Medicamentos Cirurgias Internações Tratamento em pronto-socorro Exames Sintomas

Detectar padrões pode auxiliar políticas públicas, modificações de posologia e descobrir fatos relevantes para o tratamento

Page 7: Como lidar com dados temporais e intervalos com a linguagem SQL

7

Exemplo 2: Cronograma (gráfico de Gantt)

Page 8: Como lidar com dados temporais e intervalos com a linguagem SQL

8

Exemplo 3: Agendamento e calendário

Sistemas de reserva (hotéis, vôos, carros)

Aplicações: Identificar ociosidade Agendamento “inteligente” (scheduling) Ajustamento de recursos (adição ou retirada) Compreensão de sazonalidade e períodos de

alta/baixa demanda (picos)

Page 9: Como lidar com dados temporais e intervalos com a linguagem SQL

9

Exemplo 4: Logs de servidores Ordem de eventos (início, manutenção, parada,

etc) Intervalos paralelos geram efeitos colaterais Identificação de anomalias

Page 10: Como lidar com dados temporais e intervalos com a linguagem SQL

10

Exemplo 5: Análise de eventos de vida política Durante um mandanto, quais CPIs, comissões

especiais e outros eventos/intervalos o político particiou?

Quais votações o representante particiou e como foi o seu voto em cada uma delas?

Existe um padrão de intervalos e faltas na legislatura de candidatos ou partidos no senado ou na câmara?

Análises podem ajudar a identificar comportamentos intencionais não percebidos pelo público/imprensa

Possibilidade de ajudar na divulgação das atividades de um político

Descoberta de fraudes, comportamento indecoroso ou corrupção

Page 11: Como lidar com dados temporais e intervalos com a linguagem SQL

11

Exemplo 6: Análise esportiva de atletas/equipes, inclusive e-

sports Identificação de períodos dentro da partida

(retranca ou ofensivo)

Eventos individuais por jogador. Ex: estatísticas do basquete

Descoberta de estratégias e táticas a partir da análise de eventos. Ex: rush em um jogo de RTS

Detecção de fraquezas/vulnerabilidades de oponentes durante intervalos ou sequência de eventos

Page 12: Como lidar com dados temporais e intervalos com a linguagem SQL

12

Exemplo 7: Análise de navegação em sites web (e-commerce) E-commerce quer vender cada vez mais e investe

muito em: Sistemas de recomendação Melhorias no design do site Busca melhor

Poucas análises por intervalos de espera entre páginas e eventos

Detectar padrão de eventos/intervalos ajuda a compreender melhor comportamento do usuário

Pode fornecer novas “features” para algoritmos de predição de compra/não compra, classificação de perfis e previsão de avaliação de itens

Page 13: Como lidar com dados temporais e intervalos com a linguagem SQL

13

Pesquisas Basicamente é análise do passado

“Estudar o passado para não repetiros mesmos erros no futuro…”

Dois tipos de pesquisas: Entendimento intra-registro (ordem) Entendimento inter-registro (padrão)

Geralmente procuramos encontrar padrões de eventos/intervalos

Mineração de dados para prever “gaps” ou intervalos Classificação de comportamentos por intervalos

Page 14: Como lidar com dados temporais e intervalos com a linguagem SQL

14

Exemplo pesquisa Encontre o padrão

Encontre as relações

Page 15: Como lidar com dados temporais e intervalos com a linguagem SQL

15

Operações

Page 16: Como lidar com dados temporais e intervalos com a linguagem SQL

16

SQL nem sempre é o melhor... SQL para “quais pacientes não tiveram um ataque cardíaco

enquanto tomavam o medicamento A e B simultaneamente”

Select distinctt1.patid,t1.drug,t1.dispensedate,t1.nextdrug,t1.nextdispensedate

From (select distinct patid,dispensedate, lead(dispensedate,1) over(orderbypatid,dispensedate,drug) nextdispensedate,

drug, lead (drug,1) over (orderbypatid,dispensedate,drug) nextdrugFrom DRUGTBLwheredrugin(’DRUGA’,’DRUGB’))t1, EVENTt2 wheret1.patid=t2.patidand t2.ICD9=’STROKE’and((t1.drug=’DRUGA’andt1.nextdrug=’DRUGB’)and(t1.dispensedate=t1.nextdispensedate)and(t1.nextdispensedate<t2.eventstartort1.dispensedate>t2.eventend)); Arquivo SQL_ORACLE_STROKE.SQL

Recursos “pobres”: BETWEEN, >, >= , <, <= e = Índices? Particionamento? Funções: DATEDIFF(), DATEPART(), etc Uso de subconsultas, OVER(), LEAD() , CTE e outros

Page 17: Como lidar com dados temporais e intervalos com a linguagem SQL

17

Que tal um novo SQL? Temporal databases: TimeDB, Oracle Workspace Manager,

Temporal Tables (SQL Server 2016) TSQL2: Temporal Query Language Operador OVERLAPS(), CONTAINED IN… e outros

SELECT SUM(N.Cost), SUM(N2.Cost)VALID VALID(NI)FROM NBC_FB_Insertion AS NI NI2, NBCShows AS N N2WHERE NI.GameName = N.ShowName ANDVALID(NI) OVERLAPS VALID(N) ANDNI2.GameName = NS2.ShowName ANDVALID(NI2) OVERLAPS VALID(N2) ANDTRANSACTION(NI2) OVERLAPS DATE ’now - 14 days’ ANDTRANSACTION(N2) OVERLAPS DATE ’now - 14 days’GROUP BY VALID(NI) USING MONTH

Tutorial: http://bit.ly/1OsF5NZ

Page 18: Como lidar com dados temporais e intervalos com a linguagem SQL

18

E o NoSQL? Consultas temporais com um NoSQL de documentos (ex: MongoDB)

db.ColData.find({….}).find({….}).find({….})….

BitemporalDB: camada OO temporal sobre o MongoDB (http://bit.ly/1KgSwlm)

Exemplo: arquivo BitemporalTest.java

Imagine ter que montar uma query temporal para processamento com map/reduce em Haddop ou similar… case Ebay (http://bit.ly/1MgECzh)

Page 19: Como lidar com dados temporais e intervalos com a linguagem SQL

19

Não vamos esquecer o OLAP…. Tempo é muito importante em OLAP Exemplos de dimensões de tempo:

Geralmente uso de dashboards e, no máximo, um controle treeview dentro de tabela dinâmica

Gráficos dinâmicos (drill down e drill up)

Page 20: Como lidar com dados temporais e intervalos com a linguagem SQL

20

Novas abordagens Especificar consulta por ícones

Exemplo de interface gestual para SQL no mobile: vídeo “Querying without keyboard” - http://bit.ly/1CSy0oC

Registros onde evento A aconteceu pelo menos três dias depois do evento B

Registros onde infarto aconteceuenquanto tomava droga A

Registros com evento ER, sem evento No Specialty e com evento Discharged

Page 21: Como lidar com dados temporais e intervalos com a linguagem SQL

21

Controles e interfaces Modelagem específica sempre ajuda Alguns controles são muito úteis:

Zoombar Scrollbar com intervalos (range) Controle para gráfico de Gant

Interfaces interativas para descoberta de padrões

Page 22: Como lidar com dados temporais e intervalos com a linguagem SQL

22

Demo: EventFlow Demo 1: EventFlow com dados de pacientes em um pronto-socorro(ER)

Demo 2: EventFlow com dados de jogadores de StarCraft 2

Page 23: Como lidar com dados temporais e intervalos com a linguagem SQL

23

Recomendações gerais Mistura interface interativa + ferramenta de consulta

Gráficos + elementos visuais + filtros

Tamanho x modelagem

Tenha lib/framework específico para operações de tempo. Exemplo: Time-Period-Library-for-NET (http://bit.ly/1Jt4wL0) e Joda-Time (http://bit.ly/1IeTjBj)

Saiba lidar com variações de tempo: Anos bissextos Fuso horário (UTC, etc) Adição de segundos Precisão (segundos, milisegundos, minutos)

Page 24: Como lidar com dados temporais e intervalos com a linguagem SQL

24

Conclusão

Dados temporais estão por todos os lugares

Eventos, períodos e intervalos

Várias possibilidades para análises e operações

SQL ainda é complexo para várias consultas envolvendo intervalos e eventos

Abordagem mista: interface amigável com backend robusto

Não é vergonha fazer decteção de padrões “manualmente”

Bons e maus cases precisam ser mais detalhados e divulgados fora da área acadêmica

Page 25: Como lidar com dados temporais e intervalos com a linguagem SQL

25

Perguntas?

Mauro Pichiliani ([email protected])@pichiliani

@databasecast•