Sei sulla pagina 1di 10

--------------------------------------------------------

-- EXEMPLO DE SLOWLY CHANGING DIMENSION 2

-- Arquivo criado - Terça-feira-Abril-23-2019

-- BY ROMISO2

--------------------------------------------------------

--------------------------------------------------------

-- DDL for Table LOC_PROPRIETARIO

--------------------------------------------------------

CREATE TABLE LOC_PROPRIETARIO

( CD_PROPRIETARIO BIGINT NOT NULL,

NOME_PROPRIETARIO VARCHAR(50) NOT NULL,

TP_PROPRIETARIO VARCHAR(1) CHECK (TP_PROPRIETARIO IN ('F', 'J')),

TELEFONE VARCHAR(25),

NR_CPF BIGINT,

NR_CGC BIGINT,

DS_EMAIL VARCHAR(80)

);

-- INSERTING into LOC_PROPRIETARIO

Insert into LOC_PROPRIETARIO


(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL) values ('1','Adriana Lopes da Silva','F','(011) 9988-
7766','12325285425',null,'adls.gmail.com');

Insert into LOC_PROPRIETARIO


(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL) values ('2','Celso Santos','F','(011) 9644-1122','12321487533',null,'cs@yahoo.com');

Insert into LOC_PROPRIETARIO


(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL) values ('3','Yuri Gagari','F','(011) 7855-2154','12302306984',null,'yurig@kings.com');
Insert into LOC_PROPRIETARIO
(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL) values ('4','Maria Linda Oliveira','F','(011) 6587-
5102','12395385200',null,'marialinda@Tomtom.com');

Insert into LOC_PROPRIETARIO


(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL) values ('5','VeiVei Veiculos Ltda','J','(011) 85147-
1247',null,'1235825000115','v3@hotmail.com');

Insert into LOC_PROPRIETARIO


(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL) values ('6','Tamara Rozet ','F','(011) 85147-
1247',null,'13213176000140','tamarar@gmail.com');

Insert into LOC_PROPRIETARIO


(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL) values ('7','Veic veiculos Ltda','J','(011) 85147-
1247',null,'12365437000198','veve@xinxan.com');

Insert into LOC_PROPRIETARIO


(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL) values ('8','ShowCar S/A','J','(047) 4458-
8412','9308352585','12321236000198','showcar.com');

Insert into LOC_PROPRIETARIO


(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL) values ('9','InvestCar LTDA','J','(055) 3312-
8745','5124852158',null,'investcar@uol.com.br');

Insert into LOC_PROPRIETARIO


(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL) values ('10','Ferdinando Fernandes','F','(021) 2235-
6910',null,'12365845000123','fefe@yahoo.com.br');

Insert into LOC_PROPRIETARIO


(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL) values ('11','ROBSON DE SOUZA T','F','(011) 98888-
5555','12322266655',null,'rom2@gmail.com');

--------------------------------------------------------

-- DDL for Index PK_LOC_PROPRIETARIO

--------------------------------------------------------

CREATE UNIQUE INDEX IPK_LOC_PROPRIETARIO ON LOC_PROPRIETARIO (CD_PROPRIETARIO);


--------------------------------------------------------

-- Constraints for Table LOC_PROPRIETARIO

--------------------------------------------------------

ALTER TABLE LOC_PROPRIETARIO ADD CONSTRAINT PK_LOC_PROPRIETARIO PRIMARY KEY


(CD_PROPRIETARIO);

--------------------------------------------------------

-- LISTANDO A TABELA DE ORIGEM DOS DADOS

--------------------------------------------------------

SELECT * FROM [dbo].[LOC_PROPRIETARIO];

-- ------------------------------------------------------

-- CRIANDO UMA TABELA DE DESTINO COM BASE NA TABELA DE ORIGEM E ADICIONANDO AS


COLUNAS DE SLOWLY CHANGING DIMENSION (DT INICIO VIGENCIA, DT FIM VIGENCIA, ESTADO
DE VIGENCIA, CHECKSUM)

-- ------------------------------------------------------

SELECT

SK_ID = IDENTITY(INT, 1, 1)

,CAST('1990-01-01' AS DATE) AS D_DT_INCO_VGCA

,CAST('2079-12-31' AS DATE) AS D_DT_FIM_VGCA

,1 AS D_IN_VGCA

,CD_PROPRIETARIO
AS D_CD_PROPRIETARIO

,NOME_PROPRIETARIO
AS D_NOME_PROPRIETARIO

,TP_PROPRIETARIO
AS D_TP_PROPRIETARIO

,TELEFONE
AS D_TELEFONE
,NR_CPF
AS D_NR_CPF

,NR_CGC
AS D_NR_CGC

,DS_EMAIL
AS D_DS_EMAIL

,HASHBYTES('SHA2_256', --CHECKSUM

CONCAT_WS(

'|'

,NOME_PROPRIETARIO

,TP_PROPRIETARIO

,TELEFONE

,NR_CPF

,NR_CGC

,DS_EMAIL

))
AS D_HASH_COMPARACAO

INTO [DIM_LOC_PROPRIETARIO]

FROM [LOC_PROPRIETARIO];

--------------------------------------------------------

-- DEFININDO A PK DA TABELA DESTINO DIM_LOC_PROPRIETARIO

--------------------------------------------------------

ALTER TABLE [DIM_LOC_PROPRIETARIO] ADD CONSTRAINT PK_SK_ID PRIMARY KEY (SK_ID);

--------------------------------------------------------

-- FIXANDO VALORES PADRÕES TABELA DESTINO

--------------------------------------------------------
ALTER TABLE [DIM_LOC_PROPRIETARIO] ADD CONSTRAINT DF_D_DT_INCO_VGCA DEFAULT
'1990-01-01' FOR D_DT_INCO_VGCA;

ALTER TABLE [DIM_LOC_PROPRIETARIO] ADD CONSTRAINT DF_D_DT_FIM_VGCA DEFAULT


'2079-12-31' FOR D_DT_FIM_VGCA;

ALTER TABLE [DIM_LOC_PROPRIETARIO] ADD CONSTRAINT DF_D_IN_VGCA DEFAULT 1 FOR


D_IN_VGCA;

--------------------------------------------------------

-- LISTANDO A TABELA DE DESTINO

--------------------------------------------------------

SELECT * FROM [dbo].[DIM_LOC_PROPRIETARIO];

--------------------------------------------------------

-- INSERE DOIS PROPRIETARIOS NA TABELA DE ORIGEM

--------------------------------------------------------

INSERT INTO [dbo].[LOC_PROPRIETARIO]


(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL)

VALUES

((SELECT CONVERT(INTEGER,MAX(CD_PROPRIETARIO))+1 FROM


[dbo].[LOC_PROPRIETARIO])

,'TESTE PROPRIETARIO FISICO'

,'F'

,'11112222'

,22233366655

,NULL

,'testefisico@teste.com');

INSERT INTO [dbo].[LOC_PROPRIETARIO]


(CD_PROPRIETARIO,NOME_PROPRIETARIO,TP_PROPRIETARIO,TELEFONE,NR_CPF,NR_CGC,DS_
EMAIL)
VALUES

((SELECT CONVERT(INTEGER,MAX(CD_PROPRIETARIO))+1 FROM


[dbo].[LOC_PROPRIETARIO])

,'TESTE PROPRIETARIO JURIDICO'

,'F'

,'11112222'

,NULL

,1007785000197

,'testejuridico@teste.com');

--------------------------------------------------------

--ALTERANDO DE JURIDICO PARA FISICO NA TABELA ORIGEM NO PROPRIETARIO DE CÓDIGO 7

--------------------------------------------------------

UPDATE [dbo].[LOC_PROPRIETARIO]

SET TP_PROPRIETARIO = 'F'

WHERE CD_PROPRIETARIO = 7;

--------------------------------------------------------

-- LISTANDO A TABELA DE ORIGEM DOS DADOS

--------------------------------------------------------

SELECT * FROM [LOC_PROPRIETARIO] WHERE CD_PROPRIETARIO = 7;

SELECT * FROM [DIM_LOC_PROPRIETARIO] WHERE D_CD_PROPRIETARIO = 7;

-->>>>>>> INICIO SLOWLY CHANGING DIMENSION <<<<<<<<<

--------------------------------------------------------

--INSERINDO NA TABELA DESTINO OS DADOS QUE TEM NA TABELA ORIGEM, MAS NÃO
TENHAM NA TABELA DESTINO OU QUE TENHA NAS DUAS TABELAS, MAS COM ALGUMA
MODIFICAÇÃO.

--------------------------------------------------------
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE; --Limpa cache de
querys

SET STATISTICS TIME ON; -- exibe o tempo de custo de execução da query

INSERT INTO [dbo].[DIM_LOC_PROPRIETARIO]

SELECT

CAST(GETDATE() AS DATE) AS D_DT_INCO_VGCA

,CAST('2079-12-31' AS DATE) AS D_DT_FIM_VGCA

,1
AS D_IN_VGCA

,CD_PROPRIETARIO AS
D_CD_PROPRIETARIO

,NOME_PROPRIETARIO AS
D_NOME_PROPRIETARIO

,TP_PROPRIETARIO AS
D_TP_PROPRIETARIO

,TELEFONE AS
D_TELEFONE

,NR_CPF
AS D_NR_CPF

,NR_CGC
AS D_NR_CGC

,DS_EMAIL AS
D_DS_EMAIL

,HASHBYTES('SHA2_256', --CHECKSUM

CONCAT_WS(

'|'

,NOME_PROPRIETARIO

,TP_PROPRIETARIO

,TELEFONE

,NR_CPF

,NR_CGC
,DS_EMAIL

))
AS D_HASH_COMPARACAO

FROM [dbo].[LOC_PROPRIETARIO] LPRO

FULL OUTER JOIN [dbo].[DIM_LOC_PROPRIETARIO] DLPRO

ON (DLPRO.D_CD_PROPRIETARIO = LPRO.CD_PROPRIETARIO

AND DLPRO.D_IN_VGCA = 1)

WHERE (DLPRO.D_CD_PROPRIETARIO = LPRO.CD_PROPRIETARIO

AND DLPRO.D_HASH_COMPARACAO <>


HASHBYTES('SHA2_256', --CHECKSUM

CONCAT_WS(

'|'

,LPRO.NOME_PROPRIETARIO

,LPRO.TP_PROPRIETARIO

,LPRO.TELEFONE

,LPRO.NR_CPF

,LPRO.NR_CGC

,LPRO.DS_EMAIL

))) OR DLPRO.D_CD_PROPRIETARIO IS
NULL;

--------------------------------------------------------
-->>>>> FECHAR VIGENCIA DE REGISTROS ANTIGOS <<<<<

--------------------------------------------------------

WITH REPETIDOS AS ( SELECT

D_CD_PROPRIETARIO

,COUNT(*) CONTAGEM

,MIN(D_DT_INCO_VGCA) DATA_MIN

FROM

[dbo].[DIM_LOC_PROPRIETARIO]

WHERE

D_IN_VGCA = 1

GROUP BY

D_CD_PROPRIETARIO

HAVING COUNT(*) > 1)

UPDATE [dbo].[DIM_LOC_PROPRIETARIO]

SET

D_DT_FIM_VGCA=CAST(GETDATE() AS DATE), D_IN_VGCA=0

WHERE

D_CD_PROPRIETARIO IN (SELECT D_CD_PROPRIETARIO FROM REPETIDOS)

AND D_DT_INCO_VGCA = (SELECT DATA_MIN FROM REPETIDOS R WHERE


D_CD_PROPRIETARIO = R.D_CD_PROPRIETARIO);

-- ------------------------------------------------------

-- LISTANDO A TABELA DE DESTINO

-- ------------------------------------------------------

SET STATISTICS TIME OFF;

SELECT * FROM [dbo].[DIM_LOC_PROPRIETARIO];

-- ------------------------------------------------------------
-- APAGANDO TABELA DESTINO E DESFAZENDO MODIFICAÇÕES NA ORIGEM

-- ------------------------------------------------------------

DROP TABLE [DIM_LOC_PROPRIETARIO];

DELETE FROM [LOC_PROPRIETARIO] WHERE NOME_PROPRIETARIO LIKE 'TESTE


PROPRIETARIO%';

UPDATE [dbo].[LOC_PROPRIETARIO]

SET TP_PROPRIETARIO = 'J'

WHERE CD_PROPRIETARIO = 7;