Skip to content

Latest commit

 

History

History
391 lines (299 loc) · 8.38 KB

Implementacao.md

File metadata and controls

391 lines (299 loc) · 8.38 KB

Sumário

Implementação

Voltar para o ínicio ↑

Criando o Data Warehouse

Primeiro passo é logar no banco de dados com o usuário sys

Untitled

Crie a tablespace para armazenar os dados do Data Warehouse

CREATE TABLESPACE TBS_DW
LOGGING DATAFILE '/u01/app/oracle/oradata/ORCL21C/TBS_DW.dbf'
SIZE 1M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

Removendo as limitações da tablespace criada

ALTER USER dw QUOTA UNLIMITED ON TBS_DW;

Criando schema DW

CREATE USER dw IDENTIFIED BY dw0123
DEFAULT TABLESPACE TBS_DW
TEMPORARY TABLESPACE TEMP;

GRANT CONNECT TO dw ;
GRANT RESOURCE TO dw ;

GRANT SELECT ANY TABLE TO dw;
GRANT INSERT ANY TABLE TO dw;
GRANT CREATE ANY TABLE TO dw;

Entre no usuário criado dw

Untitled

Dimensão cliente

Criando a sequência para receber o campo da surrogate key na dimensão cliente

CREATE SEQUENCE DIM_CLIENTE_ID_SEQ START WITH 100 INCREMENT BY 1 NOCACHE NOCYCLE;

Criando a dimensão cliente com a surrogate key, mencionando a sequência

CREATE TABLE TB_DIM_CLIENTE
(
    SK_CLIENTE INTEGER DEFAULT dim_cliente_id_seq.NEXTVAL,
    NK_ID_CLIENTE VARCHAR2(20),
    NM_CLIENTE VARCHAR2(50),
    NM_CIDADE_CLIENTE VARCHAR2(50),
    FLAG_ACEITA_CAMPANHA CHAR(1),
    DESC_CEP VARCHAR2(10),
    CONSTRAINT TB_DIM_CLIENTE_PK PRIMARY KEY (SK_CLIENTE) ENABLE
);

Dimensão produto

Criando a sequência para receber o campo da surrogate key na dimensão produto

CREATE SEQUENCE DIM_PRODUTO_ID_SEQ START WITH 100 INCREMENT BY 1 NOCACHE NOCYCLE;

Criando a dimensão cliente com a surrogate key, mencionando a sequência

CREATE TABLE TB_DIM_PRODUTO
(
    SK_PRODUTO INTEGER DEFAULT DIM_PRODUTO_ID_SEQ.NEXTVAL,
    NK_ID_PRODUTO VARCHAR(20) NOT NULL,
    DESC_SKU VARCHAR2(50) NOT NULL,
    NM_PRODUTO VARCHAR2(50) NOT NULL,
    NM_CATEGORIA_PRODUTO VARCHAR2(30) NOT NULL,
    NM_MARCA_PRODUTO VARCHAR2(30) NOT NULL,
    CONSTRAINT TB_DIM_PRODUTO_PK PRIMARY KEY (SK_PRODUTO) ENABLE
);

Dimensão localidade

Criando a sequência para receber o campo da surrogate key na dimensão localidade

CREATE SEQUENCE DIM_LOCALIDADE_ID_SEQ START WITH 100 INCREMENT BY 1 NOCACHE NOCYCLE;

Criando a dimensão cliente com a surrogate key, mencionando a sequência

CREATE TABLE TB_DIM_LOCALIDADE
(
    SK_LOCALIDADE INTEGER DEFAULT DIM_LOCALIDADE_ID_SEQ.NEXTVAL,
    NK_ID_LOCALIDADE VARCHAR2(20) NOT NULL,
    NM_LOCALIDADE VARCHAR2(50) NOT NULL,
    NM_CIDADE_LOCALIDADE VARCHAR2(50) NOT NULL,
    NM_REGIAO_LOCALIDADE VARCHAR2(50) NOT NULL,
    CONSTRAINT TB_DIM_LOCALIDADE_PK PRIMARY KEY (SK_LOCALIDADE) ENABLE
);

Dimensão tempo

Criando a dimensão cliente com a surrogate key, mencionando a sequência

CREATE TABLE TB_DIM_TEMPO
(
    SK_DATA INTEGER NOT NULL,
    DATA DATE NOT NULL,
    NR_ANO NUMBER(4) NOT NULL,
    NR_MES NUMBER NOT NULL,
    NM_MES VARCHAR2(20) NOT NULL,
    NR_DIA NUMBER NOT NULL,
    CONSTRAINT TB_DIM_DATA_PK PRIMARY KEY (SK_DATA) ENABLE
);

Fato venda

Criando o fato venda

CREATE TABLE TB_FATO_VENDA
(
SK_CLIENTE INTEGER NOT NULL,
SK_PRODUTO INTEGER NOT NULL,
SK_LOCALIDADE INTEGER NOT NULL,
SK_DATA INTEGER NOT NULL,
VL_VENDA DECIMAL(12, 4),
QNT_VENDA INTEGER,
CONSTRAINT TB_FATO_VENDA_PK PRIMARY KEY (SK_CLIENTE, SK_PRODUTO, SK_LOCALIDADE, SK_DATA)                    ENABLE
);

Carga de dados


Dimensão tempo

Criando os dados de tempo para a dimensão tempo

