1
Como lidar com dados
temporais e intervalos com
a linguagem SQL
Mauro Pichiliani (mauro@pichiliani.com.br)
@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 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
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) 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
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
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 aconteceu
enquanto 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
25
Perguntas?
Mauro Pichiliani (mauro@pichiliani.com.br)
@pichiliani
@databasecast
•

Como lidar com dados temporais e intervalos com a linguagem SQL

  • 1.
    1 Como lidar comdados 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  TemporalEvent 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:  Registrosmé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.
    7 Exemplo 2:  Cronograma(gráfico de Gantt)
  • 8.
    8 Exemplo 3:  Agendamentoe 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:  Logsde servidores  Ordem de eventos (início, manutenção, parada, etc)  Intervalos paralelos geram efeitos colaterais  Identificação de anomalias
  • 10.
    10 Exemplo 5:  Análisede 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áliseesportiva 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álisede 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
  • 14.
    14 Exemplo pesquisa  Encontreo padrão  Encontre as relações
  • 15.
  • 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 umnovo 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 esquecero 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  Especificarconsulta 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  Demo1: 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  Misturainterface 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 temporaisestã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
  • 25.