Author Photo
Por Ryan Boyd, Developer Advocate para Cloud Data Services

Negocios y desarrolladores están utilizando BigQuery para resolver una gran variedad de casos de uso – desde optimizar campañas publicitarias, hasta encontrar faltantes en el inventario o comprender el comportamiento de sus clientes. Para acomodar la variedad de casos de uso BigQuery tenía que ser flexible, tanto para el desarrollador que integra aplicaciones utilizando el API, como para el analista que ejecuta búsquedas específicas. Hoy hacemos BigQuery aún más flexible añadiendo búsquedas por lote y un conector para Microsoft Excel.
Author Photo
Por Ryan Boyd, Developer Advocate para Cloud Data Services

Negocios y desarrolladores están utilizando BigQuery para resolver una gran variedad de casos de uso – desde optimizar campañas publicitarias, hasta encontrar faltantes en el inventario o comprender el comportamiento de sus clientes. Para acomodar la variedad de casos de uso BigQuery tenía que ser flexible, tanto para el desarrollador que integra aplicaciones utilizando el API, como para el analista que ejecuta búsquedas específicas. Hoy hacemos BigQuery aún más flexible añadiendo búsquedas por lote y un conector para Microsoft Excel.

Búsquedas prioritarias por lote

BigQuery fue diseñado para analizar de manera iterativa y ad-hoc millones o miles de millones de renglones de datos. Cuando te echas un clavado en tus datos para obtener mayor entendimiento de éstos, quieres que tus búsquedas corran en segundos, no en minutos o en horas. Otras veces, sin embargo, nuestros clientes no necesitan estas respuestas rápidas cuando están ejecutando trabajos nocturnos o actualizando tableros de control o reportes, pero quieren utilizar la misma tecnología BigQuery y sus conjuntos de datos para realizar estas búsquedas. Por eso añadimos la posibilidad de adquirir búsquedas por lote y permitir que los desarrolladores interesados puedan ejecutarlas a un costo sensiblemente más bajo.

A continuación te mostramos como asignar la prioridad de ejecución por lote (batch) cuando realizas una nueva búsqueda, utilizando la biblioteca cliente del API de Google en Java:

    Job job = new Job();
    JobConfiguration config = new JobConfiguration();
    JobConfigurationQuery queryConfig = new JobConfigurationQuery();
    config.setQuery(queryConfig);

    job.setConfiguration(config);
    queryConfig.setQuery(querySql);
    queryConfig.setPriority("BATCH");

    com.google.api.services.bigquery.Bigquery.Jobs.Insert insert =
     bigquery.jobs().insert(projectId, job);

Las búsquedas por lote se ejecutan entre 30 minutos y 3 horas después de enviarse. Para mayor información revisa nuestra Guía para Desarrolladores.

Conector para Excel de BigQuery

Las hojas de cálculo son populares entre analistas, ejecutivos y desarrolladores para explorar datos. El año pasado les dimos la posibilidad de utilizar Google Spreadsheets para ejecutar búsquedas de BigQuery por medio de la integración con Google Apps Script. Hoy lanzamos el conector para Excel de BigQuery, que permite a usuarios de Microsoft Excel hacer lo mismo con su funcionalidad de 'Datos Externos'. Una vez que los resultados de BigQuery están en Excel, puedes fácilmente crear tablas pivote, gráficas o integrarlos con datos de otras fuentes. Si estás interesado, ¡puedes probarlo ahora mismo!

Dinos que opinas de las nuevas características y que más te gustaría ver en la ruta de desarrollo en Google+. También tendremos horas de oficina este viernes a las 10 AM PDT en Google Developers Live para hablar de estas nuevas características y responder tus preguntas de BigQuery.

Microsoft y Excel son marcas registradas de Microsoft Corporation


Ryan Boyd es un Developer Advocate, enfocado en servicios de datos en la nube. Ha estado en Google los últimos 6 años y previamente ayudó a construir el ecosistema Google Apps ISV. Publicó su primer libro con O'Reilly, "Getting Started with OAuth 2.0".

