jueves, 16 de octubre de 2014

Los mejores servicios en la nube para desarrolladores

Github, el repositorio de proyectos más grande del mundo
Github
Github es una herramienta fundamental para cualquier desarrollador. Es el lugar preferido para alojar su repositorio público y poder colaborar de forma distribuida con otros desarrolladores.
Muchos de los proyectos más populares Open Source utilizan Github para alojar su código o realizar integración continua utilizando todo tipo de plugins y herramientas que se conectan con la API de Github y los mágicos hooks de git.
Si bien, no es un servicio en la nube al uso como podríamos pensar si hablamos de PaaS o IaaS, con Github podemos crear las páginas de soporte de nuestros proyectos gracias a su GitHub page, distribuir nuestro código para que cualquier desarrollador lo clone o haga un fork usando git. Además de todos el sistema de tickets, wiki, milestone para gestionar los proyectos a gran escala.
Más información | Github

Google App Engine, la nube de Google cada vez más grande

Google App Engine
La competencia entre los PaaS es dura. Google ha ido metiendo la cabeza en esa lucha especialmente contra Amazon ofreciendo su alternativa muy ligada a cómo se escalan servicios en Google. Google App Engine apareció de forma muy básica allá por 2008 soportando tan sólo Python, aunque rápidamente incorporó Java y más adelante se han ido añadiendo Groovy, JRuby, Scala, Clojure o el más reciente PHP y su experimento con Go.
La mayor diferencia frente a servicios como EC2 es su facilidad de despliegue en la nube. Como buen PaaS, simplemente nos debemos de preocupar de desarrollar la aplicación y el propio App Engine lo escalará a las maquinas que sean necesaria de forma totalmente transparente. Cuenta con varios plugins y SDK para Eclipse para facilitar la tarea de programación y despliegue.
El ecosistema de Google App Engine ha ido creciendo incorporando más servicio de Google Cloud como Google Cloud SQL, Google Cloud Storage o Google Cloud Endpoints para crear el backends de apps móviles.
Más información | Google App Engine

Windows Azure, la nube de microsoft

Windows Azure
Tengo que reconocer que cuando empecé a escuchar que Microsoft estaba preparando un servicio en la nube tenía mis reparos sobre si sería demasiado enfocado a plataformas Windows. Todo lo contrario, Azure está abierto a diversas tecnologías como Java, PHP, Ruby, Python o Node.js, sin olvidarnos de .NET. Y sus SDKs están disponibles para Mac, Windows o Linux, un acierto esa apertura.
Por supuesto, las maquinas virtuales o algunas de las bases de datos que ofrece son propietarias de Microsoft, aunque su fiabilidad en la nube es incuestionable.
Entre los servicios que ofrece como plataforma en la nube nos encontramos servicios para plataformas móviles iOS, Android, Windows Phone o Xamarin para el envío de notificaciones y backend, big data, almacenamiento, la propia de infraestructura de nuestra aplicación, etc..
Más información | Windows Azure

Conclusiones: muy difícil quedarse con tan sólo tres servicios en la nube

Aunque en esta selección del repaso de tecnologías del 2013 sólo queríamos mencionar los tres más destacados, esta categoría tiene un un gran número de plataformas y servicios increíbles para los desarrolladores. Y más que aparecerán en este 2014. Es el mayor filón para muchas empresas que han visto que ofrecer servicios a los desarrolladores tiene unas altas expectativas de monetización. Ellos nos ofrecen las herramientas y nosotros podemos crear aplicaciones de forma más ágil y eficaz. Si ahora creas una startup es imprescindible que uses un servicio de los mencionados para poder ir escalando tu infraestructura según tus necesidades.
A continuación algunos de los servicios en la nube que no podíamos dejar de mencionar:
Amazon Web Services para muchos de nosotros aunque no haya sido seleccionado entre los tres más destacados, quizás porque es algo habitual contar con EC2 o un S3 en nuestros proyectoscabe un mención muy especial. Y este año hemos conocido más servicios que se unen a su tremendo ecosistemas como los más recientes Amazon Kinesis o Amazon Simple Notification Services (SNS).
Parse, sin duda, si nos planteamos añadir a nuestras aplicaciones notificaciones push es uno de los primeros servicios en la nube al que recurriríamos. Nos ofrece un amplio abanico de servicios para el envío y gestión de notificaciones tanto a Android como iOS, así como ejecutar script en la nube para llevar parte de la lógica del envío a un backend distribuido con su reciente servicio Cloud Code.
Apigee es un servicio en la nube que nos permite manejar nuestra API con un potente panel de herramientas que van desde la gestión de la seguridad, caché, estadísticas como el mantenimiento de distintas versiones o tratamiento y transformación de los datos. Además nos permite crear en sencillo paso una consola sandbox para poder enseñar el uso de nuestra API a los desarrolladores. Empresas como Twitter la usan para este fin.
Y simplemente enlazando al resto de servicios que teníamos en nuestra lista HerokuCloud Foundry,Simperium o Bitbucket.

Lista de servicios y productos gratis de Google en internet


Google es la empresa que más recursos gratis pone a disposición de nosotros en internet.Son pocos los servicios de Google de pago, generalmente enfocados a empresas que son las que de forma indirecta hacen posible que podamos acceder a la gran mayoría de ellos gratis. Por supuesto para utilizarlos es necesario poseer una cuenta de Google, que se obtiene automáticamente al crear una cuenta de correo en Gmail, aunque ahora también se puede crear una cuenta de Google sin Gmail.

