Upload
pichiliani
View
756
Download
1
Embed Size (px)
Citation preview
1
Como lidar com dadostemporais e intervalos com
a linguagem SQL
Mauro Pichiliani ([email protected])@pichiliani
@databasecast
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
Tópicos
Dados temporais
Pesquisas e operações
SQL nem sempre é o melhor…
OLAP….?
Novas abordagens
Recomendações gerais
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
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
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
7
Exemplo 2: Cronograma (gráfico de Gantt)
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
Exemplo 4: Logs de servidores Ordem de eventos (início, manutenção, parada,
etc) Intervalos paralelos geram efeitos colaterais Identificação de anomalias
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
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
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
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
14
Exemplo pesquisa Encontre o padrão
Encontre as relações
15
Operações
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
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
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
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
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
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
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
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
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