INSERT INTO TB_DIM_TEMPO 
SELECT 
    TO_CHAR(
    TO_DATE('31/12/2012', 'DD/MM/YYYY') + NUMTODSINTERVAL(n, 'day'), 
    'YYYYMMDD'
    ) AS SK_DATA, 
    TO_DATE('31/12/2012', 'DD/MM/YYYY') + NUMTODSINTERVAL(n, 'day') as FULL_DATE, 
    TO_CHAR(
    TO_DATE('31/12/2012', 'DD/MM/YYYY') + NUMTODSINTERVAL(n, 'day'), 
    'YYYY'
    ) AS NR_ANO, 
    TO_CHAR(
    TO_DATE('31/12/2012', 'DD/MM/YYYY') + NUMTODSINTERVAL(n, 'day'), 
    'MM'
    ) AS NR_MES, 
    TO_CHAR(
    TO_DATE('31/12/2012', 'DD/MM/YYYY') + NUMTODSINTERVAL(n, 'day'), 
    'Month'
    ) AS NM_MES, 
    TO_CHAR(
    TO_DATE('31/12/2012', 'DD/MM/YYYY') + NUMTODSINTERVAL(n, 'day'), 
    'DD'
    ) AS NR_DIA 
FROM 
(
    SELECT 
    LEVEL N 
    FROM 
    DUAL CONNECT BY LEVEL <= 2000
);
COMMIT;

Dimensão cliente

INSERT INTO TB_DIM_CLIENTE 
SELECT 
    DIM_CLIENTE_ID_SEQ.NEXTVAL, 
    NK_ID_CLIENTE, 
    NM_CLIENTE, 
    NM_CIDADE_CLIENTE, 
    FLAG_ACEITA_CAMPANHA, 
    DESC_CEP 
FROM 
    stagearea.ST_DIM_CLIENTE;

COMMIT;

Dimensão produto

INSERT INTO TB_DIM_PRODUTO 
SELECT 
    DIM_PRODUTO_ID_SEQ.NEXTVAL, 
    NK_ID_PRODUTO, 
    DESC_SKU, 
    NM_PRODUTO, 
    NM_CATEGORIA_PRODUTO, 
    NM_MARCA_PRODUTO 
FROM 
    stagearea.ST_DIM_PRODUTO;

COMMIT;

Dimensão localidade

INSERT INTO TB_DIM_LOCALIDADE 
SELECT 
    DIM_LOCALIDADE_ID_SEQ.NEXTVAL, 
    NK_ID_LOCALIDADE, 
    NM_LOCALIDADE, 
    NM_CIDADE_LOCALIDADE, 
    NM_REGIAO_LOCALIDADE 
FROM 
    stagearea.ST_DIM_LOCALIDADE;

COMMIT;

Fato venda

Adicionando na dimensão cliente, um registro para clientes não identificados nas vendas

INSERT INTO TB_DIM_CLIENTE 
VALUES 
(
    -1, -1, '<não identificado>', '<não identificado>', 
    0, 'NA'
);
COMMIT;

Criando a fato venda

INSERT INTO TB_FATO_VENDA 
SELECT 
    COALESCE(B.SK_CLIENTE, -1) AS SK_CLIENTE, 
    COALESCE(C.SK_PRODUTO, -1) AS SK_PRODUTO, 
    COALESCE(D.SK_LOCALIDADE, -1) AS SK_LOCALIDADE, 
    TO_NUMBER(
    TO_CHAR(DATA_VENDA, 'yyyymmdd'), 
    '99999999'
    ) AS SK_DATA, 
    (A.PRECO_UNITARIO * A.QUANTIDADE) AS VL_VENDA, 
    A.QUANTIDADE AS QNT_VENDA 
FROM 
    STAGEAREA.ST_VENDA A 
    LEFT JOIN TB_DIM_CLIENTE B ON A.ID_CLIENTE = B.NK_ID_CLIENTE 
    LEFT JOIN TB_DIM_PRODUTO C ON A.ID_PRODUTO = C.NK_ID_PRODUTO 
    LEFT JOIN TB_DIM_LOCALIDADE D ON A.ID_LOCALIDADE = D.NK_ID_LOCALIDADE;
COMMIT;

Interligando as chaves entre as dimensões

<-- DIMENSÃO CLIENTE -->
ALTER TABLE TB_FATO_VENDA
ADD CONSTRAINT TB_FATO_VENDA_FK_CLIENTE FOREIGN KEY (SK_CLIENTE)
REFERENCES TB_DIM_CLIENTE (SK_CLIENTE)

ENABLE;

<-- DIMENSÃO TEMPO -->
ALTER TABLE TB_FATO_VENDA
ADD CONSTRAINT TB_FATO_VENDA_FK_DATA FOREIGN KEY (SK_DATA)
REFERENCES TB_DIM_TEMPO (SK_DATA)

ENABLE;

<-- DIMENSÃO  LOCALIDADE -->
ALTER TABLE TB_FATO_VENDA
ADD CONSTRAINT TB_FATO_VENDA_FK_LOCALIDADE FOREIGN KEY (SK_LOCALIDADE)
REFERENCES TB_DIM_LOCALIDADE (SK_LOCALIDADE)

ENABLE;

<-- DIMENSÃO PRODUTO -->
ALTER TABLE TB_FATO_VENDA
ADD CONSTRAINT TB_FATO_VENDA_FK_PRODUTO FOREIGN KEY (SK_PRODUTO)
REFERENCES TB_DIM_PRODUTO (SK_PRODUTO)

ENABLE;

COMMIT;

Verificando a integridade de dados

Clique em Arquivo —> Importar —> Dicionário de Dados

Untitled

Selecione a conexão do Data Warehouse

Clique em Próximo >

Untitled

Selecione o esquema DW

Clique em Próximo >

Untitled

Selecione todos os objetos

Clique em Próximo >

Untitled

Verifique as informações

Clique em Finalizar

Untitled

Será gerado o modelo dimensional, verifique se ele está igual ao que foi projetado na etapa de modelagem

Untitled

Com isso, o Data Warehouse está pronto pra uso!