17 marzo 2008

Novedades en SQL Server 2008 Parte 1

La semana pasada tuve la oportunidad de participar en el evento de lanzamiento de SQL 2008 en Puerto Rico, así que tuve que sacar tiempo de donde no había para comenzar a explorar las novedades de esta nueva versión que según dicen, tendremos la versión final para el 3er trimestre de este año.

La versión con la que estuve trabajando es el CPT de Febrero y a continuación voy a comentar las principales novedades para la parte de BI.

Lo primero que debo decir es que no hay mayores cambios a nivel de arquitectura del producto tal como existió de la versión 2000 a la 2005, eso es muy bueno para nosotros porque nos demuestra que el producto sigue madurando y no require hacerlo de nuevo desde cero. Por tanto todos los que están ya trabajando con 2005 o los que están recién empezando con esta versión no deben sentirse "mal" debido a que ya nos viene una nueva versión y habría que volver a empezar.

Motor Relacional

Específicamente para BI se han agregado nuevas características al lenguaje T-SQL como la inclusión de STAR JOIN, comando para relacionar nuestras dimensiones y fact tables de manera optimizada cuando creemos nuestras consultas (queries). El comando MERGE es otra novedad el cuál nos permite hacer inserciones o actualizaciones de una manera transparente entre dos tablas. Esto es bastante utilizado cuando tenemos que actualizar nuestras dimensiones o facts.

Otras nuevas características son:
  • Change Data Capture (CDC): Básicamente CDC nos permite guardar en una segunda tabla los cambios realizadas a la primera, de manera que para realizar actualizaciones a nuestras dimensiones o facts dentro del DW, no tengamos que leer nuevamente toda la data de la tabla fuente (que puede tener millones de registros) para hacer preguntas acerca de cuál es la data que cambió o se insertó (que pueden ser sólo unas decenas o centenas pero seguramente mucho menor que toda la tabla fuente).

    Lo más interesante de esto es que el motor relacional hace todo el trabajo del CDC a través de un proceso que monitorea el Log y busca las inserciones, actualizaciones o eliminaciones que se realizaron a la tabla que se está monitoreando, logrando de esta manera el mínimo impacto con respecto a utilización de recursos del servidor.

    Para utilizar CDC primero hay que activarlo a nivel de la base de datos (se requiere tener rol de SysAdmin para poder hacer esto). Luego de ejecutar el Stored Procedure para la activación de CDC podrán notar que se crean nuevas tablas dentro del database schema llamado CDC (nombre reservado en SQL ahora para este propósito). A continuación debemos activar el CDC para las tablas específicas que necesitamos monitorear. Si vemos de nuevo las tablas existentes en nuestra base de datos podremos notar que ahora tenemos otras nuevas bajo el schema de CDC y también nuevas funciones de tipo tabla (Table Value Functions).

    La forma en que el CDC guarda la información de los cambios las tablas recientemente creadas se basa en el LSN (Log Sequence Number) que es el ID del log dónde guardó el o los cambios a nuestra tabla. Si revisamos las tabla CDC creada para monitoriar los cambios de nuestra tabla origen (cdc.[nombre_tabla]_CT), notaremos que hay varias columnas de metadata que empiezan con "_$" como las que muestran el LSN de inicio y de fin, así como una columna "_$Operation", que indica que tipo de operación fue la realizada con esa data (inserción, antes de actualización, después de actualización, eliminación). Para leer la información de nuestra tabla CDC podemos hacer uso de las funciones creadas automáticamente que nos permiten obtener los cambios filtrando los mismos por fecha.

    Leyendo la data que ha sido creada/modificada desde las tablas CDC para realizar actualizaciones en el DW disminuye el trabajo que hay que realizar en los paquetes a la misma vez que el tiempo de procesamiento puede mejorar sustancialmente.
SSIS

Con respecto a SSIS se han realizado mejoras al engine para maximizar el uso de varios procesadores creando procesos paralelos, lo cual aumenta la escalabilidad y permite distribuir la carga.

Una de las mejoras ampliamente solicitadas fue la de incluir C# como parte del lenguaje para crear Script Components. Además cuando trabajemos con este componetne ahora tenemos mayor integración con el IDE de Visual Studio, podemos referenciar assemblies externos de una manera más fácil permitiendo que nuestros paquetes sean más extensibles usando el poder del .NET Framework.

Otras características importantes son:
  • Data Profiling Component: Súper útil para ayudarnos a conocer más la data con la que tenemos que trabajar. Este componente permite realizar hasta 8 disitintos tipo de análisis sobre la tabla completa o sobre las columnas que nos interesan. Alguno de los tipos de análisis que podemos realizar son: cantidad de NULLs, tamaño Min/Max, Primary Key (para determinar si una columna puede ser primary key), data inclussion (para determinar si todos los valores de una columna están contenidos dentro de otra - foreign keys - lookups).
    La salida (output) de este control es un archivo en formato XML que puede ser visualizado con una nueva herramienta dentro del folder de SSIS llamada Data Profiler Viewer.
  • Lookup Cache: Realizar lookups en nuestros paquetes para obtener el Surrogate Key a partir de un Business Key, es una tarea común. El tema se complica cuando la tabla contra la que tenemos que realizar los lookups tiene millones de records y más aún si debemos realizar dicho lookup más de una vez dentro del mismo paquete o en varios paquetes diferentes. Esta complicación se da debido a que en 2005 SSIS necesita leer TOOODA la data de la tabla lookup en memoria antes de comenzar a procesar las tareas del data flow y por tanto, mientras más records, más lento es el proceso (si no les arroja primero algún error por falta de memoria).

    La buena nueva es que en 2008 podemos guardar la data del lookup en Cache, ya sea en memoria o físicamente en el disco, de manera que podamos cargar ese cache por adelantado y reutilizarlo en los distintos lookups según sea requerido, ya sea en el mismo o en otros paquetes. Bastante simple pero excelente mejora.

    Otras mejoras al lookup component existente es la posibilidad de dar un tratamiento distinto a los records que no existan en nuestra tabla lookup (antes sólo teníamos la opción de enviarla al output de error). Para esto se ha agregado un nuevo tipo de output al componente de Lookup.
En la próximo post continuaremos revisando algunas de las nuevas características de SQL 2008 para BI. Alguno de ellos serán:

SSAS
  • Dimension Wizard
  • Diseño más intuitivo
SSRS
  • IIS Independent
  • Report Designer
  • Tablix
  • Nuevos controles

Nos vemos,

Alan