Compila una canalización de datos sin servidores: de IoT a Analytics

1. Descripción general/Introducción

Si bien las aplicaciones de varios niveles que constan de un servidor web, un servidor de aplicaciones y una base de datos son fundamentales para el desarrollo web y son el punto de partida de muchos sitios web, el éxito a menudo genera desafíos relacionados con la escalabilidad, la integración y la agilidad. Por ejemplo, ¿cómo se pueden controlar los datos en tiempo real y cómo se pueden distribuir a varios sistemas comerciales clave? Estos problemas, junto con las exigencias de las aplicaciones a escala de Internet, impulsaron la necesidad de un sistema de mensajería distribuido y dieron lugar a un patrón arquitectónico de uso de canalizaciones de datos para lograr sistemas resilientes en tiempo real. Por lo tanto, comprender cómo publicar datos en tiempo real en un sistema de mensajería distribuido y, luego, cómo compilar una canalización de datos son habilidades fundamentales tanto para los desarrolladores como para los arquitectos.

Qué compilarás

En este codelab, crearás una canalización de datos meteorológicos que comienza con un dispositivo de Internet de las cosas (IoT), utiliza una cola de mensajes para recibir y entregar datos, aprovecha una función sin servidor para trasladar los datos a un almacén de datos y, luego, crea un panel que muestra la información. Se usará una Raspberry Pi con un sensor meteorológico como dispositivo IoT, y varios componentes de Google Cloud Platform formarán la canalización de datos. Si bien es beneficioso, armar la Raspberry Pi es una parte opcional de este codelab, y los datos meteorológicos de transmisión se pueden reemplazar por una secuencia de comandos.

79cd6c68e83f7fea.png

Después de completar los pasos de este codelab, tendrás una canalización de transmisión de datos que alimentará un panel en el que se mostrarán la temperatura, la humedad, el punto de rocío y la presión atmosférica.

e28ca9ea4abb1457.png

Qué aprenderás

  • Cómo usar Google Pub/Sub
  • Cómo implementar una función de Google Cloud
  • Cómo aprovechar Google BigQuery
  • Cómo crear un panel con Google Data Studio
  • Además, si desarrollas el sensor de IoT, también aprenderás a utilizar el SDK de Google Cloud y a proteger las llamadas de acceso remoto a Google Cloud Platform.

Requisitos

  • Una cuenta de Google Cloud Platform Los usuarios nuevos de Google Cloud Platform son aptos para obtener una prueba gratuita de USD 300.

Si deseas compilar la parte del sensor de IoT de este codelab en lugar de aprovechar los datos de muestra y una secuencia de comandos, también necesitarás lo siguiente ( que se puede pedir como un kit completo o como partes individuales aquí):

  • Raspberry Pi Zero W con fuente de alimentación, tarjeta de memoria SD y carcasa
  • Lector de tarjetas USB
  • Hub USB (para conectar un teclado y un mouse al único puerto USB de la Raspberry Pi)
  • Cables de placa de pruebas hembra a hembra
  • Clavijas de martillo GPIO
  • Sensor BME280
  • Soldador con soldadura

Además, se supone que tienes acceso a un monitor de computadora o a una TV con entrada HDMI, un cable HDMI, un teclado y un mouse.

2. Cómo prepararte

Configuración del entorno de autoaprendizaje

Si aún no tienes una Cuenta de Google (Gmail o G Suite), debes crear una. Independientemente de si ya tienes una Cuenta de Google o no, asegúrate de aprovechar la prueba gratuita de USD 300.

Accede a Google Cloud Platform Console ( console.cloud.google.com). Puedes usar el proyecto predeterminado ("Mi primer proyecto") para este lab o crear uno nuevo. Si quieres crear un proyecto nuevo, puedes usar la página Administrar recursos. El ID del proyecto debe ser un nombre único en todos los proyectos de Google Cloud (el que se muestra a continuación ya está en uso y no funcionará). Toma nota del ID de tu proyecto (es decir, Tu ID del proyecto será _____) ya que lo necesitarás más adelante.