Bien vale la pena dedicar un artículo a mencionar estos servicios, promocionarlos y dar a conocer algunos casi desconocidos. En esta página no los listamos todos (son más de 100), solo los más populares, útiles y por supuesto, que son gratuitos. Trataremos de mantener este artículo actualizado ya que cada año se agregan servicios y se eliminan algunos de ellos. Anímate y dale una ojeada a la lista, de seguro descubrirás algunos productos que no conocías y te podrían ser de utilidad. 



Servicios de búsquedas e información


Búsqueda de GoogleEl primero y principal de los servicios de Google. Permite buscar en una enorme base de datos que contiene la mayor parte de las páginas web existentes en internet.
Otros servicios especializados permiten hacer búsquedas solo en determinado tipo de contenido:
Buscar solo en imágenes Google Imágenes
Buscar solo en webblogs Google Blog Search
Buscar entre datos de publicaciones escolares Google Scholar
Buscar solo libros Google Books
Buscar información sobre las finanzas Google Finance.
Google AlertsSistema de notificaciones mediante el correo electrónico que envía alertas basadas en un término de búsqueda, cuando aparece en los resultados del buscador.
Google KeepPara tomar notas y tenerlas a nuestra disposición online (similar a Evernote).
Google DocsPermite crear y compartir documentos, hojas de cálculo y presentaciones online. Funciona de forma similar a los programas de la suite Office.
Google CalendarCalendario online integrado con Gmail. Disponible para acceder a los datos desde equipos o dispositivos diferentes.
Google LocalPermite a las organizaciones, negocios y pequeñas marcas con una ubicación física tener una mejor visibilidad en las búsquedas.
Google NowAsistente personal inteligente que sugiere el contenido o servicio más apropiado, usando la voz.
Google NewsGoogle Noticias muestra las noticias más recientes sobre cualquier tema, introduciendo un término. Permite suscribirse para recibirlas por email. Obtiene estas noticias rastreando varios sitios web dedicados a la publicación.
Puedes mostrar las noticias en tu blog o compartir con Google News lo que publicas, si cumples con sus reglas haciendo la solicitud.
Lee más información.

Servicios sociales y comunicación

Google MailEl principal y el más importante servicio de correo electrónico de internet, con todas las funcionalidades necesarias. Por su rapidez, seguridad y las opciones que incluye, hace casi innecesario usar otro servicio de email.
Lee mas informacion.
Google PlusGoogle+, segunda red social en tamaño en internet. Integrada a los principales servicios de Google. Al crear una cuenta de Google, automáticamente formamos parte de esta red social.
Google Profiles Permite administrar nuestro perfil personal en la red social Google+, para que se debe mostrar sobre nosotros en internet.
Google HangoutsServicio de mensajería instantánea para enviar mensajes, hacer llamadas y efectuar video conferencias entre varias personas. Pretende convertirse en una plataforma integral de comunicación global. De ser un chat de texto pasó a soportar videoconferencias de hasta diez participantes y también a tomar el control de los SMS de los dispositivos con Android. Se dice que próximamente que integrara a Google Voice.
Google GroupsPermite crear grupos de debate sobre casi cualquier tema. Los usuarios pueden crear nuevos grupos o unirse a los existentes, crear publicaciones y compartir archivos.
Google VoiceEntrega un número telefónico para hacer llamadas gratis en los Estados Unidos y baratas al resto del mundo. Solo disponible para USA.
Google Play MusicTienda de música disponible online. Facilita tener nuestra música disponible en la nube para oírla usando dispositivos diferentes. Después de crear una cuenta podremos acceder a más de 20 000 canciones gratis.
Lee como usar Google Play Music
Google PlayGoogle Play es la tienda de contenidos de Android. En ella se pueden encontrar millones de aplicaciones, juegos, libros, películas y canciones de pago y gratis.
En la sección Descubre el mundo de Google Play se recopila el contenido más popular de cada categoría.
OrkutRed social creada en el 2004. Muy popular en Brasil y la India.
Google Cultural InstituteEl Instituto Cultural es una especie de museo virtual en el que se exponen y promocionan eventos culturales y artísticos de todo el mundo. En fechas señaladas, así como en aniversarios se puede encontrar mucha información de interés. Hermosa iniciativa de Google reciente, que esperamos se promueva más.
ActúaActúa es un proyecto de Google poco conocido que agrupa personas de todo el mundo en defensa de una Web libre y abierta. Promueve la Libertad de participación y Libertad de expresión en internet. Al registrarnos nos mantiene informado sobre todas las legislaciones que pueden afectarnos y las iniciativas que surgen a favor de la libre expresión y comunicación.

Mapas, localización y exploración

Google MapsVarios tipos de mapas de todo el mundo.
Google Street ViewMuestra fotos panorámicas de lugares y sitios en los mapas de Gmaps.
Google Map MakerServicio para contribuir editando y agregando información a los mapas de Gmaps.
Google EarthSoftware para disponer de un Atlas virtual en 3D del mundo. Usa para eso imágenes de satélites y fotos aéreas. Hay aplicaciones para dispositivos portables.
Otras versiones similares permiten admirar la Luna, el planeta Marte y explorar el espacio usando fotografias de la NASA: Google MoonGoogle Mars y Google Sky
Google SketchUpSoftware para crear modificar y compartir modelos en 3D. Pueden subirse a Google 3D Warehouse o publicarse y mostrarse en Google Earth.
PanoramioServicio para compartir fotografías de lugares del mundo geo-localizadas. Muchas de ellas se muestran en Google Earth como miniaturas que al dar clic se abren a mayor tamaño. Lee más información.