Versión original publicada por Scott Knaster, Editor
Publicado en español por Francisco Solsona, Google Developer Program Manager

Si hubiera un evento olímpico de escribir código, estamos seguros que el ganador(a) de la medalla de oro se encuentra en nuestra comunidad de desarrolladores de App Engine. Por eso liberamos una nueva versión para que puedas perfeccionar tus habilidades y te prepares, por si acaso, para Rio en el 2016.
Si hubiera un evento olímpico de escribir código, estamos seguros que el ganador(a) de la medalla de oro se encuentra en nuestra comunidad de desarrolladores de App Engine. Por eso liberamos una nueva versión para que puedas perfeccionar tus habilidades y te prepares, por si acaso, para Rio en el 2016.

App Admin
  • Descarga un reporte de uso - Ahora puedes descargar los reportes de uso de tu aplicación de los últimos 90 días, como un archivo CSV.
  • Espacios de nombres en el visor de Memcache - La Consola de Administración ahora soporta recuperar valores memcache que están almacenados en un espacio de nombres distinto al de omisión.

Python

  • Actualizaciones en Appstats - Se agregaron algunas cosas en appstats con la versión 1.7.1. Puedes acceder a información de costo RPC en appstats y también añadimos una consola interactiva que te permite disparar y examinar una llamada RPC, para depurar en tiempo real.
  • Soporte para PyCrypto 2.6 - Incluye además, como opción para bibliotecas de terceros en Python 2.7, la última versión de PyCrypto.

Java
DataNucleus App Engine Plugin 2.1.0 - Nos complace anunciar que con la última actualización soportamos completamente la V2 del plugin DataNucleus. V2 añade soporte para JPA 2 y para JDO 3, así como una buena cantidad de errores arreglados, aquí puedes encontrar la lista completa.

Appstats Analytics Trusted Tester
Buscamos Trusted Testers de Python y Java para probar una nueva herramienta de visualización interactiva que permite descubrir problemas y afinar el rendimiento de tu aplicación. Si estás interesado en probar esta nueva herramienta, por favor registrate aquí.

URLFetch
Hemos cambiado la manera en que URLFetch maneja encabezados múltiples en respuesta a uno de los temas públicos. Cuando una respuesta contiene el mismo encabezado varias veces, regresamos los valores en una lista.

El API de conversión será terminado

El API experimental de conversión será terminado en la versión a liberar en noviembre. Por favor exploren mecanismos alternativos de conversión de documentos.

Puedes encontrar la lista completa de características y corrección de errores en 1.7.1 en las notas de la versión (Java, Go, Python). Para preguntas y respuestas de programación con App Engine búscanos en Stack Overflow y, para discusión general y retroalimentación, en nuestro grupo de Google.

Atención expertos de App Engine: ¿Te interesa ayudar a nuevos clientes negocios y empresas a ser exitosos con la Plataforma de Nube de Google? Entonces checa el puesto publicado para Arquitectos de Soluciones. También estamos buscando escritores técnicos en Mountain View y San Francisco para documentar nuevas y frescas características de App Engine, así como entablar un dialogo con la comunidad para incrementar el impacto de las ofertas de Google en la nube.


Versión original.
Publicado en español por Francisco Solsona, Google Developer Program Manager








Análisis detallado de PredictServlet

Vamos a iniciar el análisis detallado de PredictServlet. En primer lugar como muestra el Código 1 obtenemos las credenciales del datastore de Google App Engine. (Este paso es porque en la definición de diseño de determinó almacenar credenciales de esta forma)

En este artículo analizaremos la utilización de Prediction API en GAE (Google App Engine). Para esta actividad de análisis, utilizaremos como base un desarrollo de código fuente abierto llamado tryprediction.