f414a63d955621a7.png

3415e861c09cd06a.png

Ejecutar este codelab no debería costar más que unos pocos dólares, pero su costo podría aumentar si decides usar más recursos o si los dejas en ejecución. Asegúrate de revisar la sección Limpieza al final del codelab.

3. Crea una tabla de BigQuery

BigQuery es un almacén de datos empresarial sin servidores, altamente escalable y de bajo costo, y será una opción ideal para almacenar los datos que se transmiten desde los dispositivos de IoT, al mismo tiempo que permite que un panel de estadísticas consulte la información.

Creemos una tabla que contendrá todos los datos meteorológicos de IoT. Selecciona BigQuery en la consola de Cloud. Se abrirá BigQuery en una ventana nueva (no cierres la ventana original, ya que deberás acceder a ella de nuevo).

12a838f78a10144a.png

Haz clic en el ícono de flecha hacia abajo que está junto al nombre de tu proyecto y, luego, selecciona "Crear nuevo conjunto de datos".

27616683b64ce34a.png

Ingresa "weatherData" para el conjunto de datos, selecciona una ubicación en la que se almacenará y haz clic en "Aceptar".

62cfcbd1add830ea.png

Haz clic en el signo "+" junto a tu conjunto de datos para crear una tabla nueva.

3d7bff6f9843fa3c.png

En Source Data, selecciona Create empty table. En Nombre de la tabla de destino, ingresa weatherDataTable. En Esquema, haz clic en el botón Agregar campo hasta que haya un total de 9 campos. Completa los campos como se muestra a continuación y asegúrate de seleccionar el Tipo adecuado para cada campo. Cuando todo esté completo, haz clic en el botón Crear tabla.

eef352614a5696a7.png

Deberías ver un resultado como este…

7d10e5ab8c6d6a0d.png

Ahora tienes un almacén de datos configurado para recibir tus datos meteorológicos.

4. Crea un tema de Pub/Sub

Cloud Pub/Sub es una base sencilla, confiable y escalable para el análisis de flujos y los sistemas de computación basados en eventos. Como resultado, es perfecto para controlar los mensajes de IoT entrantes y, luego, permitir que los sistemas posteriores los procesen.

Si aún estás en la ventana de BigQuery, vuelve a la consola de Cloud. Si cerraste Cloud Console, ve a https://console.cloud.google.com.

En la consola de Cloud, selecciona Pub/Sub y, luego, Temas.

331ad71e8a1ea7b.png

Si ves un mensaje para habilitar la API, haz clic en el botón Habilitar API.

9f6fca9dc8684801.png

Haz clic en el botón Crear un tema.

643670164e9fae12.png

Ingresa "weatherdata" como nombre del tema y haz clic en Crear.

d7b049bc66a34db6.png

Deberías ver el tema recién creado.

7c385759f65a1031.png

Ahora tienes un tema de Pub/Sub para publicar mensajes de IoT y permitir que otros procesos accedan a esos mensajes.

Publicación segura en el tema

Si planeas publicar mensajes en el tema de Pub/Sub desde recursos fuera de tu consola de Google Cloud (p.ej., un sensor de IoT), será necesario controlar el acceso de forma más estricta con una cuenta de servicio y garantizar la seguridad de la conexión creando un certificado de confianza.

En la consola de Cloud, selecciona IAM y administración y, luego, Cuentas de servicio.

8e2f8a1428d0feca.png

Haz clic en el botón Crear cuenta de servicio.

60892b564e0ac140.png

En el menú desplegable Rol, selecciona el rol Publicador de Pub/Sub.

31f8c944af11270e.png

Escribe un nombre para la cuenta de servicio (iotWeatherPublisher), marca la casilla de verificación Furnish a new private key, asegúrate de que el tipo de clave esté configurado como JSON y haz clic en "Crear".