Herramientas y utilidades

Google TranslateServicio para traducir texto o páginas web completas. Podemos disponer del servicio offline en dispositivos con Android.
Google ChromeNavegador web sencillo, rápido y con disponibilidad de gran cantidad de extensiones para agregarle funcionalidades. Todos los datos de nuestra navegación como historial, contraseñas guardadas, marcadores y la cache se pueden sincronizar de forma automática con nuestra cuenta de Google y así tener un respaldo en la nube y disponer de ellos en equipos o dispositivos diferentes.
AndroidAndroid es un sistema operativo de código abierto para dispositivos portables.
Google ChromiumSitio de desarrolladores de Chromium, proyecto de código abierto detrás del navegador Google Chrome y del sistema operativo Google Chrome OS.
Google Public DNSServidores DNS alternos gratis y con buenas prestaciones para acelerar la velocidad de la navegación en internet.
Lee más información.
Google AdSenseServicio para mostrar publicidad y anuncios en las páginas de un sitio web propio o en un blog creado en Blogger. Permite obtener ingresos por el contenido que compartimos en la red.
Los anuncios que se muestran proceden del servicio Google AdWords, mediante el cual los anunciantes le pagan a Google.
AdWords es la verdadera fuente de la mayor parte de los ingresos de Google.
Lee más información: Como ganar dinero en internet insertando anuncios y publicidad
Google TakeoutTakeout es un servicio para exportar nuestra información de Google o sea descargar a nuestra computadora fotos, videos, contactos, mensajes y cualquier otro tipo de datos desde cualquier servicio de Google.
Facilita guardar los datos personales principalmente cuando Google decide cerrar cualquiera de sus servicios.

Servicios de publicación en internet

Google SitesServicio para crear un sencillo sitio web.
BloggerPlataforma de publicación para crear un blog personal con un nombre de dominio propio.
Lee: Como crear y tener mi propio blog en Blogger.
Google DriveServicio de almacenamiento en la nube donde guardar y compartir archivos como fotos, videos, documentos y cualquier otro tipo de archivo.
Lee: Como usar Google Drive para subir y guardar archivos.
PicasaAlmacenamiento de fotografías online, vinculado con nuestra cuenta en la red social Google+. Incluye herramientas para la edición, efectos, reconocimiento de rostros y geo-localización.
YouTubePopular servicio para subir, ver y compartir videos.
Google Web DesignerEditor WYSIWYG para crear y editar páginas web usando el estándar HTML5.

Herramientas y servicios para desarrolladores

Google DevelopersPágina con documentación técnica para usar y aprovechar los recursos de Google de forma avanzada.
Google CodeRepositorio o almacén donde hostear (servir) código para usarlo o compartirlo libremente con otras personas.
Repositorios de código fuente en internet
Google AnalyticsPoderoso y útil servicio de analítica y estadísticas para sitios web. Usando un código de rastreo que debemos insertar en nuestro sitio, crea informes detallados con todo tipo de datos de los visitantes.
Google Webmaster ToolsVarias herramientas para los que poseen un blog o sitio web en internet. Permite comprobar el estado de la indexación por el buscador y optimizar su visibilidad. Ofrece varios informes que nos ayudan a conocer el alcance de nuestras publicaciones, además recibimos notificaciones ante cualquier error grave.
Lee: Como usar las Herramientas para Webmasters de Google
Google PageSpeed InsightsAnaliza el funcionamiento de una página web y ofrece sugestiones para optimizarla y mejorar su velocidad de carga.
Como hacer más rápida la carga de un blog o un sitio web
Google PageSpeed ServiceServicio CDN para sitios web. Sirve las paginas desde diversos servidores de Google distribuidos geográficamente para mejorar su velocidad de carga y desempeño.
Para agregar un sitio al servicio es necesario hacer la solicitud.
Google Custom Search EnginePermite crear motores de búsqueda personalizados para un sitio web. Un ejemplo es el cuadro de búsqueda en la parte inferior de nuestras páginas, que permite a los lectores hacer búsquedas solo en el contenido de nuestro blog y sito web.
Google FontsServicio que brinda diversas fuentes online para usarlas en cualquier sitio de internet.
Google URL ShortenerAcortador de direcciones URL que también ofrece un servicio de estadísticas. Lee como usarlo.
Google App EngineServicio donde hostear nuestras aplicaciones.
Google FeedBurnerDe ayuda para bloggers para divulgar el feed RSS de las nuevas publicaciones.
Google TrendsTendencias de búsqueda de Google ofrece herramientas para comparar la popularidad de distintos términos y ubicar las tendencias de búsqueda en el mapa.
Google InsightsHerramienta para conocer la popularidad de uno o más términos de búsqueda en internet, usando la base de datos de Google.
Google SwiffyHerramienta online para convertir archivos en formato flash (SWF) a HTML5, debido a su incompatibilidad con dispositivos portables.

Registrarse en Google y crear una cuenta sin Gmail


