Data Warehousing Disciplina: Banco de Dados II Professor: Carlos Eduardo Pires [email protected] Bibliografia KIMBALL, R., ROSS, M., THORNTHWAITE, W., MUNDY, J., BECKER, B. The Data Warehouse Lifecycle Toolkit. Wiley, 2nd Edition, 2008. SILBERSCHATZ, A., KORTH, H., SUDARSHAN, S. Sistema de Banco de Dados. Campus, 5ª Edição, 2006. INMON, W. H. Building the Data Warehouse. Wiley, 4th Edition, 2005. UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 2 Agenda Introdução (Integração de Dados) Data Warehousing: Conceitos e Terminologias Processo de Data Warehousing Modelagem Multidimensional Ferramentas OLAP SQL para Data Warehousing Otimização de DW UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 3 Abordagens para Integração de Dados Integração de Dados Objetivo de um Sistema de Integração de Dados (SID) Fornecer uma interface uniforme para acesso a múltiplas fontes de dados Permite ao usuário especificar o que ele deseja e o sistema determina como e onde a informação será conseguida Estudada no campo da Inteligência Artificial e de Banco de Dados UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 5 Integração de Dados Problemas da Integração de Dados Fontes são compostas por dados muito específicos (granularidade) Dados são armazenados em diferentes esquemas e modelos Dados podem ser não estruturados, semiestruturados ou estruturados Fontes de dados têm diferentes linguagens de consulta UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 6 Integração de Dados Autonomia das Fontes de Dados Continuam a suportar aplicações locais Alterações podem ocorrer tanto nos dados quanto nos esquemas Um SID necessita lidar com as constantes mudanças nas fontes que estão sendo integradas UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 7 Integração de Dados Principais Abordagens Abordagem Virtual (Mediadores) Abordagem Materializada Consulta as fontes em tempo de execução Consulta um repositório com dados materializados Vantagens e desvantagens Dados atuais X Tempo de resposta UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 8 Arquiteturas Clássicas Arquitetura de Mediadores Abordagem virtual Características Domínio específico Mapeamentos Apenas consultas Fontes de dados de diferentes tipos UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 9 Arquiteturas Clássicas Arquitetura de Data Warehouse Abordagem materializada Estratégias de manutenção Rematerialização da visão integrada Manutenção incremental A Arquitetura de Data Warehouse será abordada nesta disciplina UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 10 Data Warehouse Data Warehouse – Definições “Coleção de dados orientada a assunto, integrada, não-volátil e variante no tempo, utilizada para tomada de decisões” W. H. Inmon “Repositório estruturado e corporativo de dados orientados a assunto, variantes no tempo e históricos, usados para recuperação de informações e suporte à decisão. O DW armazena dados atômicos e sumariados” Oracle Corporation UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 12 Data Warehouse – Definições “Uma cópia de dados transacionais estruturada especificamente para consulta e análise” R. Kimball UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 13 Propriedades de um Data Warehouse Integrado Orientado a Assunto Data Warehouse Não-volátil Variante no Tempo UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 14 Orientado a Assunto Os dados são divididos e armazenados por áreas de negócio Aplicações OLTP Data Warehouse Aposentadoria Investimento Seguro Empréstimo Poupança Informações Financeiras dos Clientes UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 15 Integrado Os dados de um determinado assunto são definidos e armazenados apenas uma vez Poupança Contas Empréstimos Aplicações OLTP Cliente Data Warehouse UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 16 Variante no Tempo Os dados são armazenados como uma série de fotografias, cada uma representando um período no tempo Data Warehouse UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 17 Não-Volátil Dados são materializados no DW Operacional Data Warehouse Carga Inserção, Atualização, Remoção e/ou Leitura Leitura UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 18 Alterando os Dados em um Data Warehouse Bancos de Dados Operacionais Banco de Data Warehouse Primeira Carga Atualizar Atualizar Atualizar Eliminar ou Arquivar UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 19 Data Mart Data Warehouse departamental Espelho parcial de um Data Warehouse Oferece melhoria no desempenho Armazena menos dados Desenvolvimento Construído e “povoado” mais rapidamente Satisfação imediata do Cliente UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 20 Data Mart UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 21 Data Mart DW Corporativo Clientes 1998_Vendas 1999_Vendas 2000_Vendas 1998_Garantia 1998_Suporte ... Data Mart Vendas & Marketing Clientes 1998_Vendas 1999_Vendas 2000_Vendas ... Data Mart Garantia & Suporte Clientes 1998_Garantia ... 1998_Suporte ... UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 22 Data Warehouse x Data Mart Propriedade Data Warehouse Data Mart Escopo Empresa Departamento Assuntos Vários Um único assunto Fonte de Dados Várias Poucas Tempo de Implementação Meses a anos Meses UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 23 Movendo Dados de um Data Warehouse para Data Marts Mart Vendas Fonte 1 Fonte 2 Fonte 3 Data Warehouse Mart Finanças Mart Suporte a clientes Desvantagens Vantagens Tempo mais longo de Campos compartilhados desenvolvimento Fonte comum Processamento distribuído UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 24 Movendo Dados de Data Marts para um Data Warehouse Fonte 1 Mart Vendas Fonte 2 Mart Finanças Fonte 3 Mart Suporte a clientes Vantagens Mais simples e rápido Dados específicos de cada departamento Data Warehouse Desvantagens Duplicação de dados Data Marts incompatíveis UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 25 Processo de Data Warehousing Componentes do Processo de Data Warehousing Fontes de Dados Área de Preparação Área de Armazenamento Ferramentas de Acesso Legado Data Warehouse Externa ODS Operacional Data Marts Repositório de Metadados UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 27 Um Sistema de Data Warehousing Dados de Sistemas Operacionais Data Warehouse Vendas OLTP OLTP OLTP Data Marts Dados da Empresa Dados no Ambiente OLAP Produção Contábil Compras UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 28 Principais Profissionais Envolvidos em um Projeto de Data Warehousing Analista de Negócios Administrador de Dados Administrador de Banco de Dados Desenvolvedor de DW Desenvolvedor de Relatórios OLAP Pessoal da própria empresa! UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 29 Coleção de Ferramentas Obtenção de dados Limpeza, integração, ... Consulta, relatório, análise Mineração de dados Monitoração e administração do DW Monitoração do ETL UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 30 Processo de Extração, Transformação e Carga “Extrai dados necessários das fontes a serem integradas, transforma-os e carrega-os no DW” Extraction, Transformation and Load (ETL) Limpeza de Dados Corrige e pré-processa os dados Origem Área de Preparação UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires Destino 31 Transformação de Dados UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 32 Limpeza de Dados Candidato Bairro Candidato Bairro José Boa Viagem José Boa Viagem Maria B. Viagem Maria Boa Viagem Pedro BV Pedro Boa Viagem Mário Boa Viag. Mário Boa Viagem Marta B.V. Marta Boa Viagem Priscila B Viagem Priscila Boa Viagem Adolf Boa Viajem Adolf Boa Viagem ... ... UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 33 Ferramentas de ETL: Oracle Warehouse Builder UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 34 Modelando um Data Warehouse Comparando Ambientes de Modelagem Operacional: OLTP Entidades normalizadas Segue terceira forma normal ou maior Produz um design complexo de BD Armazena dados no nível transacional mais baixo Aumenta o nível de JOIN de tabelas em consultas Estrutura tipicamente estática Analítico: Data Warehouse Entidades desnormalizadas Produz um único design de BD mais facilmente compreensível pelos usuários Armazena dados Nível de transação Nível de sumário Diminui o número de JOINs de tabelas em consultas Estrutura dinâmica UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 36 Análise de Negócio “Conjunto de atividades e técnicas utilizadas para servir como ligação entre partes interessadas no intuito de compreender a estrutura, políticas e operações de uma organização e para recomendar soluções que permitam que a organização alcance suas metas” BABoK (Business Analysis Body of Knowledgement) Como analisar? Ponha-se no lugar de um Gerente de Vendas O que ele gostaria de analisar? UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 37 Modelagem Multidimensional Dados operacionais visualizados sob diversos ângulos Os ângulos são chamados dimensões do negócio Produto Loja Tempo Região Uma das dimensões é “sempre” o Tempo UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 38 Modelagem Multidimensional Outros Exemplos de Dimensões UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 39 Modelagem Multidimensional Atributos de Dimensão São atributos qualitativos que caracterizam os ramos do negócio envolvidos na medida de desempenho de determinado fato Exemplo Dimensão “Produto” Descrição, embalagem, preço, etc. UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 40 Modelagem Multidimensional Granularidade Define o nível de detalhe das dimensões Influencia o tamanho das dimensões Exemplo Dimensão “Loja” País Região Estado Cidade Maior Granularidade Menor Granularidade UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 41 Modelagem Multidimensional Hierarquias entre os atributos das dimensões Úteis para a geração de relatórios Dimensão “Região” Fornecedor Cidade Estado Região Dimensão “Tempo” Dia Semana Mês Trimestre Ano UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 42 Modelagem Multidimensional Associados a cada dimensão existem fatos: Vendas Compras Sinistro Fatos São valores quantitativos referentes ao desempenho de um grupo de dimensões Exemplo Fato “Vendas” (Loja, Produto e Tempo) Quantidade, lucro, valor, etc. UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 43 Processamento OLAP OLAP (On-line Analytical Processing) Aplicado sobre estruturas dimensionais O termos “On-line” significa que os resumos solicitados são obtidos rapidamente Difere substancialmente daquele utilizado por aplicações do nível operacional (OLTP) UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 44 Processamento OLAP x OLTP Propriedade OLTP OLAP Tempo de Resposta Milisegundos para segundos Segundos para horas Operações DML Leitura Natureza dos dados 30 – 60 dias Snapshots no tempo Organização dos Dados Aplicação Assunto, tempo Tamanho Pequeno para grande Fontes de Dados Operacional, Interna Grande para Muito Grande Operacional, Interna, Externa Atividades Processos Análise UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 45 Modelagem Multidimensional Principais vertentes para Modelagem Multidimensional Multidimensional OLAP (MOLAP) Relational OLAP (ROLAP) Hybrid OLAP (HOLAP) Outras variações Web-based OLAP (WOLAP) Desktop OLAP (DOLAP) Real-Time OLAP (RTOLAP) UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 46 MOLAP (Multidimensional OLAP) Baseia-se nos Bancos de Dados Multidimensionais Estrutura utilizada: Cubo Multidimensional Cada aresta representa uma dimensão do negócio As células do cubo são preenchidas com valores quantitativos (medidas ou fatos) Data Warehouse ou Data Mart Cubo Armazena cópia da tabela fato e dimensões Armazena agregações SGBD Dados MOLAP Agregações MOLAP UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 47 MOLAP (Multidimensional OLAP) PRODUTO Qual o total de vendas de 'Meias' do 'Cliente 1' em '2001'? TEMPO 1999 2000 Vendas 2001 Cliente 2 2002 Cliente 1 Mais informações: http://download.oracle.com/docs/cd/E10530_01/doc/epm.931/html_esb_dbag/frameset.htm?dinconc.htm UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 48 ROLAP (Relational OLAP) Tabelas relacionais simulam o cubo multidimensional O esquema proposto concentra numa tabela as medidas ou fatos do negócio (tabela de fatos) Os componentes das dimensões são armazenados em outras tabelas (tabelas de dimensão) Data Warehouse ou Data Mart Dados ROLAP Agregações ROLAP SGBD Dados-base são mantidos no SGBD-fonte Agregações são armazenadas em tabelas relacionais Estrutura totalmente relacional UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 49 HOLAP (Hybrid OLAP) Data Warehouse ou Data Mart Dados-base mantidos no BD fonte Cubo Agregações calculadas e armazenadas no cubo Dados ROLAP SGBD Agregações MOLAP UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 50 MOLAP vs. ROLAP vs. HOLAP Armazenamento MOLAP HOLAP ROLAP Dados de base Cubo Tabela Relacional Tabela Relacional Agregações Cubo Cubo Tabela Relacional MOLAP HOLAP ROLAP Imediato Mais rápido Rápido Consumo em disco Alto Médio Baixo Manutenção do cubo Alto Médio Baixo Perspectiva do Cliente Desempenho de consulta UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 51 Modelo Estrela (“Star Schema”) Dimensão Produto Dimensão Loja Produto_id Descrição,... Loja_id Cidade,... Fatos “Vendas” Produto_id Loja_id Tempo_id Cliente_id Valor_vendas Total_vendas,... Tabela de Fatos Dimensão Tempo Tempo_id Dia Mês Ano,... Dimensões Desnormalizadas Dimensão Cliente Cliente_id Nome,... UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 52 Modelo Estrela (“Star Schema”) Tabelas de Dimensão Geográfica Dimensão Tabela-Fato Geográfica Produto Medidas Tempo Und. Produto $ Fatos Tempo UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 53 Modelo Estrela (“Star Schema”) Dim_Funcionario Chave_Funcionario Codigo_Funcionario . . . Dimension Table Dim_Tempo Chave_Tempo Data Tabela Fato Fato_Vendas Dim_Produto Chave_Produto Codigo_Produto Chave_Tempo Chave_Funcionario Chave_Produto Chave_Cliente Chave_Entregador . . . . . . Qtd-Prod Valor-Total Dim_Entregador Chave_Entreegador Codigo_Entregador . . . …. . . Dim_Cliente Chave_Cliente Codigo_Cliente . . . UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 54 Modelo Estrela (“Star Schema”) product prodId name price sale orderId date custId prodId storeId qty amt customer custId name address city store storeId city UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 55 Modelo Estrela (“Star Schema”) product prodId p1 p2 name price bolt 10 nut 5 sale oderId date o100 1/7/97 o102 2/7/97 105 3/8/97 customer custId 53 81 111 custId 53 53 111 name joe fred sally prodId p1 p2 p1 storeId c1 c1 c3 address 10 main 12 main 80 willow store storeId c1 c2 c3 qty 1 2 5 amt 12 11 50 city nyc sfo la city sfo sfo la UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 56 Exercício de Sala A partir do Modelo Conceitual do Projeto da Disciplina, tente montar um esquema estrela Mostrar Fato, Dimensões e Relacionamentos, além dos atributos UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 57 Modelo Flocos de Neve (“Snowflakes”) Tabela-Dimensão Principal Fato_Vendas Dim_Produto Chave_Tempo Chave_Funcionario Chave_Produto Chave_Cliente Chave_Entregador Chave_Produto RequiredDate CodigoMarca . . . Nome Tamanho Tabelas-Dimensão Secundárias MarcaProduto CodigoMarca CodigoCategoria Categoria CodigoCategoria Nome UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 58 Modelo Flocos de Neve (“Snowflakes”) ESTADO CATEGORIA Dimensões Normalizadas SUBCATEGORIA CIDADE PRODUTO LOJA Vendas Custo TEMPO CLIENTE UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 59 Modelo Flocos de Neve (“Snowflakes”) Hierarquia entre Dimensões sType store store storeId s5 s7 s9 city cityId sfo sfo la tId t1 t2 t1 mgr joe fred nancy snowflake schema constellations region sType tId t1 t2 city size small large cityId pop sfo 1M la 5M location downtown suburbs regId north south region regId name north cold region south warm region UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 60 Escolhendo uma Modelagem Multidimensional Clareza Número de tabelas Complexidade de consultas Desempenho de consulta Star Schema Snowflake + fácil + difícil < > + simples + complexo + rápido + lento UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 61 Exercício de Sala Montar um esquema snowflakes referente ao fato Vendas Responda a seguinte consulta no esquema snowflakes: Quantidade de vendas de carros da marca W, feitas ao cliente X, no ano de Z UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 62 Escolhendo a Granularidade Determinar requisitos dos dados Escolher o nível mais baixo de detalhe Requer espaço em disco Envolve maior tempo de processamento Provê capacidade detalhada de análise de dados Adaptar medidas à granularidade estabelecida Considerações de projeto Usar medidas aditivas e numéricas UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 63 Definindo Características de Dimensões Aplicar características às tabelas de dimensão Definir PRIMARY KEY Incluir colunas altamente correlacionadas e descritivas Projetando para Usabilidade e Extensibilidade Minimizar ou evitar uso de códigos e abreviações Criar colunas úteis para níveis de agregação Evitar valores nulos ou em branco Tentar minimizar o número de registros que mudam ao longo do tempo UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 64 Identificando Hierarquias de Dimensões Hierarquia Consolidada Hierarquia em Separado Local da Loja Continente Local da Loja Continente País Região Cidade Loja Continente País País Região Região Cidade Cidade Loja Loja 01 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 65 Dicas Importantes Levar a PK original da tabela fonte para a dimensão Carga incremental Durante a carga, carregar as dimensões primeiramente Dimensões são bem menores que os fatos Vale a pena desnormalizar UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 66 Terminologia Local Atlanta Uvas Denver Membro Detroit Produto Cerejas Dimensão Melões Célula Maçãs Pêras Dia 1 Dia 2 Jan. 1998 ... Fev.. ... 1999 ... Q1 Níveis Q2 Q3 Tempo Q4 Tempo Início Fim Trimestre 1 1 deJulho 30 de Setembro Trimestre 2 1 de Outubro 31 de Dezembro 1 de Janeiro 31 de Março 1 de Abril 30 de Junho Trimestre 3 Propriedades Trimestre 4 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 67 Operações no Cubo Local Atlanta Uvas Denver Detroit Produto Cerejas Melões Sales Sales Maçãs Peras Pêras Q1 Q2 Q3 Tempo Q4 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 68 Dimensões Compartilhadas Dimensão 1 Dimensão 3 Fatos 1 Dimensão 2 Dimensão 5 Fatos 2 Dimensão 4 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires Dimensão 6 69 Fatos & Fatos? Dimensão 1 Dimensão 5 Fatos 2 Fatos 1 Dimensão 2 Dimensão 6 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 70 Tamanho de um DW Fato: Vendas Data WarehousingUFCG/CEEI/DSC - Prof. Carlos- Banco Eduardo Santos Pires de Dados II - Prof. Carlos Eduardo Pires 71 71 Tamanho de um DW É medido pelo tamanho da Tabela de Fatos Em geral, o tamanho das dimensões é desprezado Dimensão Tempo: 2 anos x 365 dias = 730 dias (linhas) Dimensão Loja: 300 lojas Dimensão Produto: 30.000 produtos Data WarehousingUFCG/CEEI/DSC - Prof. Carlos- Banco Eduardo Santos Pires de Dados II - Prof. Carlos Eduardo Pires 72 72 Tamanho de um DW Dimensão Promoção: cada item vendido está associado a uma única promoção Número de registros da tabela de fatos (média de 3.000 produtos vendidos ao dia em cada loja): 730 (dias) x 300 (lojas) x 3000 (produtos/dia) x 1 (promoção)= 657 milhões de registros Data WarehousingUFCG/CEEI/DSC - Prof. Carlos- Banco Eduardo Santos Pires de Dados II - Prof. Carlos Eduardo Pires 73 73 Tamanho de um DW Número de campos chaves = 4 Número de campos fatos = 4 Total de campos = 8 (de 4 bytes, cada um) Tamanho da Tabela de Fatos 657.000.000 x 8 x 4 = 21GB Data WarehousingUFCG/CEEI/DSC - Prof. Carlos- Banco Eduardo Santos Pires de Dados II - Prof. Carlos Eduardo Pires 74 74 Ferramentas OLAP Ferramentas OLAP CAMADA DE “FRONT-END” Ferramentas de Apresentação Executivo Ferramentas de Apresentação Ferramentas OLAP Ferramentas de Mineração de Dados UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires DW BD 76 Ferramentas OLAP Admitem análise interativa de informações resumidas Fornecem ao usuário a visualização dos dados sob diferentes ângulos Comportam as necessidades da atividade de análise Características de um Relatório OLAP Séries temporais Comparações Ajuda à identificação de anomalias ou exceções Operações: Drill Up, Drill Down, Slicing/Dicing UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 77 Exemplo de Relatório OLAP Produto Região Vendas no Mês Pasta Colgate Pasta Colgate Pasta Colgate Total Sul Sudeste Nordeste 110 179 55 344 Comparação com o Mês Anterior **12% -3% 5% **6% Data WarehousingUFCG/CEEI/DSC - Prof. Carlos- Banco Eduardo Santos Pires de Dados II - Prof. Carlos Eduardo Pires 78 78 Exemplo de Relatório OLAP Produto Região Tamanho Vendas no Mês Colgate Colgate Colgate Colgate Colgate Colgate Colgate Colgate Colgate Colgate Colgate Colgate Total Sul Sul Sul Total Sudeste Sudeste Sudeste Total Nordeste Nordeste Nordeste Total A B C 34 36 40 110 63 60 56 179 19 17 19 55 344 A B C A B C Data WarehousingUFCG/CEEI/DSC - Prof. Carlos- Banco Eduardo Santos Pires de Dados II - Prof. Carlos Eduardo Pires Comp. Com o Mês Anterior **10% **13% **11% **12% -2.8% -3.1% -2.9% -3% 5% 4% 6% 5% 6% 79 79 Exemplo de Relatório OLAP Produto Região Equipe de Vendas Vendas no Mês Colgate Colgate Colgate Colgate Colgate Colgate Colgate Colgate Colgate Colgate Colgate Colgate Total Sul Sul Sul P. Alegre Curitiba Florianóp. Sudeste Sudeste Sudeste São Paulo Rio Belo Horiz. Nordeste Nordeste Nordeste Salvador Fortaleza Recife 52 28 30 110 93 75 11 179 21 18 16 55 344 Comp. Com o Mês Anterior **21% 5% 6% **12% 4% 5% -15% -3% 5% 4% 6% 5% 6% Data WarehousingUFCG/CEEI/DSC - Prof. Carlos- Banco Eduardo Santos Pires de Dados II - Prof. Carlos Eduardo Pires 80 Ferramentas OLAP: Oracle Discoverer TABULAÇÃO CRUZADA UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 81 Tabela Dinâmica no Excel É uma tabela interativa que resume uma grande quantidade de dados rapidamente, ou os combina de tabelas diferentes É possível girar suas linhas e colunas para ver resumos diferentes dos dados de origem, filtrar os dados exibindo páginas diferentes ou exibir os detalhes das áreas de interesse UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 82 Tabela Dinâmica no Excel Exemplo: AULAPED.xls (http://www.virtual.epm.br/material/tis/currmed/tab_dinamica/tabdin.html) Selecione a área compreendida entre as células A1 e H1612 Menu Dados "Relatório da Tabela Dinâmica" Onde estão os dados para análise? BD ou Lista do Excel Intervalos de dados a serem usados? $A$1:$H$1612 Layout UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 83 SQL para OLAP Extensões SQL para Ferramentas OLAP Comando Merge Operador ROLLUP Produz um conjunto de resultados que contém as linhas agrupadas e os valores de subtotais Operador CUBE A partir de uma tabela origem, insere ou atualiza linhas em uma tabela destino Produz um conjunto de resultados que contém as linhas de ROLLUP e as linhas de tabulação cruzada Operador Grouping Sets Extensão da cláusula GROUP BY Possibilita explicitar os agrupamentos desejados UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 85 Merge Sintaxe: MERGE <hint> INTO <table_name> USING <table, view or query> ON (<condition>) WHEN MATCHED THEN <update_clause> WHEN NOT MATCHED THEN <insert_clause> [LOG ERRORS <log_errors_clause> <reject limit <integer | unlimited>]; UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 86 Merge – Exemplo 01 INSERT XOR UPDATE ALUNO Origem ALUNO2 Destino UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 87 Merge – Exemplo 01 CREATE TABLE aluno ( codigo NUMBER PRIMARY KEY, nome VARCHAR2(10), curso VARCHAR2(10), telefone VARCHAR2(20)); INSERT INTO aluno VALUES (1,'JOSE','CC','88847654'); INSERT INTO aluno VALUES (2,'MARIA','EE','89887112'); INSERT INTO aluno VALUES (3,'PAULO','EM','99817638'); CREATE TABLE aluno2 ( id NUMBER PRIMARY KEY, nome VARCHAR(10), curso VARCHAR2(10), telefone VARCHAR2(20), codigo NUMBER); UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 88 Merge – Exemplo 01 CREATE SEQUENCE seq_aluno; CREATE OR REPLACE PROCEDURE atualiza IS BEGIN MERGE INTO aluno2 a2 USING aluno a ON (a.codigo = a2.codigo) WHEN MATCHED THEN UPDATE SET a2.curso = a.curso, a2.telefone = a.telefone WHEN NOT MATCHED THEN INSERT (a2.id, a2.nome, a2.curso, a2.telefone, a2.codigo) (seq_aluno.nextval, a.nome, a.curso, a.telefone, a.codigo); COMMIT; END; VALUES EXECUTE atualiza; SELECT * FROM aluno2; UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 89 Merge – Exemplo 01 INSERT INTO aluno VALUES (4,'ZILDA','CC','81318630'); COMMIT; EXECUTE atualiza SELECT * FROM aluno2; UPDATE aluno SET curso = 'CC' WHERE codigo = 2; UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 90 Merge – Exemplo 02 CREATE TABLE employee ( employee_id NUMBER(5), first_name VARCHAR2(20), last_name VARCHAR2(20), dept_no NUMBER(2), salary NUMBER(10)); INSERT INTO employee VALUES (1,'Dan', 'Morgan',10,100000); INSERT INTO employee VALUES (2,'Helen','Lofstr',20,100000); INSERT INTO employee VALUES (3,'Akiko','Toyota',20,50000); INSERT INTO employee VALUES (4,'Jackie','Stough',20,40000); INSERT INTO employee VALUES (5,'Richard','Foote',20,70000); INSERT INTO employee VALUES (6,'Joe', 'Johnson',20,30000); INSERT INTO employee VALUES (7,'Clark', 'Urling',20,90000); UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 91 Merge – Exemplo 02 CREATE TABLE bonuses ( employee_id NUMBER, bonus NUMBER DEFAULT 100); INSERT INTO bonuses (employee_id) VALUES (1); INSERT INTO bonuses (employee_id) VALUES (2); INSERT INTO bonuses (employee_id) VALUES (4); INSERT INTO bonuses (employee_id) VALUES (6); INSERT INTO bonuses (employee_id) VALUES (7); COMMIT; SELECT * FROM employee; SELECT * FROM bonuses; UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 92 Merge – Exemplo 02 subconjunto de employee MERGE INTO bonuses b USING ( SELECTemployee_id, salary, dept_no FROM employee WHERE dept_no = 20) e ON (b.employee_id = e.employee_id) WHEN MATCHED THEN UPDATE SET b.bonus = e.salary * 0.1 WHEN NOT MATCHED THEN INSERT (b.employee_id, b.bonus) VALUES (e.employee_id, e.salary * 0.05); UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 93 Cubo 2D GROUP BY storeId, prodId Fact table: sale prodId storeId p1 c1 p2 c1 p1 c3 p2 c2 Multi-dimensional cube: amt 12 11 50 8 p1 p2 c1 12 11 c2 c3 50 8 dimensions = 2 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 94 Cubo 3D GROUP BY storeId, prodId, date Fact table: sale prodId p1 p2 p1 p2 p1 p1 Multi-dimensional cube: storeId c1 c1 c3 c2 c1 c2 date 1 1 1 1 2 2 amt 12 11 50 8 44 4 day 2 day 1 p1 p2 c1 p1 12 p2 11 c1 44 c2 4 c2 c3 c3 50 8 dimensions = 3 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 95 Agregação • Soma de quantidade (amt) em um dia (dia 1) • Em SQL: SELECT SUM(amt) FROM sale WHERE date = 1; sale prodId storeId p1 c1 p2 c1 p1 c3 p2 c2 p1 c1 p1 c2 date 1 1 1 1 2 2 amt 12 11 50 8 44 4 81 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 96 Agregação • Soma quantidade (amt) por dia • Em SQL: SELECT date, SUM(amt) FROM sale GROUP BY date; sale prodId storeId p1 c1 p2 c1 p1 c3 p2 c2 p1 c1 p1 c2 date 1 1 1 1 2 2 amt 12 11 50 8 44 4 ans date 1 2 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires sum 81 48 97 Agregação • Soma quantidade (amt) por dia e produto • Em SQL: SELECT date, prodId, SUM(amt) FROM sale GROUP BY date, prodId sale prodId storeId p1 c1 p2 c1 p1 c3 p2 c2 p1 c1 p1 c2 date 1 1 1 1 2 2 amt 12 11 50 8 44 4 sale prodId p1 p2 p1 date 1 1 2 amt 62 19 48 Desconsidera storeId rollup drill-down UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 98 Agregação Operadores Cláusula “HAVING” SUM, COUNT, MAX, MIN, AVG Eliminar determinados grupos Uso da hierarquia entre dimensões Média de vendas por região (região está dentro de loja (“store”)) Maior venda por mês (mês está dentro de ano) UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 99 Agregação no Cubo GROUP BY storeId, prodId, date day 2 day 1 p1 p2 c1 p1 12 p2 11 c1 44 c2 4 c2 c3 ... c3 50 GROUP BY storeId 8 GROUP BY storeId, prodId p1 p2 c1 56 11 c2 4 8 rollup drill-down c3 50 sum c1 67 c2 12 c3 50 129 p1 p2 sum 110 19 GROUP BY prodId UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 100 Operadores do Cubo day 2 day 1 p1 p2 c1 p1 12 p2 11 p1 p2 c1 56 11 c1 44 c2 4 c2 c3 ... c3 50 sale(c1,*,*) 8 c2 4 8 c3 50 sale(c2,p2,*) sum c1 67 c2 12 c3 50 129 p1 p2 sum 110 19 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires sale(*,*,*) 101 Operadores do Cubo c2 4 8 c312 p1 p2 c1 * 12 p1 p2 c1* 44 c1 56 11 c267 4 c2 44 c3 4 50 11 23 8 8 50 * 62 19 81 * day 2 day 1 p1 p2 * c3 50 * 50 48 * 110 19 129 48 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires sale(*,p2,*) 102 Extensões SQL para Ferramentas OLAP Cláusula GROUP BY tradicional SELECT department_id, job_id, AVG(salary) FROM employees GROUP BY department_id, job_id UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 103 Operador ROLLUP Total de Combinações: n + 1 SELECT FROM WHERE GROUP BY department_id, job_id, SUM(salary) employees department_id < 60 ROLLUP(department_id, job_id); 1 2 3 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 104 Operador CUBE Total de Combinações: 2n SELECT FROM WHERE GROUP BY department_id, job_id, SUM(salary) employees department_id < 60 CUBE (department_id, job_id) ; 1 2 3 4 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 105 Grouping Sets SELECT department_id, job_id, manager_id,avg(salary) FROM employees GROUP BY GROUPING SETS ((department_id,job_id), (job_id,manager_id),()); 1 … 2 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 106 Grouping Sets SELECT department_id, job_id, manager_id,avg(salary) FROM employees WHERE salary > 12000 GROUP BY GROUPING SETS ((department_id,job_id), (job_id,manager_id),()) DEPARTMENT_ID JOB_ID MANAGER_ID AVG(SALARY) ------------- ---------- ---------- ----------20 MK_MAN 13000 80 SA_MAN 13750 90 AD_VP 17000 90 AD_PRES 24000 AD_VP 100 17000 MK_MAN 100 13000 SA_MAN 100 13750 AD_PRES 24000 16416,6667 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 107 Otimizações Visão (Virtual) Crie uma visão, EMPVU80, que contenha detalhes dos funcionários do departamento 80 CREATE VIEW empvu80 AS SELECT employee_id, last_name, salary FROM employees WHERE department_id = 80; View created. UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 109 Visões (Virtual) Servidor de Banco de Dados Aplicação SELECT * FROM USER_VIEWS EMPVU80 empvu80; SELECT employee_id, last_name, salary FROM employees WHERE department_id=80; EMPLOYEES UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 110 Visões Materializadas Armazenam fisicamente os resultados de uma consulta Podem ser atualizadas periodicamente Ajudam a aumentar a velocidade de resposta das consultas que envolvem funções de agregação ou junções entre tabelas Usadas em soluções de Data Warehousing e Replicação de Dados No SGBD Oracle, eram chamadas de snapshots UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 111 Visões Materializadas CREATE MATERIALIZED VIEW relatorio_cliente REFRESH COMPLETE ENABLE QUERY REWRITE AS SELECT c.nome_cliente, SUM(f.valor) AS total FROM fatos_vendas f, dim_cliente c WHERE f.cliente_id = c.cliente_id GROUP BY c.nome_cliente; UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 112 Visões Materializadas – Exemplo 1 CREATE TABLE products (id_product NUMBER PRIMARY KEY, nm_product VARCHAR2(40), ds_product VARCHAR2(200)); CREATE TABLE sales (id_sales NUMBER, id_product NUMBER, amount NUMBER, value NUMBER, PRIMARY KEY (id_sales, id_product)); INSERT INTO products VALUES (1,'NESCAU',null); INSERT INTO products VALUES (2,'AGUA MINERAL',null); INSERT INTO products VALUES (3,'DESODORANTE',null); INSERT INTO sales VALUES (101,1,20,450); INSERT INTO sales VALUES (100,1,10,225); INSERT INTO sales VALUES (100,2,5,30); INSERT INTO sales VALUES (100,3,30,160); INSERT INTO sales VALUES (102,2,2,10); COMMIT; UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 113 Visões Materializadas – Exemplo 1 CREATE MATERIALIZED VIEW product_sales_mv BUILD IMMEDIATE REFRESH FAST ON COMMIT ENABLE QUERY REWRITE AS SELECT p.nm_product, SUM(s.value) FROM products p, sales s WHERE p.id_product = s.id_product GROUP BY nm_product; SELECT * FROM product_sales_mv; NM_PRODUCT SUM(S.VALUE) ---------------------------- -------------------AGUA MINERAL 40 DESODORANTE 160 NESCAU 675 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 114 Visões Materializadas – Exemplo 1 INSERT INTO sales VALUES (103,2,3,14); SELECT * FROM product_sales_mv; NM_PRODUCT SUM(S.VALUE) ------------------------------ -------------------AGUA MINERAL 40 DESODORANTE 160 Mesmo resultado anterior NESCAU 675 COMMIT; SELECT * FROM product_sales_mv; Provoca a rematerialização da visão NM_PRODUCT SUM(S.VALUE) ------------------------------- --------------------AGUA MINERAL 54 Resultado atualizado após o COMMIT DESODORANTE 160 NESCAU 675 UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 115 Visões Materializadas – Exemplo 2 CONN hr/hr @d:\oracle\ora92\rdbms\admin\utlxplan.sql SET autotrace traceonly CREATE MATERIALIZED VIEW dept_emp REFRESH COMPLETE ENABLE QUERY REWRITE AS SELECT d.department_name, SUM(e.salary) AS total FROM departments d, employees e WHERE d.department_id = e.department_id GROUP BY d.department_name; UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 116 Visões Materializadas – Exemplo 2 ALTER SESSION set query_rewrite_enabled = true; SELECT FROM WHERE GROUP BY 11 linhas selecionadas. Plano de Execução ---------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=327 Bytes=9810) 1 0 TABLE ACCESS (FULL) OF 'DEPT_EMP' (Cost=2 Card=327 Bytes=9810) d.department_name, SUM(e.salary) AS total departments d, employees e d.department_id = e.department_id d.department_name; UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 117 Visões Materializadas Vantagens Útil para sumarização, cálculos pré-computados e replicação de dados Acesso mais rápido para consultas envolvendo junções complexas Transparente para usuários finais Podem ser adicionadas ou eliminadas sem invalidar código SQL Desvantagens Custos de desempenho (rematerialização) Custos de armazenamento UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 118 Particionamento de Tabelas Tabelas Particionadas Decomposição de grandes tabelas em pedaços menores chamados partições Tipos de Particionamento Faixa, Lista, Hash CREATE TABLE employee_r ( Particionamento por empno NUMBER(10) PRIMARY KEY, name VARCHAR2(40), Faixa de Valores deptno NUMBER(2)) PARTITION BY RANGE (deptno) (PARTITION P1 VALUES LESS THAN (11) TABLESPACE p1_ts, PARTITION P2 VALUES LESS THAN (21) TABLESPACE p2_ts, PARTITION P3 VALUES LESS THAN (31) TABLESPACE p3_ts, PARTITION P4 VALUES LESS THAN (MAXVALUE) TABLESPACE p4_ts); UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 119 Particionamento de Tabelas CREATE TABLE cliente ( codigo NUMBER(5) NOT NULL, Particionamento por nome VARCHAR2(100), Lista de Valores estado CHAR(2)) TABLESPACE users PARTITION BY LIST (estado) (PARTITION p_regional_sudeste VALUES ('SP', 'RJ', 'MG', 'ES') TABLESPACE users, PARTITION p_regional_nordeste VALUES ('BA', 'PE', 'PB', 'RN') TABLESPACE users); UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 120 Particionamento de Tabelas BEGIN FOR i in 1..1000 LOOP IF MOD(i,2) = 0 THEN INSERT INTO cliente VALUES (i,'AAAAAA','SP'); ELSE INSERT INTO cliente VALUES (i,'BBBBBB','PB'); END IF; END LOOP; COMMIT; END; SELECT FROM WHERE table_name, partition_name, high_value, num_rows user_tab_partitions able_name = 'CLIENTE' TABLE_NAME --------------CLIENTE CLIENTE PARTITION_NAME ------------------------P_REGIONAL_SUDESTE P_REGIONAL_NORDESTE HIGH_VALUE ------------------------'SP', 'RJ', 'MG', 'ES' 'BA', 'PE', 'PB', 'RN' NUM_ROWS ---------500 500 INSERT INTO cliente VALUES (1001, 'CCCCCC', 'RS'); ERRO na linha 1: ORA-14400: chave de partição inserida não está mapeada para partição alguma UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 121 Particionamento de Tabelas Vantagens Acelera o desempenho Aumenta a disponibilidade Acesso 24x7 a informações críticas Melhora a capacidade de gerenciamento Baixa o tempo de consulta Gerencia porções menores de dados Desvantagens Consultas devem usar os mesmos critérios do particionamento Partições podem ter mais dados do que outras UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 122 Particionamento de Tabelas Exemplo CREATE TABLE exemplo (id NUMBER, nome VARCHAR2(30)); CREATE OR REPLACE PROCEDURE carrega IS BEGIN FOR i in 1..1000000 LOOP INSERT INTO exemplo VALUES (i,'AAAA'||i); END LOOP; COMMIT; END; / EXEC carrega UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 123 Particionamento de Tabelas Exemplo @d:\oracle\ora92\rdbms\admin\utlxplan.sql SET autotrace traceonly SQL> SELECT * from exemplo where id = 1001; ID NOME ---------- -----------------------------1001 AAAA1001 Plano de Execução -------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (FULL) OF 'EXEMPLO' UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 124 Particionamento de Tabelas Exemplo DROP TABLE exemplo; CREATE TABLE exemplo ( id NUMBER, name VARCHAR2(30)) PARTITION BY RANGE (id) (PARTITION P1 VALUES LESS THAN (250000) TABLESPACE users, PARTITION P2 VALUES LESS THAN (500000) TABLESPACE users, PARTITION P3 VALUES LESS THAN (750000) TABLESPACE users, PARTITION P4 VALUES LESS THAN (MAXVALUE) TABLESPACE users); UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 125 Particionamento de Tabelas Exemplo EXEC carrega SELECT * FROM exemplo WHERE id BETWEEN 1 AND 250000; 250000 linhas selecionadas. Plano de Execução ---------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE (Cost=145 Card=305 Bytes=9150) 1 0 PARTITION RANGE (ITERATOR) 2 1 TABLE ACCESS (FULL) OF 'EXEMPLO' (Cost=145 Card=305 Bytes=9150) UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 126 Indexação Índices de Bitmap 18 19 20 23 20 21 22 1 1 0 1 1 0 0 0 0 23 25 26 age index bit maps 0 0 1 0 0 0 1 0 1 1 id 1 2 3 4 5 6 7 8 name age joe 20 fred 20 sally 21 nancy 20 tom 20 pat 25 dave 21 jeff 26 ... data records UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 127 Indexação Índices de Bitmap Considere a seguinte consulta: Recupere as pessoas com idade = 20 e nome = “fred” Mapa de bits para idade = 20: 1101100000 Mapa de bits para nome = “fred”: 0100000001 A resposta é a interseção: 010000000000 Deve ser usado Em tabelas com milhões de linhas e as colunas chave têm poucos valores distintos Quando tem pouco update das colunas chave UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 128 Indexação Criando um Índice de Bitmap CREATE BITMAP INDEX emp_est_civil_idx ON empregado(estado_civil) TABLESPACE indx; UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 129 Índices de Bitmap – Exemplo CREATE TABLE paciente ( codigo NUMBER PRIMARY KEY, nome VARCHAR2(40), estcivil VARCHAR2(10), datanasc DATE, sexo CHAR(1)); BEGIN FOR i in 1..10000 LOOP IF MOD(i,2) = 0 THEN INSERT INTO paciente VALUES (i,'AAAAAA', 'CASADO',SYSDATE-i,'F'); ELSE INSERT INTO paciente VALUES (i,'OOOOO', 'SOLTEIRO',SYSDATE-i,'M'); END IF; END LOOP; COMMIT; END; UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 130 Índices de Bitmap – Exemplo SELECT sexo, COUNT(*) FROM paciente GROUP BY sexo; SEXO -------F M COUNT(*) ---------5000 5000 CREATE BITMAP INDEX paciente_sexo_idx ON paciente (sexo); CREATE BITMAP INDEX paciente_estcivil_idx ON paciente (estcivil); UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 131 Índices de Bitmap – Exemplo SELECT /*+ index(paciente paciente_sexo_idx, paciente paciente_estcivil_idx) */ COUNT(*) FROM paciente WHERE sexo = 'F' AND estcivil = 'CASADO'; Plano de Execução ---------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=10) 1 0 SORT (AGGREGATE) 2 1 BITMAP CONVERSION (COUNT) 3 2 BITMAP AND 4 3 BITMAP INDEX (SINGLE VALUE) OF 'PACIENTE_ESTCIVIL_IDX' 5 3 BITMAP INDEX (SINGLE VALUE) OF 'PACIENTE_SEXO_IDX' UFCG/CEEI/DSC - Banco de Dados II - Prof. Carlos Eduardo Pires 132