Como lidar com dados temporais e intervalos com a linguagem SQL
-
Upload
pichiliani -
Category
Technology
-
view
756 -
download
1
Transcript of Como lidar com dados temporais e intervalos com a linguagem SQL
![Page 1: Como lidar com dados temporais e intervalos com a linguagem SQL](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/1.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/2.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/3.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/4.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/5.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/6.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/7.jpg)
7
Exemplo 2: Cronograma (gráfico de Gantt)
![Page 8: Como lidar com dados temporais e intervalos com a linguagem SQL](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/8.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/9.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/10.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/11.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/12.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/13.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/14.jpg)
14
Exemplo pesquisa Encontre o padrão
Encontre as relações
![Page 15: Como lidar com dados temporais e intervalos com a linguagem SQL](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/15.jpg)
15
Operações
![Page 16: Como lidar com dados temporais e intervalos com a linguagem SQL](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/16.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/17.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/18.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/19.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/20.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/21.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/22.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/23.jpg)
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](https://reader036.fdocumentos.tips/reader036/viewer/2022062308/55d24401bb61ebec618b46c0/html5/thumbnails/24.jpg)
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