La solución mostrada propone la utilización Prediction API para java, utilizando 4 servlets y un archivo index.jsp que en conjunto permiten la puesta en marcha de la solución de ejemplo. El objetivo del desarrollo propone una manera flexible de declarar modelos predictivos y poder dinámicamente personalizar los elementos en la interfaz de usuario que permitan interactuar con eso modelos, finalmente hacerlos útiles muy rápidamente.
El ejemplo nos propone introducir conceptos de evolución e innovación de soluciones tecnológicas haciendo uso de la potencia de las APIs de Google.
Veamos la estructura básica que propone la solución en la Fig. 1.


Fig. 1 Estructura solución tecnológica

Un detalle un tanto más profundo de la Fig. 1 nos muestra la estructura de la solución tecnológica. La ubicación del código fuente de cada uno de los servlets se encuentra en src/main/java. Tenemos que tener en cuenta la ubicación de la webapp en src/main/webapp. En la webapp tendremos la hojas de estilo necesarias, imágenes, elementos de javascript y algunos elementos personalizados de importancia dentro de la carpeta rc. En esta carpeta están los archivos que permiten la configuración de los modelos que ejecutaremos con Prediction API y su escenario de autenticación. Recuerden que Prediction API requiere este modelo de autenticación, que debemos configurar desde la Google  API console.  

Elementos programáticos principales:
- AuthReturnServlet.java
- IndexServlet.java
- PredictServlet.java
- ResetServlet.java
- index.jsp



Fig. 2 - Clases que forman parte de la solución presentada

En la Fig. 2 se puede observar el diagrama de clases de la solución propuesta. Para la simplicidad del análisis vamos a presentar la arquitectura de la solución y vamos a analizar en detalle el PredictServlet.

También es interesante analizar el nivel de relación que poseen los elementos de la solución que estaremos desarrollando como muestra la Fig. 3. En esta oportunidad vamos a prestar especial atención a los dos servlets que hacen el trabajo con Prediction API.

- IndexServlet.java
- PredictServlet.java

Fig. 3 - Visualización de relaciones entre los elementos de la solución

Análisis detallado de PredictServlet

Vamos a iniciar el análisis detallado de PredictServlet. En primer lugar como muestra el Código 1 obtenemos las credenciales del datastore de Google App Engine. (Este paso es porque en la definición de diseño de determinó almacenar credenciales de esta forma)

   try {
     // Devolver las  credenciales desde el datastore de App Engine.
     DatastoreService datastore = 
     DatastoreServiceFactory.getDatastoreService();
     Key credsKey = KeyFactory.createKey("Credentials", "Credentials");
     credentials = datastore.get(credsKey);
      } catch (EntityNotFoundException ex) {
     // Si no se pueden obtener las credenciales enviamos una exception al cliente javascript.
     response.setContentType("text/html");
     response.getWriter().println("exception: " + ex.getMessage());
   }
Código 1 - Accediendo al datastore para obtener las credenciales

Luego de obtener estos elementos de autenticación el PredictServlet realiza diversas funciones de soporte para acceder a la información de los modelos que deseamos poner al alcance del usuario. Esto se realiza accediendo a model.json. Obtenida esta información no pasamos a interactuar directamente con Prediction API como muestra el Código 2 para iniciar las tareas de autenticación en la integración de la API.




  // Establecer el acceso OAuth 2.0 
GoogleAccessProtectedResource requestInitializer = new GoogleAccessProtectedResource(tokens.accessToken,httpTransport, jsonFactory, clientId, clientSecret, tokens.refreshToken);
Código 2 - Autenticando a Prediction API

Para cerrar nuestro análisis el Código 3 propone la interacción de predicción concreta de nuestra solución.
La clave del Código 3 es la línea que invoca al método trainedmodels().predict.



  // Finalmente completar los datos de predición llamada a la API  and trabajar los resultados en la Javascript AJAX cliente
 Prediction prediction = new Prediction(httpTransport, requestInitializer, jsonFactory);                                Input input = new Input();                                                                                                                InputInput inputInput = new InputInput();                                                           inputInput.setCsvInstance(params);                                                                          input.setInput(inputInput);                                                                                                                    Output output = prediction.trainedmodels().predict(modelId, input).execute(); 