La forma tradicional de crear una nueva cuenta que sirva para todos los servicios de Google, es al obtener una nueva cuenta de correo electrónico en el servicio de Gmail.
No obstante ahora existe la posibilidad de acceder a los servicios de Google, sin depender de Gmail.
Es de utilidad para los que poseen cuentas de correos en otros servicios como Yahoo o Outlook y no quieren crear una nueva cuenta que nunca utilizarán.
Para crear una nueva cuenta de Google usa el siguiente enlace, por supuesto es necesario indicar una cuenta existente de email, no importa que sea de otro servicio.
Crear una cuenta en Google sin Gmail 
Registrarse en Google y crear una cuenta sin Gmail
No obstante si te decides a obtener un correo de Google usa el enlace: "Quiero una nueva dirección de Gmail". 

sábado, 4 de octubre de 2014

Generar automáticamente procedimientos almacenados a partir de una tabla

La creación de procedimientos almacenados para un CRUD puede resultar una tarea bastante repetitiva. Aquí publico un procedimiento almacenado para SQL Server (T-SQL) que sirve para generar un script para crear 4 procedimientos almacenados a partir del nombre de una tabla.

El script creará 4 procedimientos. Todos los procedimientos que crea el script reciben como parámetros todos los campos de la tabla.
- SELECT filtrará por los campos recibidos que no sean NULL (where condicionado)
- INSERT insertará un registro con los parámetros recibidos
- UPDATE tal y como se genera no tiene sentido, simplemente borra las líneas que no quieras (del SET ó del WHERE)
- DELETE borrará registros filtrando por los campos recibidos que no sean NULL
- EXISTS devolverá registros que coincidan con el filtro creado con los campos recibidos que no sean NULL (where condicionado)

-----------------
-----------------
Aquí está el script:


CREATE PROCEDURE [dbo].[sp_generate]  
  @tableName AS VARCHAR(100)  
AS  
  
--CAPITALIZE TABLENAME  
SET @tableName = UPPER(LEFT(@tableName,1)) + RIGHT(@tableName, LEN(@tableName) -1)  
  
--SALTO DE LÍNEA  
DECLARE @nl AS CHAR  
SET @nl = CHAR(10) + CHAR(13)   
  
--CABECERA  
DECLARE @spHeaders AS VARCHAR(1000)  
SET @spHeaders = 'SET ANSI_NULLS ON' + @nl +  
'GO' + @nl +  
'SET QUOTED_IDENTIFIER ON' + @nl +  
'GO' + @nl +  
'-- =============================================' + @nl +  
'-- Author:  TU_NOMBRE' + @nl +  
'-- Create date: ' + CONVERT(VARCHAR, GETDATE(), 3) + @nl +  
'-- ============================================='  
  
DECLARE @table AS VARCHAR(MAX)  
DECLARE @column AS VARCHAR(MAX)  
DECLARE @data_type AS VARCHAR(MAX)  
DECLARE @length AS INT  
DECLARE @precision AS INT  
DECLARE @scale AS INT  
  
--PARÁMETROS  
DECLARE @spParameters AS VARCHAR(MAX) SET @spParameters = ''  
  
--LISTA DE CAMPOS  
DECLARE @fieldList AS VARCHAR(MAX) SET @fieldList = ''  
  
--LISTA DE CAMPOS PARA EL SET DEL UPDATE  
DECLARE @fieldSetList AS VARCHAR(MAX) SET @fieldSetList = ''  
  
--LISTA DE PARÁMETROS PARA EL INSERT  
DECLARE @insertParameters AS VARCHAR(MAX) SET @insertParameters = ''  
  
--CONDICIONES  
DECLARE @spConditions AS VARCHAR(MAX) SET @spConditions = ''  
  
DECLARE c CURSOR STATIC FOR  
select table_name, column_name, data_type, character_maximum_length,numeric_precision, numeric_scale from information_schema.columns where table_name = @tableName order by ordinal_position  
OPEN c FETCH NEXT FROM c INTO @table, @column, @data_type, @length, @precision, @scale  
WHILE @@FETCH_STATUS = 0 BEGIN  
  
 SET @spParameters = @spParameters + (CASE WHEN LEN(@spParameters) >0 THEN @nl + ' ,' ELSE '  ' END) + '@' + @column + ' ' + UPPER(@data_type) + (CASE @data_type WHEN 'VARCHAR' THEN '('+CAST(@length AS VARCHAR)+')' WHEN 'DECIMAL' THEN '('+CAST(@precision AS VARCHAR)+', '+CAST(@scale AS VARCHAR)+')' ELSE '' END) + ' = NULL'  
 SET @fieldList = @fieldList + (CASE WHEN LEN(@fieldList) >0 THEN @nl + '    ,' ELSE '' END) + @column  
 SET @spConditions = @spConditions + (CASE WHEN LEN(@spConditions) >0 THEN @nl + '   AND ' ELSE '' END) + '(@' + @column + ' IS NULL OR @' + @column + '=' + @column + ')'  
 SET @fieldSetList = @fieldSetList + (CASE WHEN LEN(@fieldSetList) >0 THEN @nl + '     ,' ELSE '      ' END) + @column + ' = @' + @column  
 SET @insertParameters = @insertParameters + (CASE WHEN LEN(@insertParameters) >0 THEN @nl + '    ,' ELSE '' END) + '@' + @column  
  
 FETCH NEXT FROM c INTO @table, @column, @data_type, @length, @precision, @scale  
