Scripts curiosos, para construir otros scripts
Posted by Miguel Egea | Posted in AntiCursores, Relacional | Posted on 03-02-2010
0
En algunas ocasiones tenemos que lanzar un query repetitivo para un monton de servidores o para un monton de tablas. Yo que soy bastante vago a la hora de hacer tareas repetitivas me he ido creando atajos y truquitos, que no son otra cosa. Os voy a poner un par de ejemplos que habréis de adaptar a vuestras necesidades.
El primero de los ejemplos muestra como ejecutar un script mediante SQL CMD para un conjunto de servidores. Primero suponemos que tenemos una tabla que contiene el nombre de esos servers, también supone que el usuario sa tiene el mismo password en todos, obviamente basta con sustituir sa por otro usuario que tenga permisos.
Si estos usuarios están en una tabla también es facil de adaptar.
use tempdb go create schema tuesquema go create table tuesquema.TuTablaConNombresDeServidor (server sysname) go insert into tuesquema.TuTablaConNombresDeServidor values ('127.0.0.1'),('10.10.10.10\instancia') go select row_number() over (partition by server order by orden),* from( select 0 orden, ':connect '+ server + ' -U sa -P PasswordSA ' query, server from tuesquema.tutablaconNombresdeservidor union all select 1 orden, 'if 0=(select count(*) from master.sys.syslogins where name=''tunuevousuario'')' query, server from tuesquema.tutablaconNombresdeservidor union all select 2, 'begin',server from tuesquema.tutablaconNombresdeservidor union all select 3, ' create login tunuevousuario with password=''ElPassword'';', server from tuesquema.tutablaconNombresdeservidor union all select 4, ' exec sp_Addsrvrolemember ''tunuevousuario'',''sysadmin'';', server from tuesquema.tutablaconNombresdeservidor union all select 5, ' end', server from tuesquema.tutablaconNombresdeservidor union all select 6, 'else', server from tuesquema.tutablaconNombresdeservidor union all select 7, ' exec sp_password ''tunuevousuario'',@new=''ElPassword'';', server from tuesquema.tutablaconNombresdeservidor ) a where not server is null order by 4,1 |
El resultado de la ejecución de este script será el que podeis ver a contiunación
Lo que habremos de hacer luego es copiar el resultado query y pegarlo en una nueva ventana de consulta, despues habremos de ir a Query->SQLCMD mode, de esta forma aparecerá la parte de connect en gris, lo que quiere indicar que esa operación se lanzará no como TSQL sino como administración, realmente lo que hará será conectarse al servidor que hemos indicado. En modo SQL CMD hay muchos más comandos, pero no son el objeto de este artÃculo. El resultado hecho esto es el que podeis ver en la siguiente figura.
El siguiente script servira para ejecutar un select count para cada una de las tablas en nuestro sistema.
select 'SELECT ''['+Table_schema+'].['+table_name+']'' NombreDeTabla,count(*) FROM [' + TABLE_SCHEMA +'].[' +TABLE_NAME +'] UNION ALL ' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' |
El resultado de la ejecución de esta consulta será el que veis en la siguiente imagen.

Despues basta con copiar esta query a una nueva ventana, quitar el último union all y añadir una cláusula para la ordenación, en mi caso pondrÃa order by 2 desc, de forma que se ordenarÃa de tabla con mayor numero de filas a menos. El resultado en AdventureWorks2008 será el que veis en la última imagen del artÃculo