Código 3 - Ejecutando la predicción en Prediction API

Para realizar el despliegue de la solución en la infraestructura de Google App Engine debemos tener configurada nuestra aplicación en la consola de administración de Google App Engine. La Fig. 4 muestra una representación de la actividad en la consola de Google App Engine.

Fig. 4 - Consola de administracion Google App Engine

Com muestra la Fig. 4 tenemos la aplicación “appdemoutn” en donde vamos a realizar una nueva versión en un nuevo despliegue.

Fig. 5 - Aplicación final de ejemplo

La Fig. 5 muestra el resultado de nuestra solución, en donde cada modelo Prediction se puede seleccionar y dependiendo de esta selección, se personalizan los elementos de la interfaz de usuario que requiere el modelo para desempeñar la actividad. (Como ejemplo si nuestro modelo requiere solamente una caja de texto para ingresar la consulta es lo que se propone en la interfaz de usuario, si se requieren otros elementos se personaliza según ese criterio). Además la solución propone la valuación de Prediction API mediante un gráfico utilizando la integración de Google Chart Tools, de esta forma poder visualizar de una forma más flexible la valoración.

Espero que puedan hacer uso de estas herramientas, integrar elementos distintivos y  evolucionar sus aplicaciones utilizando todo el potencial que brinda Google con sus APIs.


Nicolás Bortolotti   Perfil | Twitter | Blog

Nicolás es director de relaciones para desarrolladores en latinoamérica región sur para Google. El ha desarrollado comunidades académicas y de investigación en varios países de Latinoamérica sobre la plataforma de desarrollo web y mobile de Google. Además Nicolas es profesor universitario, donde trabaja fuertemente en arquitecturas de software, ambientes emergentes e innovación en modelos de ingeniería de software

Les dejo el video de implementación con la demostración paso a paso:





Les dejo el análisis del código fuente central de la solución presentada:




Notas del Articulo:
Este articulo corresponde a los contenidos expuestos en la sesión de Developers Live para desarrolladores en español. Innovación en aplicaciones utilizando Prediction API - Parte 2.
Nivel: Intermedio.

Referencias

Google API Java Client
http://code.google.com/p/google-api-java-client/


Simple Logging Facade for Java (SLF4J)
http://www.slf4j.org/


TryPrediction (Python and Java)
http://code.google.com/p/try-prediction/


Google Developers
https://developers.google.com/

Prediction API
https://developers.google.com/prediction/

Google Char Tools
https://developers.google.com/chart/

Actualmente el desarrollo de soluciones está mostrando un ecosistema de aplicaciones muy interesante que favorecen la utilización creciente de servicios tecnológicos, esto genera un efecto social en donde la utilidad, la velocidad y simplicidad juega un rol fundamental.
Actualmente el desarrollo de soluciones está mostrando un ecosistema de aplicaciones muy interesante que favorecen la utilización creciente de servicios tecnológicos, esto genera un efecto social en donde la utilidad, la velocidad y simplicidad juega un rol fundamental.

Actualmente existen gran cantidad de soluciones en el ambiente de software que facilitan el desarrollo innovador de nuevas aplicaciones. Pensando en la evolución de aplicaciones y en la creación de nuevas soluciones tecnológicas, en el día de hoy analizaremos la utilidad de Prediction API.

Actualmente Prediction API permite trabajar en dos grandes ambientes, regresión y categorización numérica.

En el ejemplo del hoy vamos a utilizar el escenario de categorización numérica. El desafío consiste en utilizar un conjunto de datos en donde se expresen emociones sociales, extraídas aleatoriamente de la realidad actual.

Modelo:
"Tipo de emoción", "Texto real de la emoción extraído de la redes sociales"