END  
CLOSE c DEALLOCATE c  
  
--********************************  
--*********** SELECT *************  
--********************************  
DECLARE @SELECT AS VARCHAR(MAX)  
SET @SELECT = @spHeaders + @nl  
SET @SELECT = @SELECT + 'CREATE PROCEDURE ' + @tableName + '_Select' + @nl  
SET @SELECT = @SELECT + @spParameters + @nl  
SET @SELECT = @SELECT + 'AS' + @nl + ' SET NOCOUNT OFF;' + @nl + @nl  
SET @SELECT = @SELECT + '    SELECT ' + @fieldList + @nl  
SET @SELECT = @SELECT + '    FROM ' + @table + @nl  
SET @SELECT = @SELECt + '    WHERE ' + @spConditions + @nl  
  
--********************************  
--*********** UPDATE *************  
--********************************  
DECLARE @UPDATE AS VARCHAR(MAX)  
SET @UPDATE = @spHeaders + @nl  
SET @UPDATE = @UPDATE + 'CREATE PROCEDURE ' + @tableName + '_Update' + @nl  
SET @UPDATE = @UPDATE + @spParameters + @nl  
SET @UPDATE = @UPDATE + 'AS' + @nl + ' SET NOCOUNT OFF;' + @nl + @nl  
SET @UPDATE = @UPDATE + '    UPDATE ' + @table + ' SET ' + @nl  
SET @UPDATE = @UPDATE + @fieldSetList + @nl  
SET @UPDATE = @UPDATE + '    WHERE ' + @spConditions + @nl  
  
--********************************  
--*********** DELETE *************  
--********************************  
DECLARE @DELETE AS VARCHAR(MAX)  
SET @DELETE = @spHeaders + @nl  
SET @DELETE = @DELETE + 'CREATE PROCEDURE ' + @tableName + '_Delete' + @nl  
SET @DELETE = @DELETE + @spParameters + @nl  
SET @DELETE = @DELETE + 'AS' + @nl + ' SET NOCOUNT OFF;' + @nl + @nl  
SET @DELETE = @DELETE + '    DELETE FROM ' + @table + @nl  
SET @DELETE = @DELETE + '    WHERE ' + @spConditions + @nl  
  
--********************************  
--*********** INSERT *************  
--********************************  
DECLARE @INSERT AS VARCHAR(MAX)  
SET @INSERT = @spHeaders + @nl  
SET @INSERT = @INSERT + 'CREATE PROCEDURE ' + @tableName + '_Insert' + @nl  
SET @INSERT = @INSERT + @spParameters + @nl  
SET @INSERT = @INSERT + 'AS' + @nl + ' SET NOCOUNT OFF;' + @nl + @nl  
SET @INSERT = @INSERT + '    INSERT INTO ' + @table + '(' + @nl  
SET @INSERT = @INSERT + '     ' + @fieldList + @nl  
SET @INSERT = @INSERT + ' )' + @nl + ' VALUES(' + @nl + '     ' + @insertParameters + @nl  
SET @INSERT = @INSERT + ' )' + @nl  
  
--********************************  
--*********** EXISTS *************  
--********************************  
DECLARE @EXISTS AS VARCHAR(MAX)  
SET @EXISTS = @spHeaders + @nl  
SET @EXISTS = @EXISTS + 'CREATE PROCEDURE ' + @tableName + '_Exists' + @nl  
SET @EXISTS = @EXISTS + @spParameters + @nl  
SET @EXISTS = @EXISTS + ' ,@exists BIT OUT' + @nl  
SET @EXISTS = @EXISTS + 'AS' + @nl + ' SET NOCOUNT OFF;' + @nl + @nl  
SET @EXISTS = @EXISTS + '    IF EXISTS (' + @nl + ' SELECT ' + LEFT(@fieldList,CHARINDEX(@nl,@fieldList))  
SET @EXISTS = @EXISTS + '    FROM ' + @table + @nl  
SET @EXISTS = @EXISTS + '    WHERE ' + @spConditions + @nl + ' )' + @nl  
SET @EXISTS = @EXISTS + ' SET @exists = 1' + @nl + ' ELSE SET @exists = 0'  
  
--MOSTRAR GENERADOS  
PRINT + '-- =====INSERT==================================' + @nl + @INSERT  
PRINT + '-- =====DELETE==================================' + @nl + @DELETE  
PRINT + '-- =====UPDATE==================================' + @nl + @UPDATE  
PRINT + '-- =====SELECT==================================' + @nl + @SELECT  
PRINT + '-- =====EXISTS==================================' + @nl + @EXISTS  



FORMA DE USO
sp_generate NOMBRE_DE_TABLA  


Fuente: http://sviudes.blogspot.com/2009/11/generar-automaticamente-procedimientos.html

viernes, 12 de septiembre de 2014

Almacén de datos

Almacén de datos


Descripción de un Data Warehouse.
En el contexto de la informática, un almacén de datos (del inglés data warehouse) es una colección de datos orientada a un determinado ámbito (empresa, organización, etc.), integrado, no volátil y variable en el tiempo, que ayuda a la toma de decisiones en la entidad en la que se utiliza. Se trata, sobre todo, de un expediente completo de una organización, más allá de la información transaccional y operacional, almacenado en una base de datos diseñada para favorecer el análisis y la divulgación eficiente de datos (especialmente OLAPprocesamiento analítico en línea). El almacenamiento de los datos no debe usarse con datos de uso actual. Los almacenes de datos contienen a menudo grandes cantidades de información que se subdividen a veces en unidades lógicas más pequeñas dependiendo del subsistema de la entidad del que procedan o para el que sean necesario.

