1. O documento discute como lidar com dados temporais e intervalos usando SQL e outras abordagens.
2. Exemplos de dados temporais incluem registros médicos, agendamentos, logs de servidores e análises esportivas e políticas.
3. Abordagens para análise temporal incluem SQL, NoSQL, OLAP e novas interfaces visuais e ferramentas específicas para tempo.
Como lidar com dados temporais e intervalos com a linguagem SQL
1. 1
Como lidar com dados
temporais e intervalos com
a linguagem SQL
Mauro Pichiliani (mauro@pichiliani.com.br)
@pichiliani
@databasecast
2. 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
3. 3
Tópicos
Dados temporais
Pesquisas e operações
SQL nem sempre é o melhor…
OLAP….?
Novas abordagens
Recomendações gerais
4. 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
5. 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?
6. 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
8. 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)
9. 9
Exemplo 4:
Logs de servidores
Ordem de eventos (início, manutenção, parada,
etc)
Intervalos paralelos geram efeitos colaterais
Identificação de anomalias
10. 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
11. 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
12. 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
13. 13
Pesquisas
Basicamente é análise do passado
“Estudar o passado para não repetir
os 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
16. 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) nextdrug
From DRUGTBL
wheredrugin(’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
17. 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 N2
WHERE NI.GameName = N.ShowName AND
VALID(NI) OVERLAPS VALID(N) AND
NI2.GameName = NS2.ShowName AND
VALID(NI2) OVERLAPS VALID(N2) AND
TRANSACTION(NI2) OVERLAPS DATE ’now - 14 days’ AND
TRANSACTION(N2) OVERLAPS DATE ’now - 14 days’
GROUP BY VALID(NI) USING MONTH
Tutorial: http://bit.ly/1OsF5NZ
18. 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)
19. 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)
20. 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 aconteceu
enquanto tomava droga A
Registros com evento ER, sem evento
No Specialty e com evento Discharged
21. 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
22. 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
23. 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)
24. 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