Ejemplo:
“Felicidad momentánea”, “Esto que me ocurre es fantástico es la mejora clase de mi vida. Me siento la persona más afortunada del mundo”
“Miedo repentino”, “Varios hurtos ocurrieron este día cerca de mi domicilio, estoy atemorizado”

Estos datos los vamos a introducir mediante Cloud Storage para generar el modelo en Prediction API y poder analizar el funcionamiento predictivo de la solución.

Primeramente vamos a recorrer las siguientes soluciones tecnológicas que nos provee Google:

Primeros pasos en la configuración de un modelo en Prediction API

Fig.1 Consola de administración de APIs

El primer paso que debemos realizar al momento de utilizar Prediction API o cualquiera de las APIs propuestas por Google, es ingresar nuestro proyecto en la Google API Console como se muestra en la Fig.1. En este panel tenemos diversas funcionalidades de administración, como por ejemplo administrar una serie de integrantes por proyecto, análisis de utilización de la API, cuotas y fundamentalmente la configuración de acceso a la API.

Fig. 2 Configuración de acceso a las APIs

Para la utilización de Prediction API en forma estándar desde un cliente sin utilizar el modo hosteado debemos configurar la opción de seguridad OAuth 2.0. En la Fig.2 vemos las opciones de acceso a la API que deben ser utilizadas en el caso que se intente acceder a la funcionalidad desde otra solución tecnológica que no sea la API explorer.

Fig. 3 Panel de administración de Google Cloud Storage

Finalmente es necesario tener los datos disponibles en Cloud Storage, para esta actividad vamos a utilizar el siguiente conjunto de datos. (Se muestra Sensaciones.csv en la Fig.3)

Con el proyecto generado correctamente y los datos cargados en Cloud Storage vamos a pasar a la actividad de generación y utilización del modelo en Prediction API mediante Google API Explorer.

Crear y utilizar un modelo en prediction API

Para esta actividad vamos a utilizar API explorer en donde vamos a generar un nuevo modelo basado en los datos almacenados en Cloud Storage.

Fig. 4 Google API Explorer para la versión de Prediction API 1.5

Al momento de utilizar la APIs Explorer tenemos la opción de seleccionar los servicios disponibles en sus versiones finales o acceder a todas las versiones actuales. Como se observa en la Fig. 4 vamos a utilizar la v1.5 de Prediction API. Tenemos que tener en cuenta que para hacer uso de la funcionalidad, debemos realizar la autenticación mediante OAuth 2.0 que se encuentra disponible en el vértice superior derecho que muestra la Fig. 4.

Para esta actividad utilizaremos la funcionalidad de insert para insertar un modelo y la funcionalidad de predict para predecir en base a nuestro modelo propuesto.

Fig. 5 Insertando un modelo en Prediction API

Como muestra la Fig. 5 utilizando la función insert generaremos un nuevo modelo donde debemos especificar una identificación Id y una dirección representada por storageDataLocation, que describe la ubicación del conjunto de datos en Cloud Storage.

Fig. 6 Consultas al modelo en Prediction API

Solo nos resta empezar a utilizar el modelo mediante consultas como podemos observar en la Fig.6. Utilizamos la función predict, especificamos el modelo que queremos consultar en el campo Id y luego especificamos el texto de la emoción para que Prediction API pueda predecir en cada instancia sobre la emoción que estamos trabajando.

Nicolás Bortolotti   Perfil | Twitter | Blog

Nicolás es director de relaciones para desarrolladores en latinoamérica región sur para Google. El ha desarrollado comunidades académicas y de investigación en varios países de Latinoamérica sobre la plataforma de desarrollo web y mobile de Google. Además Nicolas es profesor universitario, donde trabaja fuertemente en arquitecturas de software, ambientes emergentes e innovación en modelos de ingeniería de software
 
Les dejo el video de implementación con la demostración paso a paso:


Notas del Articulo:
Este articulo corresponde a los contenidos expuestos en la sesión de Developers Live para desarrolladores en español. Innovación en aplicaciones utilizando Prediction API - Parte 1.
Nivel: inicial.