7e3f9d7e56a44796.png

La llave de seguridad se descargará automáticamente. Solo hay una llave, por lo que es importante no perderla. Haga clic en Cerrar.

60a7da32dd85ba73.png

Deberías ver que se creó una cuenta de servicio y que hay un ID de clave asociado a ella.

b25f6f5629fe8fd7.png

Para acceder fácilmente a la clave más adelante, la almacenaremos en Google Cloud Storage. En la consola de Cloud, selecciona Storage y, luego, Browser.

c4414fe61be320a9.png

Haz clic en el botón Crear bucket.

cde91311b267fc65.png

Elige un nombre para el bucket de almacenamiento (debe ser un nombre único a nivel global en todo Google Cloud) y haz clic en el botón Crear.

28c10e41b401f479.png

Ubica la llave de seguridad que se descargó automáticamente y arrástrala y suéltala en el bucket de almacenamiento o súbela a él.

a0f6d069d42cec4b.png

Una vez que se complete la carga de la clave, debería aparecer en el navegador de Cloud Storage.

55b25c8b9d73ec19.png

Anota el nombre del bucket de almacenamiento y el nombre del archivo de la clave de seguridad para usarlos más adelante.

5. Crea una función de Cloud Functions

La computación en la nube ha hecho posible modelos de computación completamente sin servidores en los que la lógica se puede iniciar a pedido en respuesta a eventos que se originan en cualquier lugar. En este lab, se iniciará una Cloud Function cada vez que se publique un mensaje en el tema del clima, se leerá el mensaje y, luego, se almacenará en BigQuery.

En la consola de Cloud, selecciona Cloud Functions.

a14ac2e4f03bf831.png

Si ves un mensaje de la API, haz clic en el botón Habilitar API.

40ba0a08430e0e8a.png

Haz clic en el botón Crear función.

5d82d8faeffa55bf.png

En el campo Nombre, escribe function-weatherPubSubToBQ. En Activador, selecciona Tema de Cloud Pub/Sub y, en el menú desplegable Tema, selecciona weatherdata. Para el código fuente, selecciona Editor directo. En la pestaña index.js, pega el siguiente código sobre el que se encuentra allí para comenzar. Asegúrate de cambiar las constantes para projectId, datasetId y tableId de modo que se ajusten a tu entorno.