Por útimo decir que este comando harÃa algo parecido (que no igual), es un comando indocumentado llamado sp_foreachtable que tiene su gracia
exec SP_MSFOREACHTABLE 'SELECT ''?'', COUNT(*) FROM ?' |
Disfrutad del código
Maria Garaña, habla sobre tecnologÃa y empleo en España
Posted by Miguel Egea | Posted in Noticias | Posted on 02-02-2010
0
La presidenta de Microsoft Ibérica, MarÃa Garaña, reflexiona sobre si el sector de las nuevas tecnologÃas podrÃa convertirse en la principal fuente de riqueza y empleo de España. Su conclusión: para que tal cosa suceda no hay que abandonar las industrias tradicionales, sino que hay que llevar hasta ellas la tecnologÃa y la innovación.
Tutorial de SQL Server Integration Services. Introducción.
Posted by Miguel Egea | Posted in SQL Server Integration Services | Posted on 02-02-2010
0
Introducción
SQL Server Integration services es un producto que viene incluido con la licencia de Microsoft SQL Server y que es la propuesta de Microsoft para lo que se llama Extracción, Transformación y Carga de datos, y yo me atreverÃa a decir que también para la limpieza de los mismos. Muchas veces creemos que el lenguaje obvio para hacer todas estas tareas es T-SQL, sin embargo, la experiencia me dice que cuando de lo que se trata es de consolidar información y de moverla muy rápido, nada como SSIS para resolver esa cuestión.
SQL Server Integration services es un producto en el que se desarrolla de forma muy visual, básicamente pinchando y arrastrando componentes desde la barra de herramientas hasta los lugares de diseño, cada uno de esos componentes admitirá parametrización para adaptarlo a nuestras necesidades.Â
Un vistazo rápido
Para comenzar con SSIS, hemos de instalar las herramientas de Cliente de SQL Server, en ellas nos aparecera el BIDS (Bussiness Intelligence Developmen Studio), dentro de los proyectos de Bussiness Intelligence tenemos los proyectos de Integration Services, como puede observarse en esta figura
Una vez que seleccionamos el proyecto de Integration services se nos abre un paquete en blanco. Los paquetes están separados en dos partes fundamentales, los flujos de control y los flujos de datos.
En el flujo de control especificaremos las tareas que se han de ir haciendo y las dependencias y restricciones. En esa superficie podemos colocar las tareas de flujo de datos, y dentro configurarlas para que muevan los datos de un sitio a otro.
Algunas de las tareas que podremos hacer con SQL Server Integration services de forma sencdilla serán:
- Recorrer listas de ficheros para incorporarlos a nuestras bases de datos
- Procesar cubos, dimensiones o ejecutar comandos XMLA
- Insertar datos de forma masiva
- Extraer, limpiar, transformar y cargar datos en datamarts o datawarehouses
- Usar tareas para entender mejor como es la distribución de nuestros datos
- Ejecutar comandos T-SQL
- Mover, copiar o eliminar archivos
- Obtener o poner datos en un servidor FTP
- Leer o escribir datos en colas de Microsoft Message Queue
- Enviar correos electrónicos con los resultados de las operaciones
- Transferir objetos SQL
- Logins
- Jobs
- Procedimientos de master
- Objetos de servidor
- Invocar a servicios Web XML
- Leer datos WMI o suscribirse a eventos WMI
- Tareas de mantenimiento de bases de datos
- Backups
- Chequeos de integridad
- Tareas del agente SQL
- Tareas TSQL
- Limpieza de hisotircos
- Tareas de limpieza de datos
- Notificaciones a operadores
- Reorganización y reconstrucción de Ãndices
- Purgado de bases de datos
- Actualización de Estadisticas
Todas estas operaciones pueden realizarse en un servidor distinto de nuestros motores de bases de datos, usando al máximo los recursos de la máquina y por lo tanto con una gran capacidad de escalado y un altÃsimo rendimiento.
Dentro de las tareas que podremos hacer con datos en sà también podemos usar alguna de las siguientes:
- Origenes de datos
- Leer datos con proveedores de datos .NET
- Leer datos de archivos Excel
- Leer datos de ficheros planos, estén formados practicamente como estén formados
- Leer datos de cualquier fuente que ofrezca un proveedor OLEDB, (todos los fabricantes del mercado lo hacen)
- Leer datos en formato “crudo” raw
- Leer datos en formatos XML
- Transformaciones de datos
- Agregar información
- Guardar y usar datos en caché para evitar leer la misma información más de una vez
- Añadir información de traza a los datos (nombre del paquete, id de ejecución , versión, hora de comienzo…
- Realizar transformaciones sencillas de textos (pasar a mayúsculas o minúsculas, cambiar a lenguajes chinos, disminuir tampaños,…)
- Mandar datos a un lugar o a otro en función de valores
- Copiar columnas
- Convertir tipos de datos
- Completar la información con consultas a modelos de minerÃa de datos
- Obtener columnas con cálculos complejos
- Guardar o leer archivos BLOB convirtiendolos en ficheros y vicebersa
- Usar ténicas de lógica difusa tanto para agrupados como para búsquedas
- Combinar datos
- Realizar Joins complejos
- Crear copias en memoria de los datos para añadir comportamientos
- Ejecutar comandos SQL contra conexiones oldb
- Obtener muestreos de datos por porcenaje,
- Conteos diversos
- Trasposición de matrices (Pivot)
- Ordenar
- Extracción y busqueda de terminos
- Asistentes para dimensiones lentamente cambiantes
- Destino de datos
- Escribir datos con proveedores de datos .NET
- Escribir datos a archivos Excel
- Escribir datos a ficheros planos
- Entrenar modelos de mineria de datos
- Escribir datos datos en cualquier destino que ofrezca un proveedor OLEDB, (todos los fabricantes del mercado lo hacen)
- Escribir datos en formato crudo
- Devolver Recorsets, y Datareaders
- Mandar datos a SQL Server Compact
Todas estas funcionalidades se ven acompañadas además por un a gran versatilidad en la configuración, en la trazabilidad de las ejecuciones , en la firma digital de paquetes y en el uso y paso de variables para poder parametrizar adecuadamente el producto.
En resumen estamos ante un producto que ofrece un sin fÃn de posibilidades que iremos desgranando en los siguientes capÃtulos de este tutorial que nos llevará buena parte del año escribir por completo.
SQL Server Integration Services, Webcast en castellano.
Posted by Miguel Egea | Posted in Noticias | Posted on 01-02-2010
0
Mi compañero y amigo Salvador Ramos, webmaster de www.sqlserversi.com y SQL Server MVP imparte mañana 2 de Febrero de 2010 un webcast sobre SQL Server Integration services, Salva es un excelente ponente y estoy seguro que es una sesión para disfrutar.
Saludos
Creando una dimensión tiempo en Analisys Services 2/2
Posted by Miguel Egea | Posted in Analisys Services | Posted on 23-01-2010
1
En el artÃculo anterior de la serie vimos omo  crear la primera parte de la dimensión tiempo. En este momento tenemos ya constrido nuestro DataSource View y vamos a ver como se construye nuestra dimensión tiempo desde el punto de vista de Analisys Services. Para ello empezamos con nuestro BIDS (Bussiness Intelligence Development Studio) abierto con el proyecto tal y como lo tenÃamos al final del artÃculo anterior.
Cabe destacar que estamos haciendo este proyecto con SQL Server 2008, cambia algo con respecto de 2005, asà que no es de extrañar que los menús no sean exactamente los mismos, aunque si que lo es el concepto y la forma de hacerlo.
Para comenzar pulsaremos sobre el apartado dimensiones con el botón derecho, eligiendo la opción Nueva dimensión, en ese instante nos aparecerá el asistente para la creación de dimensiones, y tras saltarnos si procede la página de bienvenida, elegiremos la opción “Use an existing table”, Usar una tabla existente. (Aunque hay opciones para crear una tabla de tiempo en el origen de datos o en el servidor, y que estas opciones puedan resultar muy atractivas a simple vista, nosotros vamos a usar la forma máal de crear todo lo relacionado con la dimensión tiempo, porque nuestro objetivo es entenderlo. Además, al menos yo, siempre uso el mecanÃsmo que estoy describiendo, porque no me aporta un trabajo extra y si me da un control muy importante sobre como funciona la dimensión tiempo.En el siguiente paso del asistente tenemos que seleccionar en que objeto del Data Source View nos basamos para crear la dimensión, adicionalmente hay que decir cual es la clave primaria de ese objeto (en nuestro caso es fácil, puesto que la infiere del model) y que columna contiene el descriptor de esa clave (name column). Elegiremos el campo Fecha como name column mientras mantenemos FechaKey como la clave primaria de esta dimensión.
En el siguiente paso del asistente es cuando realmente tenemos que definir que estamos hablando de una dimensión de tipo tiempo. Esto cambia con respecto a 2005, en el que habÃa un wizard que nos preguntaba directamente cual era el campo que contenÃa el dato para mes, semana, dia, trimestre, etc.. En el asistente aparece un campo para definir el tipo de atributo, y es ahà donde concretamos cual es la naturaleza de cada uno de los campos, por ejemplo, en la siguiente figura podemos ver como hemos especificado para Fecha Key que se trata de un atributo de tipo date, es decir, es la fecha propiamente dicha. También aprovecharemos este paso para ajustar los nombres que no acaben de gustarnos, (por ejemplo quitaré Fecha Key y lo traduciré por fecha.
Una vez que hemos elegido todos los atributos podemos continuar con el asistente, en la imagen que teneis a continuación podeis ver como he hecho los siguiente cambios:
- He renombrado Fecha Key por fecha y Mes Key por mes
- He especificado que el tipo de atributo es Date para la fecha
- Year para el año
- Month para el mes
- Week para la semana
- Day Of year para el dia del año
- Day of Month para el dia del mes
- Day of Week para el dia de la semana
Despues de esto simplemente se termina el asistente en el que nos dice que va crear la dimensión tiempo como puede verse a continuación.
Esta dimensión tiempo, ya funcionarÃa, pero no es aún ni demasiado navegable (no tiene jerarquÃas) ni mucho menos optima, porque las relaciones entre atributos tampoco están especificadas. Esto si es un cambio importante en SQL Server 2008, la relación entre atributos cuenta ahora con una pestaña especÃfica, que lo hace más visual. El estado inicial de estas relaciones entre atributos es el que puede verse en la figura a continuación.
Sin embargo, debemos especificar las relaciones reales de dependencia, ya que esas relaciones ayudarán mucho al rendimiento, debido a que con estas relaciones establecidas, SQL Server Analisys Services puede inferir, que el resultado de un mes, es el resultado de sumar los dias (para operaciones aditivas). mientras que el resultado del año es el resultado de sumar los meses. Si estas relaciones no son especificadas, esas conclusiones no pueden establecerse y por tanto se hace un uso suboptimo de los datos. En el grafico siguiente puede verse como establecemos estas relaciones de dependencia de forma adecuada.
Una parte importante, en la que muchas veces no nos fijamos es en el color de las flechitas del apartado Attibute Relasionships, el color más gris indica que la relación que existe entre esos atributos es una relación flexible, es decir que puede cambiar con el tiempo, por ejemplo en el caso del jefe del que depende una persona, es claro que puede cambiar con el tiempo, aunque sea una relación clara entre los atributos, sin embargo, en nuestro caso, la relación Fecha->Mes y la Relación Mes-Año, están especificada como relaciones rÃgidas que quiere decir que el mes 2009-01 siempre será del año 2009 y eso no va a cambiar (cosa que es bastante obvia).
Una vez que tenemos establecidas las relaciones solo nos falta añadirle a la dimensión las jerarquias que nos sirvan para especificar el criterio por el que queremos que se navegue nuestra dimensión. Para ello simplemente arrastraré los atributos hasta el apartado de jerarquÃas. Adicionalmente voy a ocultar el atributo año, para no confundir a los usuarios, si lo dejo podrán llegar al año desde la jerarquia y desde el atributo, y en mi experiencia eso lia bastante a los usuarios. En la imagen siguiente podeis ver como quedan mis jerarquÃas.

Podeis observar que no tengo ningún warning ni ninguna flechita azul, esto es simplemente porque he seguido todos los patrones de buen diseño que SQL Server 2008 Analisys Services tiene especificados para una dimensión como esta. Ahora simplemente vamos a ver un ejemplo de como navegarla, lo teneis en el siguiente gráfico.
Por último, aunque esta serie de dos artÃculos acaba, en posteriores post, intentaré hablar de como localizar esta dimensión, especificando que para usuarios en inglés el nombre le aparezca en inglés, mientras que para usuarios en castellano los nombres aparezcan en castellano, esto es January para los Ingleses, Enero para los hispanos.
Esto será en otro post.
Saludos Cordiales
Mis compañeros de relacional migran una BBDD 24×7 con 4 segundos de tiempo de caida!
Posted by Miguel Egea | Posted in Noticias | Posted on 20-01-2010
0
El equipo de mi amigo eladio, unos cracks. mas informacion
SQL Server 2008, tips an tricks. Miguel Egea Charla en video en el CodeCamp 2009
Posted by Miguel Egea | Posted in Relacional | Posted on 18-01-2010
0
SQL Server 2008 incorpora nuevas funcionalidades para dar soporte a las tecnologÃas que demanda la sociedad; en esta linea, veremos cómo SQL Server hace la vida más fácil gestionando localizaciones geográficas y puntos en el espacio; además veremos cómo SQL Server nos ayuda a gestionar más eficientemente videos, documentos, y archivos de gran tamaño.
Mi charla sobre Analisys Services 2008 en el Codecamp de tarragona
Posted by Miguel Egea | Posted in Analisys Services | Posted on 18-01-2010
4
Me parece increible que yo diese esta charla y no saber que estaba grabada y publicada, gracias a mi amgigo Salvador Ramos y a un portal de bussiness intelligence me he enterado que estaba publicado. Yo no se dar una charla serio, los que me conoceis ya sabeis como soy, para los demás pues bueno, ya podeis verme y oirme.
Creando una dimensión Tiempo en Analisys Services 1/2
Posted by Miguel Egea | Posted in Analisys Services | Posted on 17-01-2010
2
PortalSQL tradicionalmente venÃa hablando solo de motor relacional, sin embargo, mi carrera me ha llevado a la parte multidimensional, y os prometo que ha sido un descubrimiento total, trabajar con cientos o miles de millones de filas, y que los usuarios vean los resultados en tiempo real es una experiencia increible. Si además le podemos añadir luego cierta lógica relacionada con el tiempo y fórmulas que añadan valor a las operaciones, los proyectos sin duda tienen tendencia a ser más exitosos.
Dicho esto, vamos a comenzar con el primer artÃculo sobre Analisys Services, pasaremos casi de largo por algunos pasos básicos, y construiremos la dimensión tiempo paso a paso para que los veais.
Comenzamos en el resultado de los artÃculos sobre la dimensión tiempo, es decir nuestro datawarehouse cargado y relleno con la dimensión tiempo en Español, Inglés y frances como pude verse en la siguiente figura.

Ahora lo que vamos a hacer es abrir el Bussiness Studio Development Studio desde el menú tal y como puede verse en la siguiente figura.

Después lo que haremos será crear un proyecto de Analisys services llamado Dimensión Tiempo, para ello en Fichero –> Nuevo –>Proyecto–> Bussiness Intelligence Projects y ahà elegimos analisys services projects, tal y como podeis ver en la siguiente figura.
Una vez creado el proyecto nos aparecerán los distintos apartados de Analisys Services, los que necesita para crear el proyecto. Lo primero que haremos será crear el Data Source, es decir, crear una conexión al motor relacional en el que estará la tabla tiempo en la que nos vamos a basar, en realidad, lo que hacemos es muy parecido a lo que se hacÃa cuando se creaba una conexión ODBC, es decir crear una conexión a una base de datos (no tiene por que ser SQL Server, puede ser cualquier otro motor).
Importante Pensad que estamos haciendo un proyecto que al final no es mas que código fuente que se ejecutará en un servidor, por tanto, la conexión que creamos al final se conectará no desde nuestra máquina, no con nosotros logueados, sino desde el servidor, y ejecutado bajo las credenciales que levanten el servicio de Analisys Services.
Para crear el Data Source pulsaremos con el botón derecho sobre la carpeta Data Sources, y elegiremos New Data Source :

A partir de elegir la opción nuevo data source nos aparece un asistente para crear la conexión, saltamos el primer paso, que es siempre el de bienvenida, y en el segundo nos permite elegir alguna conexión que ya hayamos hecho anteriormente o podemos pulsar el botón nueva conexión.

Una vez pulsado el botón nueva conexión nos va a aparecer la siguiente pantalla, en la que realmente será la que creemos la conexión.

En la parte superior de la imagen podeis ver como hay una lista desplegable en la que seleccionamos el proveedor de datos que usaremos para conectarnos, en nuestro caso es SQL Server, de forma que hemos elegido el Native Client 10.0, basta con que tengas instalados los drivers adecuados para poder elegir cualquier conexión a cualquier base de datos del mercado.
El siguiente paso, que es el penúltimo, nos pide la información de impersonación, es decir, nos ayuda a decir con que credenciales ha de conectarse el servicio de Analisys Services a esta base de datos, podemos especificar unas credenciales de windows, podemos especificar que se conecte bajo las credenciales del servicio, que se usen nuestras credenciales, o que no use ninguna.

El último paso es especificar el nombre que daremos a la conexión, elegid cualquiera que nos vale.
Una vez creado el Data Source, (Origen de Datos), debemos crear el Data Source View, esto nos permite seleccionar bien tablas o vistas, o bien crear consultas y que aparezcan en nuestro modelo como una tabla. Para nuestro ejemplo, en el que no vamos a hacer un cubo completo sino solamente la dimensión tiempo, nos valdrá con la tabla que tiene la dimensión tiempo. Realmente es la única que vamos a necesitar, pero en futuros artÃculos espero que creemos un cubo completo contra Adventure Works por ejemplo, para que veais el proceso completo.
Para crear el data source view, sobre el apartado en el explorardor de soluciones, botón derecho, nuevo data source view y seguimos el asistente, en el primer paso solamente es el de bienvenida, el segundo nos ofrece para elegir el datasource del que saldrá la conexión, obviamente elegiremos el que acabamos de crear.

Las alternativas que nos ofrece el asistente en el segundo paso son las que usará para inferir claves primarias, y relaciones en las tablas seleccionadas. El data source view añade esta lógica sin modificar el origen de datos, es decir, él necesita saber que campos son clave primaria y como se relacionan las tablas para ayudarnos en la creación de las dimensiones y hechos posteriormente. La alternativa que elijais dependerá mucho de como tengais vuestro protocolo de nombres en la creación, fijaos en los ejemplos que pone cuando pinchais una de las alternativas y elegid el más adecuado a vuestro esquema. En el siguiente paso hay que elegir que tablas nos traemos. En nuestro caso solo Dimensiones.Tiempo, fijaos que hay una parte de filtro abajo de las tablas de origen, esto es porque en los esquemas grandes suelen haber, cientos, quizás miles de tablas (el otro dÃa vi un ejemplo de un sistema navision con 90.000 tablas…) para elegir una en concreto ayudarnos del filtro será fundamental en estos casos.
Fijaos también en el botón Add Related tables, en los que el sistema va a traerse las tablas que estén relacionadas, averiguando esto a través de las restricciones de integridad referencial. De esta forma podemos elegir el conjunto de tablas que necesitamos de una forma mucho más sencilla.
Hasta aquà la primera parte, en breve publicaré el final de la creación de la dimensión tiempo, lo que es la creación en sÃ.
Saludos