Definiciones de almacén de datos[editar]

Definición de Bill Inmon[editar]

Bill Inmon1 fue uno de los primeros autores en escribir sobre el tema de los almacenes de datos, define un data warehouse (almacén de datos) en términos de las características del repositorio de datos:
  • Orientado a temas.- Los datos en la base de datos están organizados de manera que todos los elementos de datos relativos al mismo evento u objeto del mundo real queden unidos entre sí.
  • Variante en el tiempo.- Los cambios producidos en los datos a lo largo del tiempo quedan registrados para que los informes que se puedan generar reflejen esas variaciones.
  • No volátil.- La información no se modifica ni se elimina, una vez almacenado un dato, éste se convierte en información de sólo lectura, y se mantiene para futuras consultas.
  • Integrado.- La base de datos contiene los datos de todos los sistemas operacionales de la organización, y dichos datos deben ser consistentes.
Inmon defiende una metodología descendente (top-down) a la hora de diseñar un almacén de datos, ya que de esta forma se considerarán mejor todos los datos corporativos. En esta metodología los Data marts se crearán después de haber terminado el data warehouse completo de la organización.

Definición de Ralph Kimball[editar]

Ralph Kimball2 es otro conocido autor en el tema de los data warehouse, define un almacén de datos como: "una copia de las transacciones de datos específicamente estructurada para la consulta y el análisis"[cita requerida]. También fue Kimball quien determinó que un data warehouse no era más que: "la unión de todos los Data marts de una entidad"[cita requerida]. Defiende por tanto una metodología ascendente (bottom-up) a la hora de diseñar un almacén de datos.

Una definición más amplia de almacén de datos[editar]

Las definiciones anteriores se centran en los datos en sí mismos. Sin embargo, los medios para obtener esos datos, para extraerlos, transformarlos y cargarlos, las técnicas para analizarlos y generar información, así como las diferentes formas para realizar la gestión de datos son componentes esenciales de un almacén de datos. Muchas referencias a un almacén de datos utilizan esta definición más amplia. Por lo tanto, en esta definición se incluyen herramientas para extraer, transformar y cargar datos, herramientas para el análisis (inteligencia empresarial) y herramientas para gestionar y recuperar los metadatos.

Función de un almacén de datos[editar]

En un almacén de datos lo que se quiere es contener datos que son necesarios o útiles para una organización, es decir, que se utiliza como un repositorio de datos para posteriormente transformarlos en información útil para el usuario. Un almacén de datos debe entregar la información correcta a la gente indicada en el momento óptimo y en el formato adecuado. El almacén de datos da respuesta a las necesidades de usuarios expertos, utilizando Sistemas de Soporte a Decisiones (DSS), Sistemas de información ejecutiva (EIS) o herramientas para hacer consultas o informes. Los usuarios finales pueden hacer fácilmente consultas sobre sus almacenes de datos sin tocar o afectar la operación del sistema.
En el funcionamiento de un almacén de datos son muy importantes las siguientes ideas:
  • Integración de los datos provenientes de bases de datos distribuidas por las diferentes unidades de la organización y que con frecuencia tendrán diferentes estructuras (fuentes heterogéneas). Se debe facilitar una descripción global y un análisis comprensivo de toda la organización en el almacén de datos.
  • Separación de los datos usados en operaciones diarias de los datos usados en el almacén de datos para los propósitos de divulgación, de ayuda en la toma de decisiones, para el análisis y para operaciones de control. Ambos tipos de datos no deben coincidir en la misma base de datos, ya que obedecen a objetivos muy distintos y podrían entorpecerse entre sí.
Periódicamente, se importan datos al almacén de datos de los distintos sistemas de planeamiento de recursos de la entidad (ERP) y de otros sistemas de software relacionados con el negocio para la transformación posterior. Es práctica común normalizar los datos antes de combinarlos en el almacén de datos mediante herramientas de extracción, transformación y carga (ETL). Estas herramientas leen los datos primarios (a menudo bases de datos OLTP de un negocio), realizan el proceso de transformación al almacén de datos (filtración, adaptación, cambios de formato, etc.) y escriben en el almacén.

Data marts[editar]

Los Data marts son subconjuntos de datos de un data warehouse para áreas específicas.
Entre las características de un data mart destacan:
  • Usuarios limitados.
  • Área específica.
  • Tiene un propósito específico.
  • Tiene una función de apoyo.

Cubos de información[editar]