/**
 * Background Cloud Function to be triggered by PubSub.
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.subscribe = function (event, callback) {
  const BigQuery = require('@google-cloud/bigquery');
  const projectId = "myProject"; //Enter your project ID here
  const datasetId = "myDataset"; //Enter your BigQuery dataset name here
  const tableId = "myTable"; //Enter your BigQuery table name here -- make sure it is setup correctly
  const PubSubMessage = event.data;
  // Incoming data is in JSON format
  const incomingData = PubSubMessage.data ? Buffer.from(PubSubMessage.data, 'base64').toString() : "{'sensorID':'na','timecollected':'1/1/1970 00:00:00','zipcode':'00000','latitude':'0.0','longitude':'0.0','temperature':'-273','humidity':'-1','dewpoint':'-273','pressure':'0'}";
  const jsonData = JSON.parse(incomingData);
  var rows = [jsonData];

  console.log(`Uploading data: ${JSON.stringify(rows)}`);

  // Instantiates a client
  const bigquery = BigQuery({
    projectId: projectId
  });

  // Inserts data into a table
  bigquery
    .dataset(datasetId)
    .table(tableId)
    .insert(rows)
    .then((foundErrors) => {
      rows.forEach((row) => console.log('Inserted: ', row));

      if (foundErrors && foundErrors.insertErrors != undefined) {
        foundErrors.forEach((err) => {
            console.log('Error: ', err);
        })
      }
    })
    .catch((err) => {
      console.error('ERROR:', err);
    });
  // [END bigquery_insert_stream]


  callback();
};

En la pestaña package.json, pega el siguiente código sobre el código de marcador de posición que se encuentra allí.

{
  "name": "function-weatherPubSubToBQ",
  "version": "0.0.1",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google Inc.",
  "dependencies": {
    "@google-cloud/bigquery": "^0.9.6"
  }
}

Si la función que se ejecutará está configurada como "HelloWorld", cámbiala a "subscribe". Hacer clic en el botón Crear

3266d5268980a4db.png

Tu función tardará aproximadamente 2 minutos en mostrar que se implementó.

26f45854948426d0.png

¡Felicitaciones! Acabas de conectar Pub/Sub a BigQuery a través de Cloud Functions.

6. Configura el hardware de IoT (opcional)

Cómo ensamblar la Raspberry Pi y el sensor

Si hay más de 7 fijaciones, reduce el encabezado a solo 7. Suelda los pines del conector a la placa del sensor.

a162e24426118c97.png

Instala con cuidado los pines de cabezal del martillo en la Raspberry Pi.

a3a697907fe3c9a9.png

Formatea la tarjeta SD y, luego, instala el instalador de NOOBS (New Out Of Box Software). Para ello, sigue los pasos que se indican aquí. Inserta la tarjeta SD en la Raspberry Pi y colócala en su carcasa.

1e4e2459cd3333ec.png

Usa los cables de la placa de pruebas para conectar el sensor a la Raspberry Pi según el siguiente diagrama.

392c2a9c85187094.png

Pin de Raspberry Pi

Conexión del sensor

Pin 1 (3.3 V)

VIN

Pin 3 (CPIO2)

SDI

Pin 5 (GPIO3)

SCK

Pin 9 (tierra)

GND

44322e38d467d66a.png

Conecta el monitor (con el conector mini-HDMI), el teclado o mouse (con el concentrador USB) y, por último, el adaptador de alimentación.

Configura la Raspberry Pi y el sensor

Una vez que se inicie Raspberry Pi, selecciona Raspbian como el sistema operativo deseado, asegúrate de que el idioma sea el correcto y, luego, haz clic en Install (ícono de disco duro en la parte superior izquierda de la ventana).

a16f0da19b93126.png

Haz clic en el ícono de Wi-Fi (en la parte superior derecha de la pantalla) y selecciona una red. Si es una red protegida, ingresa la contraseña (clave precompartida).

17f380b2d41751a8.png

Haz clic en el ícono de frambuesa (en la parte superior izquierda de la pantalla), selecciona Preferences y, luego, Raspberry Pi Configuration. En la pestaña Interfaces, habilita I2C. En la pestaña Localización, establece la configuración regional y la zona horaria. Después de configurar la zona horaria, permite que se reinicie la Raspberry Pi.

14741a77fccdb7e7.png

Una vez que se complete el reinicio, haz clic en el ícono de Terminal para abrir una ventana de terminal.

9df6f228f6a31601.png

Escribe el siguiente comando para asegurarte de que el sensor esté conectado correctamente.

  sudo i2cdetect -y 1

El resultado debería verse así. Asegúrate de que diga 77.

cd35cd97bee8085a.png

Instala el SDK de Google Cloud

Para aprovechar las herramientas de la plataforma de Google Cloud, se deberá instalar el SDK de Google Cloud en la Raspberry Pi. El SDK incluye las herramientas necesarias para administrar y aprovechar Google Cloud Platform, y está disponible para varios lenguajes de programación.

Abre una ventana de la terminal en la Raspberry Pi si aún no está abierta y establece una variable de entorno que coincida con la versión del SDK del sistema operativo en la Raspberry Pi.

  export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

Ahora agrega la ubicación en la que se almacenan los paquetes del SDK de Google Cloud para que las herramientas de instalación sepan dónde buscar cuando se les solicite que instalen el SDK.

  echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" |  sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

Agrega la clave pública del repositorio de paquetes de Google para que la Raspberry Pi verifique la seguridad y confíe en el contenido durante la instalación.

  curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

Asegúrate de que todo el software de la Raspberry Pi esté actualizado y, luego, instala el SDK de Google Cloud principal.

  sudo apt-get update && sudo apt-get install google-cloud-sdk

Cuando aparezca el mensaje “Do you want to continue?”, presiona Intro.

Instala el paquete tendo con el administrador de paquetes de Python. Este paquete se usa para verificar si una secuencia de comandos se ejecuta más de una vez y se instala para su aplicación en la secuencia de comandos del clima.

  pip install tendo

Asegúrate de que los paquetes de Google Cloud Pub/Sub y OAuth2 para Python estén instalados y actualizados con el administrador de paquetes de Python.

  sudo pip install --upgrade google-cloud-pubsub
  sudo pip install --upgrade oauth2client

Inicializa el SDK de Google Cloud

El SDK permite el acceso remoto y autenticado a Google Cloud. En este codelab, se usará para acceder al bucket de almacenamiento, de modo que la llave de seguridad se pueda descargar fácilmente en la Raspberry Pi.

En la línea de comandos de la Raspberry Pi, ingresa

  gcloud init --console-only

Cuando aparezca el mensaje "Would you like to log in (Y/n)?", presiona Intro.

Cuando veas el mensaje "Ve al siguiente vínculo en tu navegador" seguido de una URL larga que comienza con https://accounts.google.com/o/oauth?..., coloca el cursor sobre la URL, haz clic con el botón derecho y selecciona "Copiar URL". Luego, abre el navegador web (ícono de globo azul en la esquina superior izquierda de la pantalla), haz clic con el botón derecho en la barra de direcciones y, luego, en "Pegar".

Cuando veas la pantalla de acceso, ingresa la dirección de correo electrónico asociada con tu cuenta de Google Cloud y presiona Intro. Luego, ingresa tu contraseña y haz clic en el botón Siguiente.

Se te indicará que el SDK de Google Cloud quiere acceder a tu Cuenta de Google. Haz clic en el botón Permitir.

Se te mostrará el código de verificación. Con el mouse, destaca el texto, haz clic con el botón derecho y elige Copiar. Regresa a la ventana de terminal, asegúrate de que el cursor esté a la derecha de "Enter verification code:", haz clic con el botón derecho del mouse y, luego, elige Pegar. Presiona el botón Intro.

Si se te solicita que elijas el proyecto de Cloud que deseas usar, ingresa el número correspondiente al nombre del proyecto que has estado usando para este codelab y, luego, presiona Intro.

Si se te solicita que habilites la API de Compute, presiona el botón Intro para habilitarla. Luego, se te pedirá que configures los parámetros de configuración de Google Compute Engine. Presiona Intro. Se te presentará una lista de posibles regiones o zonas. Elige una cercana a ti, ingresa el número correspondiente y presiona Intro.

En un momento, verás información adicional. Ahora el SDK de Google Cloud está configurado. Puedes cerrar la ventana del navegador web, ya que no la necesitarás más.

Instala el software del sensor y la secuencia de comandos del clima

Desde la línea de comandos de la Raspberry Pi, clona los paquetes necesarios para leer información de los pines de entrada/salida.

  git clone https://github.com/adafruit/Adafruit_Python_GPIO

Instala los paquetes descargados

  cd Adafruit_Python_GPIO

  sudo python setup.py install

  cd ..

Clona el código del proyecto que habilita el sensor de clima

  git clone https://github.com/googlecodelabs/iot-data-pipeline

Copia el controlador del sensor en el mismo directorio que el resto del software descargado.

  cd iot-data-pipeline/third_party/Adafruit_BME280

  mv Adafruit_BME280.py ../..

  cd ../..

Escribe para editar el guion…

  nano checkWeather.py

Cambia el proyecto a tu ID del proyecto y el tema al nombre de tu tema de Pub/Sub (estos se mencionaron en las secciones Configuración y Crea un tema de Pub/Sub de este codelab).

Cambia los valores de sensorID, sensorZipCode, sensorLat y sensorLong a los que desees. Los valores de latitud y longitud de una ubicación o dirección específica se pueden encontrar aquí.

Cuando termines de realizar los cambios necesarios, presiona Ctrl + X para comenzar a salir del editor nano. Presiona Y para confirmar.

# constants - change to fit your project and location
SEND_INTERVAL = 10 #seconds
sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
credentials = GoogleCredentials.get_application_default()
project="myProject" #change this to your Google Cloud project id
topic = "myTopic" #change this to your Google Cloud PubSub topic name
sensorID = "s-Googleplex"
sensorZipCode = "94043"
sensorLat = "37.421655"
sensorLong = "-122.085637"

Cómo instalar la llave de seguridad

Copia la clave de seguridad (de la sección "Publicación segura en un tema") en la Raspberry Pi.

Si usaste SFTP o SCP para copiar la llave de seguridad de tu máquina local a tu Raspberry Pi (en el directorio /home/pi), puedes omitir el siguiente paso y pasar directamente a la exportación de la ruta de acceso.

Si colocaste la llave de seguridad en un bucket de almacenamiento, deberás recordar el nombre del bucket y el del archivo. Usa el comando gsutil para copiar la llave de seguridad. Este comando puede acceder a Google Storage (por eso se llama gsutil y la ruta de acceso al archivo comienza con gs://). Asegúrate de cambiar el siguiente comando para que incluya el nombre de tu bucket y el nombre del archivo.

  gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .

Deberías ver un mensaje que indica que el archivo se está copiando y, luego, que se completó la operación.

Desde la línea de comandos de la Raspberry Pi, exporta una ruta de acceso a la llave de seguridad (cambia el nombre del archivo para que coincida con el que tienes).

  export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json

Ahora tienes un sensor de clima de IoT completo que está listo para transmitir datos a Google Cloud.

7. Inicia la canalización de datos

Es posible que debas habilitar la API de Compute

Transmisión de datos desde una Raspberry Pi

Si construiste un sensor de clima de IoT con Raspberry Pi, inicia la secuencia de comandos que leerá los datos meteorológicos y los enviará a Google Cloud Pub/Sub. Si no estás en el directorio /home/pi/iot-data-pipeline, primero muévete allí.

  cd /home/pi/iot-data-pipeline

Inicia la secuencia de comandos del clima

  python checkWeather.py

Deberías ver que la ventana de la terminal muestra los resultados de los datos meteorológicos cada minuto. Una vez que los datos fluyan, puedes pasar a la siguiente sección (Verifica que los datos fluyan).

Transmisión de datos simulados

Si no creaste el sensor de clima de IoT, puedes simular la transmisión de datos con un conjunto de datos públicos que se almacenó en Google Cloud Storage y lo incorporaste al tema de Pub/Sub existente. Se usará Google Dataflow junto con una plantilla proporcionada por Google para leer desde Cloud Storage y publicar en Pub/Sub.

Como parte del proceso, Dataflow necesitará una ubicación de almacenamiento temporal, por lo que crearemos un bucket de almacenamiento para este propósito.

En la consola de Cloud, selecciona Storage y, luego, Browser.

c4414fe61be320a9.png

Haz clic en el botón Crear bucket.

cde91311b267fc65.png

Elige un nombre para el bucket de almacenamiento (recuerda que debe ser un nombre único a nivel global en todo Google Cloud) y haz clic en el botón Crear. Recuerda el nombre de este bucket de almacenamiento, ya que lo necesitarás en breve.

1dad4cfbccfc96b1.png

En la consola de Cloud, selecciona Dataflow.

43ec245b47ae2e78.png

Haz clic en Crear trabajo a partir de una plantilla (Create Job from Template) en la parte superior de la pantalla.

da55aaf2a1b0a0d0.png

Completa los detalles del trabajo como se muestra a continuación y presta atención a lo siguiente:

  • Ingresa un nombre de trabajo de dataflow-gcs-to-pubsub
  • Tu región debería seleccionarse automáticamente según dónde se aloja tu proyecto y no debería ser necesario cambiarla.
  • Selecciona una plantilla de Cloud Dataflow de GCS Text to Cloud Pub/Sub
  • En Input Cloud Storage File(s), ingresa gs://codelab-iot-data-pipeline-sampleweatherdata/*.json (este es un conjunto de datos públicos).
  • En el tema de Pub/Sub de salida, la ruta de acceso exacta dependerá del nombre de tu proyecto y se verá similar a "projects/yourProjectName/topics/weatherdata".
  • Configura la ubicación temporal con el nombre del bucket de Google Cloud Storage que acabas de crear junto con un prefijo de nombre de archivo "tmp". Debería verse como "gs://myStorageBucketName/tmp".

Cuando hayas completado toda la información (consulta a continuación), haz clic en el botón Ejecutar trabajo.

5f8ca16672f19d9b.png

El trabajo de Dataflow debería comenzar a ejecutarse.

e020015c369639ad.png

El trabajo de Dataflow debería tardar aproximadamente un minuto en completarse.

218a3ff7197dcf75.png

8. Verifica que los datos fluyan

Registros de Cloud Functions

Asegúrate de que Pub/Sub active la función de Cloud Functions

  gcloud beta functions logs read function-weatherPubSubToBQ

En los registros, se debe mostrar que la función se está ejecutando, que se están recibiendo datos y que se están insertando en BigQuery.

d88f7831dabc8b3f.png

Datos de BigQuery

Verifica que los datos fluyan hacia la tabla de BigQuery. En la consola de Cloud, ve a BigQuery (bigquery.cloud.google.com).

85627127d58f1d2e.png

Debajo del nombre del proyecto (en el lado izquierdo de la ventana), haz clic en el conjunto de datos (weatherData), luego en la tabla (weatherDataTable) y, por último, en el botón Query Table.

44dc0f765a69580c.png

Agrega un asterisco a la sentencia SQL para que se lea SELECT * FROM… como se muestra a continuación y, luego, haz clic en el botón EJECUTAR CONSULTA.

b3a001e11c2902f2.png

Si se te solicita, haz clic en el botón Ejecutar consulta.

2c894d091b789ca3.png

Si ves resultados, significa que los datos fluyen correctamente.

c8a061cebb7b528a.png

Ahora que los datos fluyen, puedes crear un panel de Analytics.

9. Crea un panel de Data Studio

Google Data Studio transforma tus datos en informes y paneles de control útiles, fáciles de leer y compartir, y completamente personalizables.

En tu navegador web, ve a https://datastudio.google.com

10f8c27060cd7430.png

En "Iniciar un informe nuevo", haz clic en En blanco y, luego, en el botón Comenzar.

df1404bc0047595e.png

Haz clic en la casilla de verificación para aceptar las condiciones, haz clic en el botón Siguiente, selecciona los correos electrónicos que te interese recibir y haz clic en el botón Listo. Una vez más, en "Comenzar un informe nuevo", haz clic en En blanco.

55e91d3dd88b05ca.png

Haz clic en el botón Crear fuente de datos nueva.

a22f3fac05774fc9.png

Haz clic en BigQuery, luego en el botón Autorizar y, a continuación, elige la Cuenta de Google que deseas usar con Data Studio (debe ser la misma que usaste para el codelab).

5ab03f341edc8964.png

Haz clic en el botón Permitir.

22bcdbb5f5f1d30c.png

Selecciona el nombre del proyecto, el conjunto de datos y la tabla. Luego, haz clic en el botón Conectar.

dc6b6b0ed9ced509.png

Cambia los campos de tipo como se muestra a continuación (todo debe ser un número, excepto timecollected y sensorID). Ten en cuenta que timecollected se establece en Date Hour (y no solo en Date). Cambia los campos de Agregación como se muestra a continuación (el punto de rocío, la temperatura, la humedad y la presión deben ser promedios, y todo lo demás debe establecerse en "Ninguno"). Haz clic en el botón Create Report.

c60887e29c3bdf9b.png

Haz clic en el botón Agregar al informe para confirmar la acción.

5ec3888dfdd85095.png

Si se te solicita que selecciones tu Cuenta de Google, hazlo y, luego, haz clic en el botón Permitir para que Data Studio almacene sus informes en Google Drive.

7b8006a813b3defa.png

Verás un lienzo en blanco en el que podrás crear tu panel. En la fila superior de íconos, elige Series temporales.

c7cd97354e1cde04.png

Dibuja un rectángulo en la esquina superior izquierda de la hoja en blanco. Debe ocupar aproximadamente ¼ de la hoja en blanco total.

e0e82cb19921f835.png

En el lado derecho de la ventana, selecciona la pestaña Estilo. Cambia la opción Datos faltantes de "Línea hasta cero" a "Saltos de línea". En la sección Eje Y izquierdo, borra el 0 de Valor mín. del eje para cambiarlo a (Automático).

c7620bfe734d546.png

Haz clic en el gráfico de la hoja y cópialo y pégalo (Ctrl + C/Ctrl + V) 3 veces. Alinea los gráficos de modo que cada uno ocupe ¼ del diseño.

9a7d3faa28996219.png

Haz clic en cada gráfico y, en la sección Propiedades y datos de la serie temporal, haz clic en la métrica existente (punto de rocío) y elige una métrica diferente para que se muestre hasta que las cuatro lecturas meteorológicas (punto de rocío, temperatura, humedad y presión) tengan su propio gráfico.

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

Ahora tienes un panel básico.

8f59e8f4d44b8552.png

10. ¡Felicitaciones!

Creaste una canalización de datos completa. De esta manera, aprendiste a usar Google Pub/Sub, a implementar una función sin servidor, a aprovechar BigQuery y a crear un panel de análisis con Data Studio. Además, viste cómo se puede usar el SDK de Google Cloud de forma segura para incorporar datos a Google Cloud. Por último, ahora tienes experiencia práctica con un patrón arquitectónico importante que puede controlar grandes volúmenes y mantener la disponibilidad.

79cd6c68e83f7fea.png

Corrección

Una vez que termines de experimentar con los datos meteorológicos y la canalización de Analytics, puedes quitar los recursos en ejecución.

Si construiste el sensor de IoT, apágalo. Presiona Ctrl + C en la ventana de la terminal para detener la secuencia de comandos y, luego, escribe lo siguiente para apagar la Raspberry Pi:

  shutdown -h now

Ve a Cloud Functions, haz clic en la casilla de verificación junto a function-weatherPubSubToBQ y, luego, haz clic en Borrar.

ae95f4f7178262e0.png

Ve a Pub/Sub, haz clic en Tema, marca la casilla de verificación junto al tema weatherdata y, luego, haz clic en Borrar.

6fb0bba3163d9a32.png

Ve a Almacenamiento, haz clic en las casillas de verificación junto a los buckets de almacenamiento y, luego, haz clic en Borrar.

9067fb2af9f907f4.png

Ve a bigquery.cloud.google.com, haz clic en la flecha hacia abajo junto al nombre de tu proyecto, haz clic en la flecha hacia abajo a la derecha del conjunto de datos weatherData y, luego, haz clic en Borrar conjunto de datos.

a952dfeec49248c4.png

Cuando se te solicite, escribe el ID del conjunto de datos (weatherData) para terminar de borrar los datos.

6310b1cc8da31a77.png