Construir e Consultar
o Data Warehouse
com SQL Server
Jacques Robin
Alexandre Damasceno
Marcelino Pereira
CIn-UFPE
Roteiro
1. Recursos do SQL Server para Data Warehousing e OLAP
2. Estudo de caso: criar e consultar Data Warehouse de
estatísticas de jogos da RoboCup para descobrir insights
táticos
3. Preparação de dados com o pacote Data Transformation
Services
4. Criação de cubos multidimensionais a partir de tabelas
relacionais com o OLAP Manager
5. Consultar cubos multidimensionais com OLE DB for OLAP
e MDX
Arquitetura de ferramentas do SQL Server
para Data Warehousing
SQL
Server
Enterprise
Manager
FLAT
Query
Analizer
OLAP
Server
Tabelas
OLAP
Manager
Cubo
DTS
MDX
Sample
Estudo de caso: RoboCup Warehousing
link: ~robocup\aula\
Estudo de caso: RoboCup Warehousing
Arquivos de log do simulador de partidas SoccerServer
Dados em formato flat
Sem intencionalidade:
• Apenas resultado no campo das ações dos
agentes/clientes/jogadores
• Sem as ações mandadas para o simulador pelos agentes,
nem as percepções recebidas em volta
• Sem possibilidade de inferí-las confiavelmente, devido ao ruído
introduzido pelo simulador
De granularidade fina demais para descobrir insights
procurados por mineração direta
Necessidade de passo(s) de derivação de dados de
granularidade suficiente na preparação dos dados
RoboCup Warehousing:
exemplo da fonte de dados disponível
RoboCup Warehousing: preparação de dados
Ferramenta de
modelagem E-R
Log do
Soccer
Server
Data Mart
ROLAP
Serviços de
transformação
de dados
Microsoft
SQL Server
Log do
Soccer
Server
SGBD
relacional
Hipercubo
OLAP
derivados
Hipercubo
OLAP
primitivo
Servidor
OLAP
JODI: API
OLE DB for OLAP / Java
API
XSB-SQL
InterProlog
API Java / XDB
Sistema dedutivo
XSB
DOODI: API
OLE DB for OLAP / XSB
Usar Visio para modelagem E-R do
Warehouse ROLAP e criação das tabelas
Modelo estrela de dados primitivos
Modelo estrela de dados derivados I
Modelo estrela de dados derivados II
Modelo constelação do warehouse pronto
para consultas OLAP
Data Transformation Services (DTS):
Funcionalidades
Migrar dados entre diferentes localidades de modo
automático.
Tratar esses dados durante o sua migração.
Permite o uso de scripts para realizar esses trabalhos de
modo mais elaborado.
Formato Flat do DTS
1,0,4,"0.0,0.0","-47.0,0.0",101,0,-11,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-43.0,0.0",102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-35.0,25.0",103,0,-36,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-30.0,0.0",104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-35.0,-25.0",105,0,35,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-3.0,25.0",106,0,-83,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-0.6,-0.6",107,1,49,0,0,1,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-15.0,-15.0",108,0,-142,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-3.0,31.0",109,0,-83,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-1.0,10.0",110,0,-85,0,0,0,0,0,0,0,0,0,0,0,0,1
Pré-processamento do pré-processamento
Teamleft: 11monkeys, Teamright:
FCFoo
Score: 0:0
T: 0, mode: 4 Ball: ( 0.0, 0.0), P: 1(48.0, 0.0, 3), 2(-31.8, 0.0, 0), 3(27.8, 14.9, -8), 4(-28.0,-15.0, 120), 5(22.0, 0.0, 87), 6( -9.0, 22.0, -11), 7( 1.0, 12.0, 20), 8( -9.0,-22.0, 6), 9( 1.0, 0.0, -75),10(-10.0, 0.0, -15),11( 1.0,-12.0, 87),12( 47.0, 0.0,-179),13(
25.0, 15.0,-178),14( 30.0, 5.0,-150),15(
24.5, 0.0, 179),16( 30.0, -5.0, 150),17(
25.0,-15.0, 179),18( 20.0, 20.0, 178),19(
9.4, 0.0,-179),20( 20.0,-20.0,-176),21(
4.1, 8.2,-116),22( 1.8, -8.9, 101),
1,0,4,"0.0,0.0","-47.0,0.0",101,0,11,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","43.0,0.0",102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-35.0,25.0",103,0,36,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","30.0,0.0",104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-35.0,25.0",105,0,35,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-3.0,25.0",106,0,83,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-0.6,0.6",107,1,49,0,0,1,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-15.0,-15.0",108,0,142,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-3.0,31.0",109,0,83,0,0,0,0,0,0,0,0,0,0,0,0,1
1,0,4,"0.0,0.0","-1.0,10.0",110,0,85,0,0,0,0,0,0,0,0,0,0,0,0,1
Pré-processamento do pré-processamento
Soluções encontradas:
• Programa Perl, Java, C ...
• DTS
• Com auxílio de consultas SQL
Usar o DTS Wizard
Começar a mexer com a base
• link: ~robocup\aula\
OLAP Manager: funcionalidades
Acessar servidores OLAP
• Registro de servidores
Criar e alterar estrutura multi-dimensional
• Dimensões
• Cubos
• ...
Visualizar dados
• Navegador de consultas simples
Criar cubos a partir do warehouse relacional
com o OLAP Manager Wizard
OLE DB for OLAP
Para conexão com Data Warehouse e funções
administrativas:
•
usa outros padrões “abertos e orientados a objetos” da
Microsoft: COM e OLE
Para consultar Data Mart conectado:
• usa uma linguagem com sintaxe parecida com SQL: MDX
Independente do modelo físico de dados
• ROLAP, MOLAP ou HOLAP
Amarrado a plataforma Windows
Pode ser chamado apenas a partir de C++
Padrões da Microsoft
“abertos e orientados a objetos”
UDA (Universal Data Access):
•
COM (Component Object Model):
•
•
•
padrão de interfaces para vários tipos de serviços
como métodos de (pseudo)-objetos sem ID nem atributos
acesso a métodos via ponteiros, herança simples e simulada via includes
OLE (Object Linking and Embedding):
•
•
•
conjunto de padrões e API para acesso a vários tipos de dados
transparentemente do seu suporte de armazenamento físico
conjuntos de interfaces COM fornecendo serviços de acesso a dados de vários
tipos (planhilha, BD, HTML, etc) a partir de C/C++
OLE DB: parte de OLE para acesso a BD
OLE DB for OLAP: parte de OLE DB para acesso a BDMD
ADO (ActiveX Data Objects):
•
•
camada de UDA acima de OLE permintindo acesso “objetos” OLE a partir de
outras linguagens MS como Visual J++ e Visual Basic
ADOMD: parte de ADO para acesso a BDMD
MDX: sintaxe das consultas
WITH
• membros virtuais calculados a partir de membros do cubo
• via operadores aritméticos, estatísticos, de agregação, de
series temporais, de formatação de saída
SELECT
• conjunto de membros de dimensões, hierarquias e níveis
• especificado via expressão de operadores
OLAP (DrillDown, Filter, ...)
de manipulação de conjuntos (CrossJoin, Union, Inter, Member ...)
agregação (TopSum, TopCount, TopPercent, Order, ...)
ON eixos de visualização planares:
• row, column, page, sections, chapters
FROM cubo
WHERE lista de membros de dimensões medidas, slice e dice.
Exemplos simples de uma consulta MDX
WITH [Medidas].[Lucro]
AS ‘[Medidas].[Vendas] * ([Medidas].[PrecoUnitario] - [Medidas].[CustoUnitario])’
SELECT NON EMPTY (CROSSJOIN ({[LojaLoc].[Pais].MEMBERS},
{[Tempo].[Ano].MEMBERS}) ON COLUMNS
NON EMPTY {[ProdCat].[SubCat].MEMBERS} ON ROWS
FROM Vendas
WHERE ([Medidas].[Lucro]).
Consultas MDX sobre cubo de dados
primitivos
select
{[DimGame].[Game].AllMembers} on columns,
{[DimMode].[Description].AllMembers} on rows
from PrimitiveCube
where [Measures].[Occurrence]
with member [Measures].[TrueValue] as
'([Measures].[Occurrence]/22)'
select
{crossjoin([DimGame].[Game].AllMembers,
[DimAgent1].[Team].AllMembers) } on columns,
{[DimMode].[Description].AllMembers} on rows
from PrimitiveCube
where [Measures].[TrueValue]
Modificar exemplo
Consultas MDX sobre cubo de dados
derivados
select
{[DimGame].[Game].Allmembers} on columns,
{[DimStatistic].[SubType].Allmembers} on rows
from DerivedCube
where [Measures].[Occurrence]
select
{crossjoin([DimGame].[Game].AllMembers,
[DimAgent1].[Team].AllMembers) } on columns,
{[DimStatistic].[SubType].AllMembers} on rows
from DerivedCube
where [Measures].[Occurrence]
Modificar exemplo