Los cubos de información o cubos OLAP funcionan como los cubos de rompecabezas en los juegos, en el juego se trata de armar los colores y en el data warehouse se trata de organizar los datos por tablas o relaciones; los primeros (el juego) tienen 3 dimensiones, los cubos OLAP tienen un número indefinido de dimensiones, razón por la cual también reciben el nombre de hipercubos. Un cubo OLAP contendrá datos de una determinada variable que se desea analizar, proporcionando una vista lógica de los datos provistos por elsistema de información hacia el data warehouse, esta vista estará dispuesta según unas dimensiones y podrá contener información calculada. El análisis de los datos está basado en las dimensiones del hipercubo, por lo tanto, se trata de un análisis multidimensional.
A la información de un cubo puede acceder el ejecutivo mediante "tablas dinámicas" en una hoja de cálculo o a través de programas personalizados. Las tablas dinámicas le permiten manipular las vistas (cruces, filtrados, organización, totales) de la información con mucha facilidad. Las diferentes operaciones que se pueden realizar con cubos de información se producen con mucha rapidez. Llevando estos conceptos a un data warehouse, éste es una colección de datos que está formada por «dimensiones» y «variables», entendiendo como dimensiones a aquellos elementos que participan en el análisis y variables a los valores que se desean analizar.

Dimensiones[editar]

Las dimensiones de un cubo son atributos relativos a las variables, son las perspectivas de análisis de las variables (forman parte de la tabla de dimensiones). Son catálogos de información complementaria necesaria para la presentación de los datos a los usuarios, como por ejemplo: descripciones, nombres, zonas, rangos de tiempo, etc. Es decir, la información general complementaria a cada uno de los registros de la tabla de hechos.

Variables[editar]

También llamadas “indicadores de gestión”, son los datos que están siendo analizados. Forman parte de la tabla de hechos. Más formalmente, las variables representan algún aspecto cuantificable o medible de los objetos o eventos a analizar. Normalmente, las variables son representadas por valores detallados y numéricos para cada instancia del objeto o evento medido. En forma contraria, las dimensiones son atributos relativos a las variables, y son utilizadas para indexar, ordenar, agrupar o abreviar los valores de las mismas. Las dimensiones poseen una granularidad menor, tomando como valores un conjunto de elementos menor que el de las variables; ejemplos de dimensiones podrían ser: “productos”, “localidades” (o zonas), “el tiempo” (medido en díashorassemanas, etc.), ...

Ejemplos[editar]

Ejemplos de variables podrían ser:
  • Beneficios
  • Gastos
  • Ventas
  • etc.
Ejemplos de dimensiones podrían ser:
  • producto (diferentes tipos o denominaciones de productos)
  • localidades (o provincia, o regiones, o zonas geográficas)
  • tiempo (medido de diferentes maneras, por horas, por días, por meses, por años, ...)
  • tipo de cliente (casado/soltero, joven/adulto/anciano, ...)
  • etc.
Según lo anterior, podríamos construir un cubo de información sobre el índice de ventas (variable a estudiar) en función del producto vendido, la provincia, el mes del año y si el cliente está casado o soltero (dimensiones). Tendríamos un cubo de 4 dimensiones.

Elementos que integran un almacén de datos[editar]

Metadatos[editar]

Uno de los componentes más importantes de la arquitectura de un almacén de datos son los metadatos. Se define comúnmente como "datos acerca de los datos", en el sentido de que se trata de datos que describen cuál es la estructura de los datos que se van a almacenar y cómo se relacionan.
El metadato documenta, entre otras cosas, qué tablas existen en una base de datos, qué columnas posee cada una de las tablas y qué tipo de datos se pueden almacenar. Los datos son de interés para el usuario final, el metadato es de interés para los programas que tienen que manejar estos datos. Sin embargo, el rol que cumple el metadato en un entorno de almacén de datos es muy diferente al rol que cumple en los ambientes operacionales. En el ámbito de los data warehouse el metadato juega un papel fundamental, su función consiste en recoger todas las definiciones de la organización y el concepto de los datos en el almacén de datos, debe contener toda la información concerniente a:
  • Tablas
  • Columnas de tablas
  • Relaciones entre tablas
  • Jerarquías y Dimensiones de datos
  • Entidades y Relaciones

Funciones ETL (extracción, transformación y carga)[editar]

Los procesos de extraccióntransformación y carga (ETL) son importantes ya que son la forma en que los datos se guardan en un almacén de datos (o en cualquier base de datos). Implican las siguientes operaciones:
  • Extracción. Acción de obtener la información deseada a partir de los datos almacenados en fuentes externas.
  • Transformación. Cualquier operación realizada sobre los datos para que puedan ser cargados en el data warehouse o se puedan migrar de éste a otra base de datos.
  • Carga. Consiste en almacenar los datos en la base de datos final, por ejemplo el almacén de datos objetivo normal.

Middleware[editar]

Middleware es un término genérico que se utiliza para referirse a todo tipo de software de conectividad que ofrece servicios u operaciones que hacen posible el funcionamiento de aplicaciones distribuidas sobre plataformas heterogéneas. Estos servicios funcionan como una capa de abstracción de software distribuida, que se sitúa entre las capas de aplicaciones y las capas inferiores (sistema operativo y red). El middleware puede verse como una capa API, que sirve como base a los programadores para que puedan desarrollar aplicaciones que trabajen en diferentes entornos sin preocuparse de los protocolos de red y comunicaciones en que se ejecutarán. De esta manera se ofrece una mejor relación costo/rendimiento que pasa por el desarrollo de aplicaciones más complejas, en menos tiempo.
La función del middleware en el contexto de los data warehouse es la de asegurar la conectividad entre todos los componentes de la arquitectura de un almacén de datos.

Diseño de un almacén de datos[editar]

