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

1. Descripción general o introducción

Si bien las aplicaciones de varios niveles que consisten en la Web, el servidor de aplicaciones y la base de datos son fundamentales para el desarrollo web y son el punto de partida para muchos sitios web, el éxito a menudo conlleva 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 empresariales clave? Estos problemas, junto con las demandas de las aplicaciones a escala de Internet, generaron 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 y en tiempo real. Como resultado, 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 para desarrolladores y arquitectos por igual.

Qué compilarás

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

80cd6c68e83f7fea.png

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

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 compilas 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 quieres 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 piezas individuales aquí).

  • Raspberry Pi Zero W con fuente de alimentación, tarjeta de memoria SD y funda
  • Lector de tarjetas USB
  • hub USB (para permitir la conexión de un teclado y un mouse al único puerto USB de la placa Raspberry Pi)
  • Cables de prototipado hembra a hembra
  • Encabezados de martillo GPIO
  • Sensor BME280
  • Soldador con soldadura

Además, se asume que tienes acceso a un monitor de computadora o a una TV con entrada HDMI, cable HDMI, teclado y 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 la consola de Google Cloud ( 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 tener un nombre único en todos los proyectos de Google Cloud (el que se muestra a continuación ya está en uso y no funcionará para ti). Toma nota del ID de tu proyecto (es decir, el ID de tu 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 podría ser más 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 de bajo costo, altamente escalable y sin servidores. Es una opción ideal para almacenar los datos que se transmiten desde dispositivos de IoT y, al mismo tiempo, permite un panel de estadísticas para consultar la información.

Creemos una tabla que contenga 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 volver a acceder a ella).

12a838f78a10144a.png

Haz clic en el ícono de flecha hacia abajo 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 Datos de origen, selecciona Crear tabla vacía. 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 uno. Cuando todo esté completo, haz clic en el botón Crear tabla.

eef352614a5696a7.png

Deberías ver un resultado como el siguiente:

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. Por lo tanto, es perfecto para manejar los mensajes de IoT entrantes y permitir que los sistemas downstream los procesen.

Si todavía está en la ventana de BigQuery, regrese a la consola de Cloud. Si cerraste la consola de Cloud, visita 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 Habilita la API.

9f6fca9dc8684801.png

Haz clic en el botón Crear un tema.

643670164e9fae12.png

Ingresa "weatherdata" como el 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 la 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 mediante la creación de 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 de publicador de Pub/Sub.

31f8c944af11270e.png

Escribe un nombre de cuenta de servicio (iotWeatherPublisher), marca la casilla de verificación Proporcionar una clave privada nueva, asegúrate de que el tipo de clave esté configurado en JSON y haz clic en "Create".

7e3f9d7e56a44796.png

La llave de seguridad se descargará automáticamente. Solo hay una clave, 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 tiene un ID de clave asociado.

b25f6f5629fe8fd7.png

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

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 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, suéltala o súbela al bucket de almacenamiento

a0f6d069d42cec4b.png

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

55b25c8b9d73ec19.png

Toma nota del nombre del bucket de almacenamiento y del nombre del archivo de la clave de seguridad para usar más adelante.

5. Crea una función de Cloud Functions

La computación en la nube permitió crear modelos de computación 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, lo leerá y, luego, lo 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 el tema Cloud Pub/Sub y, en el menú desplegable Tema, selecciona weatherdata. Para el código fuente, selecciona editor intercalado. En la pestaña index.js, pega el siguiente código sobre el contenido que viene para comenzar. Asegúrate de cambiar las constantes de projectId, datasetId y tableId para 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 en “HelloWorld”, cámbiala a “subscribe”. Hacer clic en el botón Crear

3266d5268980a4db.png

Tomará alrededor de 2 minutos hasta que la función muestre que se implementó

26f45854948426d0.png

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

6. Configura el hardware de IoT (opcional)

Arma la placa Raspberry Pi y el sensor

Si hay más de 7 pines, recorta el encabezado para que solo tenga 7 pines. Solda los pines del encabezado a la placa del sensor.

a162e24426118c97.png

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

a3a697907fe3c9a9.png

Sigue los pasos que se indican aquí para formatear la tarjeta SD y, luego, instalar el instalador de NOOBS (New Out Of Box Software). Inserta la tarjeta SD en la Raspberry Pi y coloca la Raspberry Pi en su estuche.

1e4e2459cd3333ec.png

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

392c2a9c85187094.png

Pin Raspberry Pi

Conexión del sensor

Pin 1 (3.3 V)

VIN

Pin 3 (CPIO2)

SDI

Pin 5 (GPIO3)

SCK

Pin 9 (masa)

GND

44322e38d467d66a.png

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

Configura la Raspberry Pi y el sensor

Cuando la Raspberry Pi termine de iniciarse, selecciona Raspbian para el sistema operativo que desees, asegúrate de que el idioma que prefieras y haz clic en Instalar (ícono de disco duro ubicado 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 segura, ingresa la contraseña (clave precompartida).

17f380b2d41751a8.png

Haz clic en el ícono de la 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 placa Raspberry Pi.

14741a77fccdb7e7.png

Cuando 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 Google Cloud, el SDK de Google Cloud deberá estar instalado en la placa 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 terminal en la Raspberry Pi si aún no hay una abierta y establece una variable de entorno que coincida con la versión del SDK en el sistema operativo de la Raspberry Pi.

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

Ahora, agrega la ubicación donde se almacenan los paquetes del SDK de Google Cloud para que las herramientas de instalación sepan dónde buscar cuando se les solicite instalar 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 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 principal de Google Cloud.

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

Cuando se te pregunte “¿Quieres continuar?”, 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 a 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 Raspberry Pi.

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

  gcloud init --console-only

Cuando se te pregunte “¿Quieres acceder (Y/n)?”, presiona Intro.

Cuando veas el mensaje "Ir al siguiente vínculo en tu navegador:" seguido de una URL larga que comienza con https://accounts.google.com/o/oauth?... coloca el mouse 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 tu 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 informará 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, selecciónalo, haz clic con el botón derecho y elige Copiar. Regresa a la ventana de la 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 "Elegir un proyecto de la nube para usar:", ingresa el número correspondiente al nombre del proyecto que usaste en 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 la configuración de Google Compute Engine. Presiona Intro. Se te mostrará una lista de posibles regiones o zonas. Elige una que esté cerca de ti, ingresa el número correspondiente y presiona Intro.

En un momento, verás que se muestra información adicional. El SDK de Google Cloud ya está configurado. Puedes cerrar la ventana del navegador web, ya que no la necesitarás de ahora en adelante.

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 y 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 la secuencia de comandos.

  nano checkWeather.py

Cambia el proyecto por tu ID de proyecto y el tema por el nombre de tu tema de Pub/Sub (se anotaron en las secciones Preparación y Crea un tema de Pub/Sub de este codelab).

Cambia los valores sensorID, sensorZipCode, sensorLat y sensorLong al valor que desees. Aquí encontrarás los valores de latitud y longitud de una ubicación o dirección específica.

Cuando hayas realizado 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 llave de seguridad (de la sección "Publicación segura en un tema") en la tarjeta 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 continuar con la exportación de la ruta de acceso.

Si colocaste la clave 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 por qué la ruta de acceso al archivo comienza con gs://). Asegúrate de cambiar el siguiente comando para que sea el nombre del bucket y del archivo.

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

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

Desde la línea de comandos en 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 meteorológico 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 creaste un sensor meteorológico de IoT para 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 desplázate 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 reproduce los resultados de los datos meteorológicos cada minuto. Cuando los datos fluyan, puedes avanzar a la siguiente sección (Verifica que los datos fluyan).

Transmisión de datos simulada

Si no creaste el sensor meteorológico de IoT, puedes simular la transmisión de datos. Para ello, usa un conjunto de datos públicos que se haya almacenado en Google Cloud Storage y agrégale al tema de Pub/Sub existente. Se usará Google Dataflow y 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, así que crearemos un bucket de almacenamiento para este fin.

En la consola de Cloud, selecciona Almacenamiento y, luego, Navegador.

c4414fe61be320a9.png

Haz clic en el botón Crear bucket.

cde91311b267fc65.png

Elige un nombre para el bucket de almacenamiento (recuerda que debe ser ú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 (parte superior de la pantalla).

da55aaf2a1b0a0d0.png

Completa los detalles del trabajo como se muestra a continuación y ten en cuenta lo siguiente:

  • Ingresa un nombre de trabajo de dataflow-gcs-to-pubsub.
  • La región debería seleccionarse automáticamente según el lugar donde se aloja tu proyecto y no debería ser necesario cambiarla.
  • Selecciona una plantilla de Cloud Dataflow de texto de GCS para Cloud Pub/Sub
  • Para los archivos de Cloud Storage de entrada, 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á algo así como “projects/yourProjectName/topics/weatherdata”.
  • Establece la ubicación temporal en el nombre del bucket de Google Cloud Storage que acabas de crear junto con un prefijo de nombre de archivo de "tmp". Debería verse como "gs://miNombreDeBucketDeAlmacenamiento/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 Function

Asegúrate de que Pub/Sub active la Cloud Function

  gcloud beta functions logs read function-weatherPubSubToBQ

Los registros deben mostrar que la función se está ejecutando, que se reciben los datos y que se están insertando en BigQuery.

d88f7831dabc8b3f.png

Datos de BigQuery

Asegúrate de que los datos fluyan a 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, luego, en el botón Query Table.

44dc0f765a69580c.png

Agrega un asterisco a la instrucción de SQL para que diga 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.

8c894d091b789ca3.png

Si ves resultados, significa que los datos fluyen correctamente.

c8a061cebb7b528a.png

Ahora que los datos fluyen, ya puedes crear un panel de estadísticas.

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 nuevo informe", 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, luego en el botón Siguiente, selecciona los correos electrónicos que te interesa recibir y haz clic en el botón Listo. Una vez más, en "Iniciar un nuevo informe", haz clic en En blanco.

55e91d3dd88b05ca.png

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

a22f3fac05774fc9.png

Haz clic en BigQuery, luego en el botón Autorizar y elige la Cuenta de Google que quieres 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 de tu 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 Crear informe.

c60887e29c3bdf9b.png

Para confirmar, haz clic en el botón Agregar al informe.

5ec3888dfdd85095.png

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

7b8006a813b3defa.png

Verás un lienzo en blanco para crear tu panel. En la fila superior de íconos, elige Time Series.

c7cd97354e1cde04.png

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

e0e82cb19921f835.png

En el lado derecho de la ventana, selecciona la pestaña Estilo. Cambia los datos faltantes de "Línea a cero" a "Separación de líneas". En la sección Eje Y izquierdo, borra el 0 de Eje mínimo 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 para que cada uno tenga ¼ del diseño.

9a7d3faa28996219.png

Haz clic en cada gráfico y, en la sección Datos y propiedades de 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! Al hacerlo, aprendiste a usar Google Pub/Sub, a implementar una función sin servidor, a aprovechar BigQuery y a crear un panel de estadísticas con Data Studio. Además, viste cómo se puede usar de forma segura el SDK de Google Cloud para transferir datos a Google Cloud Platform. Por último, ahora tienes experiencia práctica con un patrón arquitectónico importante que puede controlar volúmenes altos y, al mismo tiempo, mantener la disponibilidad.

79cd6c68e83f7fea.png

Corrección

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

Si compilaste el sensor de IoT, ciérralo. Presiona Ctrl + C en la ventana de 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, en Borrar.

ae95f4f7178262e0.png

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

6fb0bba3163d9a32.png

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

9067fb2af9f907f4.png

Ve a bigquery.cloud.google.com, haz clic en la flecha hacia abajo que se encuentra junto al nombre de tu proyecto, a la derecha del conjunto de datos weatherData y, a continuación, 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