Data Warehouse, Modelo, Conceptos e Implementación orientada a SQL Server (página 2)
Enviado por Erith Eduardo P�rez Gallardo
El Modelo de Hechos Dimensionales (DFM)
El análisis de los datos en un tiempo finito, ha traído consigo estudios sobre la mejor forma de almacenar y representar estos datos para que puedan ser consultados de una forma más rápida. El uso del Modelo Multidimensional es una de las aproximaciones más acertadas y seguidas por los especialistas en estos días. Este se basa en el estudio de los eventos del negocio analizados desde sus distintas dimensiones. Así:
Definición 1: Llamamos evento o Hecho a una operación que se realiza en el negocio en un tiempo determinado. Son objeto de análisis para la toma de decisiones. Se Representan en una caja con su nombre y las medidas que lo caracterizan. (Robert Wrembel & Christian Concilia, 2007)
Ej: Figura 1: Representación gráfica de un Hecho y sus dimensiones
Los Hechos están estrechamente relacionados con el tiempo. Los eventos que son estáticos no tiene objetivo de análisis para este modelo, aunque son muy pocos los hechos que no ocurren con determinada periodicidad en un negocio. Los hechos están caracterizados por medidas numéricas como se muestra en el ejemplo de la figura 1: la cantidad, el precio unitario, el descuento, etc, son las medidas del Hecho (VENTA).
Nota: Fíjese que el producto que se vende, su costo y la fecha de la venta no son características de esta como lo podrían ser en cualquier diseño relacional. En este caso, esos serían dimensiones de ese Hecho, por las que, puede ser analizado más adelante.
Definición 2: Una Medida es una propiedad de un Hecho (casi siempre numérica), que es usada para su análisis. (Robert Wrembel & Christian Concilia, 2007)
Nota: Un hecho puede no poseer ninguna medida. En ese caso se dice que el Hecho es vacío y solo se usa para contar la aparición de este en el tiempo.
Definición3: Una Dimensión es una característica de un hecho que permite su análisis posterior, en el proceso de toma de decisiones. (Robert Wrembel & Christian Concilia, 2007)
Nota: Un hecho debe estar relacionado al menos con una dimensión: "El tiempo".
Es un interés del negocio tomar decisiones sobre los hechos que ocurren en este, pero para esto se necesita su análisis. Por ejemplo Las ventas en la semana antes del 14 de Febrero, puede ser un objeto de análisis para un negocio comercial. Para esto se necesita tener el Hecho Ventas analizado en la dimensión Tiempo. En este caso en los Días:
7 <= d <= 14. Si se quisiera saber que productos fueron los más vendidos en esos días entonces tendríamos que adicionar una nueva dimensión de análisis, Producto. Así adicionando dimensiones a nuestro estudio se pudieran llegar a conclusiones sobre si el siguiente año en esa época debería comprarse más objetos de un producto o menos de otro. Elemento este muy importante para la futura estrategia de la empresa.
Definición 4: En una empresa pueden existir varios hechos que sean analizados por dimensiones iguales. En este caso se les llama a estas dimensiones: Dimensiones Compartidas. (Robert Wrembel & Christian Concilia, 2007). Un ejemplo de esto es El Hecho Ventas puede ser analizado en las dimensiones Tiempo y Producto. Lo mismo ocurre con el Hecho Compras.
Las dimensiones deben ser atómicas y las relaciones entre estas crean jerarquías que permiten un análisis jerárquico de los datos. Un ejemplo de esto es el Tiempo, que es dividido en tres dimensiones. Día, Mes y Año. Cada uno es una dimensión distinta, pero relacionadas jerárquicamente en una relación de 1 a muchos, que permite el análisis del Hecho, por días, meses o años, o la combinación de ellos. Esto da al traste con las acostumbradas (OLTP) que manejan el Tiempo como una propiedad de una entidad, y lo tratan como un todo. Por lo que, como podemos inferir de aquí: en muchos casos hará falta convertir las bases de datos de estos sistemas a la nueva filosofía. SQL Server tiene facilidades para esto llamadas DTS (Data Transformation Services) que permite leer datos desde cualquier SGBDR que posea un driver ODBC o implemente la nueva tecnología OLE DB de Microsoft.
Diagrama en Estrella
Uno de los tipos de consultas más usadas en las OLAP es la llamada Estrella. Su nombre lo adquiere debido a que su implementación en un ambiente relacional (MOLAP Multidimentional Online Analitical Processing) está dado por varias tablas que almacenan las jerarquías dimensionales y una tabla que contiene el hecho con una relación 1:m con estas tablas de dimensiones. Veamos un ejemplo gráfico:
Figura 2: Diagrama en estrella del Hecho, Ventas. (Microsoft Data Warehouse Training Kit, 2000)
Como podemos ver en la figura las tablas de dimensiones están ligadas a la tabla Hecho, por relaciones. La integridad referencial es llevada a cabo por la creación de llaves foráneas en la tabla Hecho, que a su ves forman parte de la llave principal de la esta tabla. Es importante destacar que las jerarquías completas son guardadas en una sola tabla dimensión. Este es el formato no normalizado, existe otro formato que intenta normalizar estas tablas dimensión. Ejemplo (Time_Dim). Cada tabla dimensión tiene su propia llave que es mantenida por el sistema Data Warehouse. A estas llaves se les llama "Surrogate Key". Las llaves Surrogate Jerárquicas, no son más que una codificación de cada elemento de la jerarquía almacenado en la tabla dimensión. Veamos la figura 3 de cómo se logran estas llaves.
Figura 3: Formación de una llave Surrogate Jerárquica (Robert Wrembel & Christian Concilia, 2007)
Vamos a ver ahora como sería una consulta sobre este tipo de diagrama en estrella:
Figura 3: Plantilla de consulta para una consulta en estrella (ad hoc star query) (Robert Wrembel & Christian Concilia, 2007)
Nota: En la figura las D1, D2, .. , Dk significan tablas de dimensión y los LP1, LP2, …,LPk son los predicados usados para simplificar la consulta. El ejemplo siguiente muestra mejor como sería esta consulta: (Robert Wrembel & Christian Concilia, 2007)
En este tipo de procesamiento el mayor de los problemas es el super join que se crea al procesar las tablas de dimensiones con los datos de la tabla Hecho, para esto se han hecho varios estudios sobre la mejor forma de hacer este tipo de consultas de forma que sean lo más óptimas posibles, una de las técnicas mejores probadas es la de reescribir la consulta como lo muestra el siguiente ejemplo que mostramos:
Ejemplo: Optimizar la consulta en el Data Warehouse (Robert Wrembel & Christian Concilia, 2007)
Para cerrar con broche dorado este tema es necesario hacer alusión a los llamados Cubos de datos: Estos no son más que el conjunto formado por todas las tablas Dimensión y la tabla Hecho que al final dan una vista en forma de Cubo cuyas celdas están compuestas por las medidas de la tabla Hecho. Esta es la base de las aplicaciones OLAP. El cubo de datos es lo que hace que los reportes sean obtenidos con un bajo tiempo de respuesta y que el análisis de los datos pueda ser tan diverso, pues cada cara del cubo se refiere a un análisis distinto de las medidas almacenadas. Veamos el ejemplo gráfico del cubo:
Figura 4: Cubo de datos (Microsoft Books Online, 2000)
Como podemos ver en el ejemplo la cantidad de producción puede ser analizada por producto, teniendo en cuenta la dimensión Producto, Por Tiempo, por Localización de las Industrias o en su conjunto por todas ellas a la vez o cualquier combinación de estas. Esto le da al analista o al sistema experto una amplia gama de posibilidades de las cuales puede tomar ventaja. En nuestro caso de estudio de las ventas. El cubo de datos formado por la Tabla Sales_Fac en conjunto con las restantes tablas de Dimensión nos permite analizar las ventas por Empleado, por Consumidor, por Tiempo, Etc.
Extracción y Transformación de los Datos
SQL puede conectarse a cualquiera de los formatos creados por Microsoft Office, archivos texto y a bases de datos como FOXPRO y ACCESS muy usadas por múltiples sistemas de escritorio que resuelven problemas importantes en muchas empresas. Además puede conectarse a cualquier SGBD (Sistema Gestor de Bases de Datos) que posea un driver ODBC compatible con Microsoft o implemente la tecnología OLE DB. El poder obtener datos de páginas de Excel con datos resumidos o exportarlas a este, para que los usuarios más avanzados puedan crear gráficos y otros. Es algo que convierte a SQL en la herramienta perfecta para crear sistemas Data Warehouse. Para realizar estas tareas Microsoft cuenta con una rama dentro del árbol de administración del SQL Enterprise Manager, que contiene un área de diseño con los elementos que se necesitan para diseñar un paquete de transformación de datos (DTS Package).
Para crear un paquete solo se hace clic derecho sobre el área vacía de esa rama y se selecciona la opción New Package, inmediatamente se abre una ventana con un área de diseño que permite empezar a diseñar el paquete en cuestión. Hay tres elementos fundamentales a la hora de diseñar un paquete:
- Las conexiones: que permiten conectarse a cualquier fuente de datos como las que relacionamos anteriormente.
- Las tareas: que permiten transformar los datos de cada conexión antes de que sean copiados a otra conexión. Estas tareas pueden ejecutar Scripts de ActiveX, pueden transferir otros archivos desde o hacia un sitio FTP, pueden enviar un mensaje a un operador de SQL. Además de poder filtrar datos, crear nuevas tablas en la BD resultante, etc.
- Los flujos de trabajo: que permiten definir hacia donde irán los datos luego de que se le apliquen las respectivas acciones que los transformarán a la nueva forma deseada.
Así usando estos tres elementos fundamentales se crea una especie de script gráfico que sigue una secuencia lógica para dar como resultado la transformación de los datos almacenados de un formato a otro como SQL Server desde donde podrán ser analizados con el Data Warehouse.
Aunque desde el Enterprise Manager de SQL Server se puede ejecutar los paquetes que se crean haciendo clic derecho sobre ellos y seleccionando Execute o en un Schedule. Existen varias herramientas adicionales que pueden usarse desde la ventana de comandos del sistema operativo. De ellas, la más interesante para el uso de scripts es dtsrun. Para obtener la ayuda completa de esta podemos ejecutar dtsrun /? En una pc (Computadora Personal) con SQL Server instalado.
Ejemplo: Uso de la herramienta dtsrun desde un script de windows
@echo off
Copy /srvaplicsaplics*.mdb d:convertsql /Y
if (%ERRORLEVEL% NEQ 0) echo "Error al copiar la base de datos"
else dtsrun /S SASSQL /U sa /P Pepe2006 /N loadaccessdb
Como podemos ver a dtsrun se le pasan como parámetros el nombre del servidor el usuario con derechos para ejecutar el paquete, el password de este y el nombre del paquete a ejecutar. Existen otra serie de opciones que pueden ser consultadas en la ayuda de la herramienta. El uso de esta herramienta puede estar relacionado como vemos en el ejemplo con la copia de bases de datos hacia lugares desde donde es más seguro la obtención de sus datos.
A continuación mostraremos un ejemplo práctico de cómo diseñar un paquete para obtener el balance de comprobación desde un fichero TXT exportado por el sistema contable SENTAI.
Ejemplo: Obtención de Balance de SENTAI
- Creación de un nuevo paquete desde el SQL Enterprise Manager
- Arrastrar hacia el área de diseño la conexión hacia un archivo TXT
- Configurar la conexión especificando el archivo y su formato
- Arrastrar hacia el área de diseño una conexión al servidor SQL al que se va a importar el estado de las cuentas.
- Configura esta conexión especificando la base de datos a usar
- Hacer clic sobre la conexión al archivo texto para seleccionarlo.
- Hacer clic sobre la acción (trasform data task) y seguido se hace clic sobre la conexión al Server SQL del área de diseño.
- Hacemos clic derecho sobre la línea que une a ambos ahora y editamos las propiedades de la transformación para asegurarnos de que están de acuerdo a nuestros objetivos.
- Presionamos el botón de salvar para guardar el paquete.
- Escriba el nombre del paquete y cierre la ventana de diseño.
Ahora podrá ver el nombre del paquete y si desea ejecutarlo solo debe hacer clic derecho sobre este y seleccionar Execute. Así las cuentas y sus saldos serán insertados en la nueva base de datos de contabilidad de la empresa.
Ejemplo: Vista gráfica del paquete creado
Técnicas de desarrollo del soporte de Hardware
Antes de definir una estrategia en la cual se desarrollará el hardware que soporta el Data Warehouse, es necesario hacer un estudio del tiempo, que pueden estar detenidas las aplicaciones que usan este. En nuestros días muchas empresas necesitan que estos sistemas ejecuten 24 horas los 365 días del año, por lo que no hay mucho margen de error. La desconexión de estas aplicaciones por solo una hora puede hacer que la compañía pierda miles de usuarios que nunca más visitarán el sitio Web pensando que está fuera de servicio o porque se buscaron otro proveedor al no poder contactar con el acostumbrado, para que esto no ocurra antes de echar a andar un sistema de tanta importancia hay que prever con tiempo el desarrollo futuro de su soporte.
Una de las técnicas clásicas para desarrollar hardware siempre ha sido aumentar memoria, capacidad de procesamiento y capacidad de almacenamiento, al servidor que soporta el sistema. Esta técnica es comúnmente llamada "Scalling Up". En este tipo de desarrollo si usted necesita subir su capacidad de procesamiento (Adicionar otro Procesador o cambiar el existente por uno más rápido) en servidores como: Acer Altos 600, 1200, 500; o HP Proliant ML350 y ML370; tiene que apagar el sistema para hacerlo, al igual que si desea aumentar la cantidad de memoria. Tenga en cuenta que muchos de estos servidores pueden durar años en fallar y por tanto otra de las situaciones muy comunes es que a la hora de repararlos o que se necesita aumentar sus capacidades técnicas es muy difícil encontrar piezas compatibles en el mercado por el continuo desarrollo de los sistemas de hardware, por esto es muy necesario comprar piezas con vista a estas situaciones a tiempo, cosa esta muy difícil de lograr estando el sistema funcionando correctamente. Muchos de los directivos de estas grandes empresas no ven con muy buenos ojos la compra de piezas para un sistema que todavía no sueña con fallar o que resuelve los problemas en la actualidad con una buena calidad de respuesta computacional. El obtener un presupuesto para esto es una gran responsabilidad del Administrador de Sistemas, gestión que el futuro cuando ocurran los problemas obtendrá su merecido reconocimiento por parte de la directiva de la empresa. En el caso de la capacidad de almacenamiento, si tenemos un arreglo (RAID) de discos SCSI no hace falta apagar el sistema. Estos se pueden conectar en caliente sin necesidad de formatear siquiera, el hardware RAID se encarga del resto.
A pesar de que los discos SCSI siguen siendo muy fiables y rápidos. En estos días alternativas muy buenas pueden hacer que un Administrador de Sistemas tome otra decisión. Existe en el mercado tarjetas RAID de discos Serial ATA, que permiten hacer arreglos de discos Serial ATA con gran facilidad. Estos discos son menos fiables que los SCSI, pero tiene un menor precio y su relación precio/capacidad disminuye cada año. Por solo mostrar un ejemplo: Un disco de 72 GB SCSI, la empresa Tecun lo comercializa en Cuba con un costo de: $370.00, mientas que un Serial ATA de 80 GB pude costar $75.00. Si decimos que el disco solo durará un año de explotación lo que es muy raro en ambientes climatizados y con sistemas eléctricos protegidos por baterías. Al año siguiente se podrá comprar un disco Serial ATA por el mismo precio, pero de 160 GB. El doble de la capacidad del anterior. Si sumamos los costos de los dos discos en los dos años, no llegará a ser igual al costo del SCSI, que por supuesto durará funcionando sin problemas otros 4 años. Sin embargo habrás aumentado tu capacidad de almacenamiento al doble cosa esta que es un dato importante en ambientes que aumentan su colección de datos exponencialmente, como es el caso de un Data Warehouse.
Es importante destacar que aunque hablo de un solo disco estoy asumiendo que al menos existe otro que está configurado como espejo que pude ser usado en caso de que falle el principal. No es concebible un sistema tan importante que no tenga este tipo de respaldo. Aunque los discos sean SCSI, debe haber respaldo, lo que incrementa los costos.
En caso de que no se posea hardware RAID se pueden usar las facilidades del Sistema Operativo Windows 2k3 que permite crear arreglos desde el administrador de discos. Este tipo de arreglos a pesar de ser menos rápido que el manejado vía hardware. Es una solución muy buena en esos casos.
Ejemplo de crear una partición espejo para el sistema:
- Abra el administrador de discos luego de haber instalado físicamente los dos discos.
- Haga clic derecho sobre el cuadro que dice disco 0 y haga clic en convertir a disco dinámico.
- Le aparece una ventana que le indica marcar los discos que desea convertir. Marque los dos discos el 0 y el 1 y haga clic en aceptar.
- El sistema le preguntara si desea continuar con la operación a pesar que el disco 0 tiene el sistema operativo. Acepte y el sistema le avisará que se va areiniciar para completar la operación. Acepte y espere a que el sistema se reinice.
- Abra el administrador de discos y ya con los discos siendo dinámicos haga clic derecho sobre la partición del sistema y presione sobre la opción adicionar espejo.
- En la ventana que aparece seleccione el disco 1 para usar como espejo y acepte.
- El sistema creará una partición idéntica en el segundo disco y empezará a duplicar la información existente en la primaria.
Nota: Para que un disco pueda ser espejo total del primero deben ser de capacidades idénticas. No puede haber diferencias. Este error puede ocurrir al usar discos de varias marcar como Ejemplo: Maxtor y Segate en el mismo sistema.
A pesar de que los servidores profesionales son muy fiables, en empresas medianas y pequeñas usarlos, puede implicar un gasto demasiado elevado. Una alternativa puede ser usar una PC Moderna con una memoria bastante grande 4 GB pudriera ser suficiente. Actualmente los procesadores "Pentium D" que poseen procesamiento en paralelo y una velocidad de más de 3 GHz que lo hacen muy competentes. Esto trae consigo otra característica importante y es que este tipo de configuración puede hacer uso de otra técnica de desarrollo llamada "Scalling Out". Así, si en el futuro hace falta mejorar la capacidad de este servidor porque el negocio se ha desarrollado y ahora se procesa una mayor cantidad de datos, se puede comprar otro servidor o varios iguales o mejores en dependencia de la disponibilidad del mercado y del presupuesto permitiendo, conectarlos en forma de Cluster distribuyendo así la carga de trabajo. Windows 2k3 permite la configuración de este tipo de soporte con gran facilidad, dando la posibilidad de ir aumentado en cantidad de servidores y mejorando en prestaciones, capacidad de procesamiento y tolerancia a fallos. En mi opinión personal en estos días este tipo de configuraciones son mucho más fiables y económicas. El uso de varios servidores en forma de cluster puede hacer uso de una característica de SQL Server 2000 que permite la actualización de los datos de todos estos servidores según las necesidades del negocio. La replicación de SQL Server 2000 no solo se puede aplicar sobre servidores configurados como cluster también puede usarse para replicar una de las bases de datos o un subconjunto del Data Warehouse a un servidor de una entidad de la empresa. Estaríamos hablando de un posible Data Mart. En nuestro ejemplo clásico de empresa comercial estaríamos hablando de replicar el Data Mart de las ventas de Ciego, al servidor de la Sucursal Ciego de Ávila. Allí se podrían sacar reportes muy provechosos por parte de los comerciales sin necesidad de congestionar la Red WAN con los datos de estos reportes. Teniendo en cuenta que los enlaces WAN entre provincias son bastante costosos y lentos en comparación con los 100 Mbps de la Red LAN.
Datos distribuidos
La distribución de los Datos a través de varios servidores es toda una teoría de la que nosotros solo vamos a mencionar sus más relevantes rasgos, haciendo énfasis en la replicación de SQL Server. Para comenzar debemos decir que existen dos técnicas fundamentales apara usar datos distribuidos.
- Transacciones Distribuidas
- Replicación
La primera necesita que todos los servidores involucrados estén funcionando correctamente y en red (online). Este tipo de transacciones mantiene actualizadas todas las bases de datos involucradas en todo momento. Todos los servidores tienen que estar sincronizados y si falla un solo elemento de la transacción falla completa. Teniendo que revertir el proceso en todos los servidores con su correspondiente consumo de procesamiento. La segunda por su parte puede mantener un margen de tiempo que permite a los servidores no tener que estar sincronizados en todo momento. Así como podemos ver el uso de una u otra técnica está dado principalmente por dos factores: Latencia entre servidores y Autonomía de cada servidor. Este último tiene que ver por ejemplo: Si el Data Mart ubicado en Ciego es actualizado a partir de la información recolectada del sistema de inventario de todos los centros comerciales de esta provincia. Entonces este Servidor posee una autonomía. Estos datos no tienen por qué ser replicados al servidor de la Provincia Santiago de Cuba o Matanzas. En este caso esa información solo sería necesaria en El servidor central de la Empresa donde se encuentra el Data Warehouse central. Así mismo estos pueden ser replicados en el horario nocturno evitando que los enlaces de comunicación WAN se congestionen por el día que hay un mayor tráfico de correo, Messenger, sistemas contables y otros. Es decir en nuestro ejemplo la replicación sería la vía más óptima de implementación para poder mantener los datos distribuidos con autonomía a través de todas las sucursales del país.
Estas dos técnicas de trabajo poseen una serie de variantes para su implementación que mostramos en forma de gráfico:
Figura 5: Formas de implementación de datos distribuidos (Microsoft Training, 2000)
SQL Server 2000 tiene tres formas básicas para implementar la distribución de datos:
- Snapshot Replication
- Transactional Replication
- Merge Replication
SanapShot Replication: Replica todos los datos en la publicación hacia el o los subscriptores. En el tiempo especificado en el Agente. Este tipo de método es muy usado en ambientes con una gran autonomía y donde se necesitan los datos publicados con una latencia no muy baja.
Transactional Replication: En este tipo de replicación solo se replican los cambios incrementales. Este tipo de replicación es usada en ambientes donde la latencia de actualización debe ser baja, puede ser muy útil además en ambientes conectados por enlaces de poco ancho de banda pues el tamaño de los datos replicados es muy bajo. El agente que permite realizar este trabajo tiene además la opción de replicar los datos inmediatamente.
Merge Replication: En este tipo de replicación se analizan los artículos publicados y se crea uno solo con la información resultante de la comparación de estos en cada servidor. Al final cada servidor se actualiza con el artículo resultante. En este tipo de replicación pueden ocurrir colisiones si se usan las mismas bases de datos con un nivel de autonomía alto. Estas colisiones pueden ser resultas programando reglas en la publicación.
SQL Server usa una filosofía llamada Publicador-Distribuidor-Subscriptor. Análogamente a la vida real el Publicador crea una a varias publicaciones, que no son más que objetos de una base datos como: Tablas, Vistas, Procedimientos almacenados; o Porciones de estos como una proyección de una tabla determinada o una selección de una o varias tablas relacionadas y a partir de esa publicación es que un subscriptor puede suscribirse para recibir las actualizaciones de esta publicación que le llega a través del distribuidor. Tenga en cuenta que el distribuidor puede estar en el propio servidor que publica o puede estar en otro diferente para eliminar carga al publicador y buscar un balance en el procesamiento. Atendiendo a esta filosofía existen tres tipos básicos de implementación física de los servidores:
- Publicador Central y Muchos Suscriptores
- Muchos Publicadores y un solo suscriptor
- Muchos Publicadores y muchos suscriptores
En nuestro caso particular necesitaríamos publicadores en todas las sucursales del país y un subscriptor central en la Habana, con una replicación transaccional (Tansactional Replication) que se ejecutara en el horario de la noche. Es importante destacar que bases de datos de otros sistemas como Lotus Notes. Implementan este sistema de bases de datos distribuidas con replicación con muy buena calidad, prestaciones y poco uso de ancho de banda en los enlaces WAN lo que las hace muy competitivas en el mundo empresarial.
Consultas distribuidas
Existen dos formas fundamentales de hacer una consulta distribuida usando SQL Server. La primera consiste en la función OPENROWSET u OPENDATASOURCE, que permite ejecutar una consulta sobre cualquier SGBDR que soporte OLE DB o tenga un driver ODBC compatible con Microsoft. Este tipo de procesamiento es llamado en la literatura como: "ad hoc query". La otra vía es usando servidores enlazados (linked servers) que soporten también la tecnología OLE DB de Microsoft. Esta última es usada para hacer consultas frecuentes a diferencia de la primera que se usa para consultas con períodos de tiempo largos. (Microsoft Training, 2000)
Sintaxis de OPENROWSET:
OPENROWSET('provider_name'
{'data -source'; 'user_id' ; 'password' | 'provider_string'},
{[catalog.][schema.]object | 'query'})
Descripción de Parámetros:
Provider_name: Nombre del proveedor OLEDB. Ejemplo MSDASQL(Para ODBC)
Data-source: Fuente de donde se obtendrán los datos. Como veremos más adelante no es más que el nombre del servidor que contiene la BD.
User_id: nombre de usuario de acceso a la BD
Passord: Contraseña de acceso a la BD
Provider_string: En caso de ser necesaria una cadena de conección a la fuente de datos.
Catalog: No es más que el nombre de la base de datos.
Schema: Nombre del usuario dueño de los objetos de la BD. Ejemplo en SQL dbo.
Object: Tabla, procediemiento, función, u otro objeto de la base de datos.
Query: Consulta en cuestión.
Para poder entender mejor la sintaxis vamos a ver un ejemplo de cómo podemos hacer una consulta sobre un servidor SQL, otro sobre como hacerlo sobre una base de datos Access y uno sobre como integrar una consulta de este tipo en una normal. (Microsoft Training, 2000)
Ejemplo 1: Encuesta a un Servidor SQL
SELECT a.*
FROM OPENROWSET('SQLOLEDB', 'LONDON1';
'newcustomer';'mypassword',
'SELECT ProductID, UnitPrice
FROM Northwind.dbo.Products ORDER BY UnitPrice')
AS a
Ejemplo 2: Encuesta a un servidor Aceess
SELECT a.*
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0'
'C:MSOfficeAccessSamplesNorthwind.mdb';
'newcustomer'; 'mypassword',
Orders)
AS a
Ejemplo 3:
USE Northwind
SELECT cust.* ord.*
FROM Customers as cust JOIN
OPENROWSET('Microsoft.Jet.OLEDB.4.0'
'C:MSOfficeAccessSamplesNorthwind.mdb'';
'newcustomer'; 'mypassword',
Orders)
AS ord
On cust.customerid = ord.customerid
Como vemos este tipo de consultas puede ayudarnos mucho a la hora de extraer datos desde los sistemas que nutren al Data Warehouse. Aunque ya hemos visto que SQL tiene servicios (DTS) y otras herramientas gráficas que pueden extraer datos y transformarlos muy fácilmente. Esta variante nos permite controlar el trabajo usando sentencias de programación que fácilmente pueden ser combinadas con otras para obtener resultados muy profesionales. Otra de las ventajas que nos ofrece esta filosofía de trabajo es que no tenemos que importar los datos a SQL para analizarlos. Hay ocasiones en que no queremos importar esa base de datos porque solo se consulta una sola vez al año o por otras cuestiones diferentes y de esta forma podemos consultarla sin mucho esfuerzo.
Existen varios tipos de proveedores de OLE DB que pueden ser consultados en la ayuda de SQL. Aquí queremos mostrar solo los ejemplos más usados: (Microsoft Training, 2000)
- SQL Server: N'SQLOLEDB'
- Microsoft OLE DB Provider for Access (Jet): 'Microsoft.Jet.OLEDB.4.0'
- Microsoft OLE DB Provider for Oracle: 'MSDAORA' data_source is the SQL*Net alias name for the Oracle database to be added as a linked server
- OLE DB Provider for ODBC (Using data_source parameter): provider_name is 'MSDASQL' data_source is 'LocalServer'
- OLE DB Provider for ODBC (Using provider_string parameter): provider_name is 'MSDASQL' provider_string is 'DRIVER={SQL Server} SERVER=servername UID=login;PWD=password;'
Nota: Para hacer consultas distribuidas es necesario que estén activadas las siguientes opciones. ANSI_NULLS y ANSI_WARNIGS. En clientes como Query Analyzer ya están activadas por defecto, pero en otros como osql no.
Por otra parte el uso de servidores en lazados permite que las consultas sean ejecutadas con el previo conocimiento de los servidores disponibles para hacer esta. Este tipo de consultas es usada cuando su periodo de ejecución es relativamente bajo. En el caso nuestro de estudio podríamos estar hablando de una consulta hecha para obtener datos de las ventas de los Data Mart de cada servidor SQL de cada sucursal. Así el servidor central de la empresa podría estar enlazado con los restantes servidores y desde este se podrían crear este tipo de consultas o transacciones distribuidas como veremos más adelante.
Para enlazar un servidor con otro se usa el procedimiento almacenado sp_addlinkedserver. Vamos a ver su uso con algunos ejemplos:
Ejemplo 4: Uso de sp_addlinkedserver (Microsoft Training, 2000)
— USando SQL Server
EXEC sp_addlinkedserver
@server = 'AccountingServer',
@svrproduct = 'SQL Server'
— Usando Oracle
EXEC sp_addlinkedserver
@server = 'OracleFinance',
@svrproduct = 'Oracle',
@provider = 'MSDAORA',
@datasrc = 'OracleDB'
Sintaxis de ejecución del procedimiento: (Microsoft Training, 2000)
sp_addlinkedserver [ @server = ] 'server'
[ , [ @srvproduct = ] 'product_name' ]
[ , [ @provider = ] 'provider_name' ]
[ , [ @datasrc = ] 'data_source' ]
[ , [ @location = ] 'location' ]
[ , [ @provstr = ] 'provider_string' ]
[ , [ @catalog = ] 'catalog' ]
@server Name of the linked server to create
@svrproduct Product name of the OLE DB data source
@provider The unique, friendly name for the OLE DB provider corresponding to
this data source
@datasrc Name of the data source as interpreted by the OLE DB provider
@location Location of the database as interpreted by the OLE DB provider
@server Name of the linked server to create
@svrproduct Product name of the OLE DB data source
@provider The unique, friendly name for the OLE DB provider corresponding to
this data source
@datasrc Name of the data source as interpreted by the OLE DB provider
@location Location of the database as interpreted by the OLE DB provider
En el caso de servidores como SQL Server que necesitan de un usuario y una contraseña para poder conectarse a ellos es necesario que ocurra una de las dos condiciones:
- El usuario con que se ejecuta la consulta esté definido en los dos servidores y tenga derechos para ejecutar las tareas deseadas.
- Se ejecute previamente un mapeo de usuarios usando el procediemiento: sp_addlinkedsrvlogin.
Sintaxis del procedimiento sp_addlinkedsrvlogin: (Microsoft Training, 2000)
sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'
[ , [ @useself = ] 'useself' ]
[ , [ @locallogin = ] 'locallogin' ]
[ , [ @rmtuser = ] 'rmtuser' ]
[ , [ @rmtpassword = ] 'rmtpassword'
@rmtsrvname Name of a linked server to which the login mapping applies.
@useself Determines whether SQL Server login accounts use their own
credentials or the values of the @rmtuser and @rmtpassword
arguments to connect to the server specified by the @rmtsrvname
argument. A value of TRUE for @useself is invalid for a Windows
Authenticated login account.
@locallogin An optional login account on the local server. If used, @locallogin
must already exist on the local server. If this value is null, then all
login accounts on the local SQL Server will be mapped to the
account on the remote server specified by @rmtuser.
@rmtuser The optional user name for connection to @rmtsrvname when
@useself is FALSE.
@rmtpassword The optional password associated with @rmtuser.
Ejemplo 5: Uso de mapeo de usarios: (Microsoft Training, 2000)
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'AccountingServer',
@useself = 'false',
@locallogin = 'Accountwriter',
@rmtuser = 'rmtAccountWriter',
@rmtpassword = 'financepass'
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'AccountingServer',
@useself = 'false',
@rmtuser= 'allcustomers'
Como podemos ver aquí el procedimiento enlaza el usuario que ejecuta la consulta localmente con el que tiene los derechos para hacer el trabajo en el servidor remoto. Así cuando se ejecute la consulta, el servidor usará el usuario adecuado para ejecutar la parte que corresponde al servidor remoto con credenciales diferentes. En nuestro caso de estudio, el servidor de la Sucursal Ciego no tiene que tener la misma contraseña para el usuario sa que los restantes servidores de las demás sucursales, para que nuestro Data Warehouse funcione. Así en el servidor central puede existir un mapeo para cada servidor de cada sucursal. Esto aumenta la seguridad, pues si un hacker se hace de una de las contraseñas de algunos de los servidores de las sucursales no podrá acceder a las restantes ni al servidor central. Incluso sin pensar en hacker. En el caso de que algún administrador quiera consultar los datos de una sucursal diferente a la que administra esto le sería imposible debido a esta técnica, lo que daría la posibilidad de que solo los usuarios de la directiva de la empresa tuvieran acceso a reportes que incluyan varios territorios.
Hasta aquí ya sabemos como enlazar los servidores, pero no sabemos como hacer la consulta sobre estos. La única cosa que diferencia una consulta distribuida sobre servidores enlazados, de una consulta sobre un solo servidor es que la primera tiene que usar nombrado de cuatro partes completo. El nombrado de cuatro partes completo incluye además de los elementos que ya estamos acostumbrados a usar como: Catalogo.Squema.Objeto, el nombre del servidor que se va a encuestar. Así, si el Server de Ciego se llama sassql el nombre de cuatro partes completo de la tabla de ventas sería: sassql.datamartventas.dbo.ventasfact. Ahora mostraremos un ejemplo de cómo se aplica esto en la consulta.
Ejemplo 6: Consulta sobre servidores enlazados (Microsoft Training, 2000)
SELECT CompanyName, Phone
INTO PhoneList
FROM AccountingServer.NorthwindRemote.dbo.Suppliers
SELECT CompanyName
FROM AccountingServer.NorthwindRemote.dbo.Suppliers
SELECT ProductName, CompanyName
FROM Products p JOIN
AccountingServer.NorthwindRemote.dbo.Suppliers
ON p.supplierid = s.supplierid
Existen algunas restricciones a la hora de hacer consultas sobre servidores distribuidos. Estas son:
- No se pueden usar sentencias create, alter, drop.
- No sepuede usar goup by cuando las tablas contienen objetos largos como TEXT, NTEXT, etc.
- No se pueden usar las sentencias: readtext, writetext, updatetext
Otra de las cosas más importantes que posee esta técnica es que normalmente las consultas son ejecutadas en el servidor local, pero el código puede ser modificado para que se hagan en el servidor remoto. Esto puede mejorar en gran medida el rendimiento del servidor, pues la carga de procesamiento se hace en el otro extremo. Imagine que necesita una consulta sobre las ventas de todas las sucursales. Esta puede ser una consulta que consuma mucho tiempo, dado la cantidad de datos a procesar. Si se divide el trabajo entre los servidores de cada sucursal el tiempo de respuesta puede mejorar en gran medida, para usar esta técnica se hace uso de la sentencia openquery, que veremos con un ejemplo: (Microsoft Training, 2000)
Sintaxis:
OPENQUERY (linked_server, 'query')
Ejemplo 7: Uso de la sentencia OPENQUERY
SELECT * FROM OPENQUERY
(AsiaServer, 'SELECT ProductID, Royalty
FROM Northwind.dbo.ProductInfo')
Como podemos ver solo debemos especificar el servidor que va a ejecutar la consulta y luego la consulta en cuestión. Así ese servidor la ejecutará y retornará los resultados:
Existen dos elementos más de alta importancia a la hora de trabajar con servidores enlazados. El primero de ellos es la ejecución de procedimientos almacenados en servidores remotos. Para esto se usa la misma forma de nombrado de cuatro partes ejemplo: sassql.datamartventas.dbo.sp_listarVetas. El otro elemento importante es el uso de transacciones distribuidas. Esta característica de miscrosoft nos permite hacer tareas que necesitan ejecutarse como un todo en servidores distribuidos como una única transacción. Para usar esta característica se usa la sentencia BEGIN DITRIBUTED TRANSACTION <NAME>, vamos a ver esto con un ejemplo:
Ejemplo 8: Uso de transacciones distribuidas
SET XACT_ABORT ON
BEGIN DISTRIBUTED TRANSACTION
EXEC Savingsdb.dbo.withdraw 1234, 100
EXEC Centralserver.Checkingdb.dbo.deposit 1234, 100
COMMIT TRAN
Nota: Recuerde que un rollback de la transacción puede llevar este proceso a cabo en todos los servidores involucrados disminuyendo mucho el rendimiento de los mismos. Además si no está la primera sentencia del ejemplo no se hace un rollback completo. Por lo que siempre es recomendado activar esa opción (XACT_ABORT) para en última instancia hacer un rollback completo y que la BD no quede inconsistente.
Salva y restaura de datos
Una de las cosas más importantes cuando usted ya posee un Data Warehouse es mantenerlo y para esto salvar sus bases de datos es algo fundamental. Para ilustrarlos con un ejemplo les puedo decir que el Data Warehouse que administro generaba todos los días 87 GB de salvas. Salvar este volumen de datos se hace engorroso computacionalmente y también a la hora guardar estos datos en un lugar con espacio disponible. Si por ejemplo usa DLT que pueden almacenar hasta 80 GB en cinta el proceso de salvar un casete de este tipo diario puede ocupar gran parte del procesamiento del servidor en horario nocturno y requiere de 365 casetes para todo el año lo que es un gasto considerable. Si por el contrario decide usar DVD cuya implementación es más barata, necesitaría nada más que la suma aproximada de 23 DVD diarios para hacer la salva de estos datos, sin mencionar que necesitaría una persona solo para cambiar los CD cuando se llenen. Todo esto sin tener en cuenta que alguno de estos pueda tener defectos de fábrica. La posibilidad de usar compactadores hace posible que este gasto disminuya en una gran medida pues usando la máxima compresión de compactadores como WINRAR el tamaño se reduce aproximadamente a solo 3 GB lo que haría posible salvar todo esta información en solo un DVD, pero el uso de esta compresión hace que el procesamiento de un servidor profesional (Hacer Altos 600 de dos procesadores 900 MHz, 750 MB de RAM y arreglo de discos SCSI) se agote al punto de demorar más de 14 horas para compactar toda esa información. Disminuyendo así el procesamiento en horario laboral, lo que hace este proceso inviable. Sin embargo si usamos una compresión menor en este compactador podemos lograr una razón cantidad datos/ costo computacional muy buena. Por ejemplo usando un modo de compresión menor podemos lograr un tamaño de solo 5 GB en un tiempo de solo 2 horas lo que comparado con los 3 GB en 14 horas es realmente un gran avance.
Otra de las técnicas más usadas y necesarias en nuestro caso para salvar servidores Data Warehouse es la salva incremental, que puede generar el servidor SQL Server. Esta salva incremental necesita ante todo que ya se tenga una salva completa de la BD, pero en las restantes salvas se hace solo salva de los datos que han sido modificados o adicionados, lo que disminuye en gran medida este volumen de salva. Por su parte la restaura de los datos salvados con una salva incremental es mucho más rápida y fiable que restaurar una salva completa de la BD. Esta sin duda es la mejor de las opciones cuando se habla de Data Warehouse, ya que los datos de un sistema así no cambian con tanta frecuencia como los de las aplicaciones OLTP, por lo que el volumen de la salva incremental es muy pequeño y por otra parte las adiciones de datos se hace en muchos casos con una diferencia de tiempo bastante grande.
Nota: Recuerde siempre que los datos salvados deben ser llevados a un dispositivo externo y guardados fuera del local de servidores con una seguridad física buena, pues si son obtenidos por otras personas estas podrán saber muchos datos de la empresa.
A continuación vamos a ver un ejemplo de cómo usar el WINRAR en un script para salvar los datos de un servidor Data Warehouse.
Ejemplo 9: Salva de datos de un servidor Data Warehouse.
rem Script para las salvas diarias de los servidores
@echo off
echo "salva del dia:" >> F:TareasBackuplog.txt
date /T >> F:TareasBackuplog.txt
time /T >> F:TareasBackuplog.txt
del /f /q E:SharedBackupbk*.rar
FOR /F "usebackq tokens=2,3,4 delims=/ " %%i IN (`date /t`) DO @SET datebackup=%%k%%i%%j
FOR /F "usebackq tokens=1,2 delims=: " %%i IN (`time /t`) DO @SET timebackup=%%i%%j
FOR /F "usebackq tokens=1 delims= " %%i IN (`date /t`) DO @SET dayname=%%i
SET DAYTIME=%datebackup%%timebackup%00
if EXIST daytimelastbackup.txt goto NoFirstTime
rem primera vez que se salvan los datos
rem Salvar SQL
dir E:SqlDataMSSQLBACKUP*.bak /B /L /S /A:-D > F:TareasBackupfilelistaplics2.lst
dir E:SqlDataMSSQLBACKUP*.trn /B /L /S /A:-D >> F:TareasBackupfilelistaplics2.lst
"C:Program FilesWinRARrar.exe" a E:SharedBackupbkaplics1.rar @F:TareasBackupfilelistaplics1.lst
"C:Program FilesWinRARrar.exe" a -m1 E:SharedBackupbkaplics2.rar @F:TareasBackupfilelistaplics2.lst
rem recopilar toda la salva bajo un solo nombre
"C:Program FilesWinRARrar.exe" a -m0 E:SharedBackupsas9%datebackup%.rar E:SharedBackupbk*.rar
goto eof
:NoFirstTime
rem ################################ Empieza la salva incremental
for /F "tokens=1" %%i in (daytimelastbackup.TXT) do @SET LastBackup=%%i
rem Salvar SQL
dir E:SqlDataMSSQLBACKUP*.bak /B /L /S /A:-D > F:TareasBackupfilelistaplics2.lst
dir E:SqlDataMSSQLBACKUP*.trn /B /L /S /A:-D >> F:TareasBackupfilelistaplics2.lst
"C:Program FilesWinRARrar.exe" a -ta%LastBackup% E:SharedBackupbkaplics1.rar @F:TareasBackupfilelistaplics1.lst
"C:Program FilesWinRARrar.exe" a -ta%LastBackup% -m1 E:SharedBackupbkaplics2.rar @F:TareasBackupfilelistaplics2.lst
rem recopilar toda la salva bajo un solo nombre
"C:Program FilesWinRARrar.exe" a -m0 E:SharedBackupsas9%datebackup%.rar E:SharedBackupbk*.rar
:eof
rem Fin del Script de Salva
echo %DAYTIME% > daytimelastbackup.TXT
net use x: /sas2salvasdia /user:xxxx "xxxxxxx"
if %ERRORLEVEL% EQU 0 (copy /Y E:SharedBackupsas9*.rar x:%dayname%) else (echo "Error al Conectarse al servidor" >> F:TareasBackuplog.txt)
if %ERRORLEVEL% EQU 0 (del /F /Q E:SharedBackupsas9*.rar) else (echo "Error al copiar el archivo al servidor" >> F:TareasBackuplog.txt)
if %ERRORLEVEL% EQU 0 (echo "Salva Exitosa" >> F:TareasBackuplog.txt)
net use x: /d
del /f /Q E:SharedBackupbk*.rar
time /T >> F:TareasBackuplog.txt
Conclusiones
- El uso de sistemas Data Warehouse es una poderosa estrategia para administrar empresas.
- Los resultados que arrojan los análisis de los datos obtenidos y consolidados en el Data Warehouse pueden hacer que la directiva de la empresa corrija las estrataegias hasta ahora trazadas y mejore así las ganancias.
- El mantenimiento de un Sistema Data Warehouse es algo complejo, que requiere de recursos monetarios y estrategia.
- El modelo dimensional brinda una forma muy sencilla de representación de los datos y mejora así el tiempo de consultas a la base de datos.
- Los sistemas de transformación de datos de SQL Server brindan una poderosa herramienta a quienes se inicien en la confección de un Data Warehouse sobre este gestor de Bases de datos.
Bibliografía
- Robert Wrembel & Christian Concilia, DATA WAREHOUSES AND OLAP Concepts, Architectures and Solutions, 2007.
- Microsoft, Microsoft SQL Server 7.0 Data Warehousing Training Kit, Microsoft Press, 2000.
- Microsoft, Microsoft Training and Certification, Course 2073A, Programing a Microsoft SQL Server 2000 Database, Microsoft Press, 2000.
- Microsoft, Microsoft Training and Certification, Course 2072A, Administering a Microsoft SQL Server 2000 Database, Microsoft Press, 2000.
- Microsoft, SQL Server 2000 Books Online, Microsoft Press, 2000
Autor
Erith Eduardo Pérez Gallardo
Administrador Red Sucursal Cimex Ciego de Ávila
Ing. Informática y Aspirante Master en Informática Aplicada
Página anterior | Volver al principio del trabajo | Página siguiente |