Para construir un Data Warehouse se necesitan herramientas para ayudar a la migración y a la transformación de los datos hacia el almacén. Una vez construido, se requieren medios para manejar grandes volúmenes de información. Se diseña su arquitectura dependiendo de la estructura interna de los datos del almacén y especialmente del tipo de consultas a realizar. Con este criterio los datos deben ser repartidos entre numerosos data marts. Para abordar un proyecto de data warehouse es necesario hacer un estudio de algunos temas generales de la organización o empresa, los cuales se describen a continuación:
  • Situación actual de partida.- Cualquier solución propuesta de data warehouse debe estar muy orientada por las necesidades del negocio y debe ser compatible con la arquitectura técnica existente y planeada de la compañía.
  • Tipo y características del negocio.- Es indispensable tener el conocimiento exacto sobre el tipo de negocios de la organización y el soporte que representa la información dentro de todo su proceso de toma de decisiones.
  • Entorno técnico.- Se debe incluir tanto el aspecto del hardware (mainframes, servidores, redes,...) así como aplicaciones y herramientas. Se dará énfasis a los Sistemas de soporte a decisiones (DSS), si existen en la actualidad, cómo operan, etc.
  • Expectativas de los usuarios.- Un proyecto de data warehouse no es únicamente un proyecto tecnológico, es una forma de vida de las organizaciones y como tal, tiene que contar con el apoyo de todos los usuarios y su convencimiento sobre su bondad.
  • Etapas de desarrollo.- Con el conocimiento previo, ya se entra en el desarrollo de un modelo conceptual para la construcción del data warehouse.
  • Prototipo.- Un prototipo es un esfuerzo designado a simular tanto como sea posible el producto final que será entregado a los usuarios.
  • Piloto.- El piloto de un data warehouse es el primero, o cada uno de los primeros resultados generados de forma iterativa que se harán para llegar a la construcción del producto final deseado.
  • Prueba del concepto tecnológico.- Es un paso opcional que se puede necesitar para determinar si la arquitectura especificada del data warehouse funcionará finalmente como se espera.

Almacén de datos especial[editar]

Almacén de datos especial es una colección de datos orientados al tema, integrados, no volátiles, variantes en el tiempo y que añaden la geografía de los datos, para la toma de decisiones. Sin embargo la componente geográfica no es un dato agregado, sino que es una dimensión o variable en la tecnología de la información, de tal manera que permita modelar todo el negocio como un ente holístico, y que a través de herramientas de procesamiento analítico en línea (OLAP), no solamente se posea un alto desempeño en consultas multidimensionales sino que adicionalmente se puedan visualizar espacialmente los resultados.
El almacén de datos especial forma parte de un extensivo Sistema de Información Geográfica para la toma de decisiones, éste al igual que los SIG, permiten que un gran número de usuarios accedan a información integrada, a diferencia de un simple almacén de datos que está orientado al tema, el Data warehouse especial adicionalmente es Geo-Relacional, es decir que en estructuras relacionales combina e integra los datos espaciales con los datos descriptivos. Actualmente es geo-objetos, esto es que los elementos geográficos se manifiestan como objetos con todas sus propiedades y comportamientos, y que adicionalmente están almacenados en una única base de datos Objeto-Relacional.
Los Data Warehouse Especiales son aplicaciones basadas en un alto desempeño de las bases de datos, que utilizan arquitecturas Cliente-Servidor para integrar diversos datos en tiempo real. Mientras los almacenes de datos trabajan con muchos tipos y dimensiones de datos, muchos de los cuales no referencian ubicación especial, a pesar de poseerla intrínsecamente, y sabiendo que un 80% de los datos poseen representación y ubicación en el espacio, en los Data warehouse especiales, la variable geográfica desempeña un papel importante en la base de información para la construcción del análisis, y de igual manera que para un Data warehouse, la variable tiempo es imprescindible en los análisis, para los Data warehouse especiales la variable geográfica debe ser almacenada directamente en ella.

Ventajas e inconvenientes de los almacenes de datos[editar]

Ventajas[editar]

Hay muchas ventajas por las que es recomendable usar un almacén de datos. Algunas de ellas son:
  • Los almacenes de datos hacen más fácil el acceso a una gran variedad de datos a los usuarios finales
  • Facilitan el funcionamiento de las aplicaciones de los sistemas de apoyo a la decisión tales como informes de tendencia, por ejemplo: obtener los ítems con la mayoría de las ventas en un área en particular dentro de los últimos dos años; informes de excepción, informes que muestran los resultados reales frente a los objetivos planteados a priori.
  • Los almacenes de datos pueden trabajar en conjunto y, por lo tanto, aumentar el valor operacional de las aplicaciones empresariales, en especial la gestión de relaciones con clientes.

Inconvenientes[editar]

Utilizar almacenes de datos también plantea algunos inconvenientes, algunos de ellos son:
  • A lo largo de su vida los almacenes de datos pueden suponer altos costos. El almacén de datos no suele ser estático. Los costos de mantenimiento son elevados.
  • Los almacenes de datos se pueden quedar obsoletos relativamente pronto.
  • A veces, ante una petición de información estos devuelven una información subóptima, que también supone una pérdida para la organización.
  • A menudo existe una delgada línea entre los almacenes de datos y los sistemas operacionales. Hay que determinar qué funcionalidades de estos se pueden aprovechar y cuáles se deben implementar en el data warehouse, resultaría costoso implementar operaciones no necesarias o dejar de implementar alguna que sí vaya a necesitarse.