detección de cambios para el desarrollo de warehouse

Post on 12-Jul-2015

497 Views

Category:

Engineering

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Detección de Cambios DWH

Freddy Leandro Angarita Castellanos

SQL Server MVP

@flacMVP

@sqlpassmed

http://geeks.ms/blogs/fangarita/

SQL Saturday Sponsors

Diamond Sponsors

Bronze Sponsors

Proceso

SSIS Stage WareHouse

Problema

4 |

Origen Destino

Dato 1 A 1 A

Dato 2 B 2 K

Dato 3 C 5 E

Dato 4 D

Acción Dato Original Nuevo Dato

Actualización 2 K 2 B

Inserción 3 C

Inserción 4 D

Borrado 5 E

Acción Datos Fecha Efectiva Fecha Expiración

Actualización 2 B

Obsoleto 2 K

Inserción

Inserción

Obsoleto 5 E

Detección de Cambios

Es uno de los problemas a resolver al crear un WareHouse

Existen varias formas de resolver éste problema

Eliminación y recarga

Transformación SCD

Lookup

Transformada Kimball SCD

Método MergeJoin (Ideado por Freddy Angarita)

Método T-Sql Merge

CDC

Tipos de Dimensión y Administración

Tipo 0 No mantiene historia

Geografía

Debe considerarse integridad referencial

Tipo I Sobrescribe datos antiguos con los nuevos

Usado para aplicar cambios sobre tablas de hechos (Idealmente)

Es importante considerar la integridad referencial

Tipo II Una nueva fila para cada cambio que se genere para cada registros

Se crea una fecha efectiva y una fecha de expiración

Tipo III Se crea historia sólo para algunas columnas

Normalmente sólo contienen el último valor de la columna

Eliminación y Carga

Es un método simple de implementar

Se implementa rápidamente

Cantidad de Datos

Complejidad de la tabla

Ventana de tiempo

Requerimientos del sistema

Si la tabla se usa como una Fuente ROLAP ó Direct Query

(Depende del tipo cubo)

No es una opción

Puede tomar mucho tiempo

Demo – Eliminación y Carga

Transformación SCD

Ventajas

Es un método simple de implementar

Desventajas

Realiza las actualizaciones en la tabla destino registro a registro

No recuerda las opciones de diseño realizadas

No se respetan relaciones hechas anteriormente

Útil para detección de cambios para dimensiones simples

Demo – Transformación SCD

Transformación LookUp

Ventajas

Ofrece buen rendimiento

Desventajas

No es tan simple de implementar

La comparación se realiza registro a registro

Demo – Transformación LookUp

Transformación Kimball

Ventajas

Ofrece buen rendimiento

La comparación se realiza por conjuntos

Desventajas

No es tan simple de implementar

Es necesario instalar el complemento

No usa transformaciones estándar

http://dimensionmergescd.codeplex.com/

Demo – Transformación LookUp

Transformación MergeJOIN

Ventajas

Ofrece buen rendimiento

La comparación se realiza por conjuntos

Usa transformaciones estándar

No es necesario instalar ningún complemento

Desventajas

No es tan simple de implementar

Transformación MergeJOIN

Llave Dato

A 1

B 56

C 2

Llave Dato

A 1

B 23

D 34

Llave Actual Llave Nueva Dato Actual Dato Nuevo

A A 1 1

B B 56 23

C NULL 2 NULL

NULL D NULL 34

Demo – Método MergeJOIN

Transformación t-Sql MERGE

Ventajas

Ofrece buen rendimiento

Es simple de implementar

La detección de cambios vive en la base de datos

Desventajas

No se recomienda su uso para escenarios OLTP (Locks)

Demo – Método t-Sql MERGE

Ventana de Tiempo

Ventajas

Reduce la cantidad de registros a procesar

Desventajas

Es necesario tener campos de fecha en las tablas a analizar

Demo – Ventana de Tiempo

CDC

Ventajas

Reduce la cantidad de registros a procesar

Fácil implementación

Desventajas

No funciona con todos los orígenes de datos

CDC - Script

USE InternetSalesGO

--Habilitar CDC para base de datosEXEC sys.sp_cdc_enable_dbGO

--Habilitar CDC para tablaEXEC sys.sp_cdc_enable_table@source_schema = N'dbo',@source_name = N'Customers',@role_name= NULL,@supports_net_changes = 1GO

--Mapear inicio y finalización a números de secuenciaDECLARE @from_lsn binary(10), @to_lsn binary(10);SET @from_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @StartDate) -- >SET @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @EndDate) -- <=

--Manejar correctamente NulosIF (@from_lsn IS NULL) OR (@to_lsn IS NULL)-- No hubo transacciones en éste marco de tiempo

--Extraer CambiosSELECT * FROM cdc.fn_cdc_get_net_changes_dbo_Customers(@from_lsn, @to_lsn, 'all')

Demo – CDC

Preguntas

GRACIAS!

@flacMVP@sqlpassmedhttp://geeks.ms/blogs/fangarita/

top related