Usa Dataflow SQL

En este instructivo, se muestra cómo ejecutar trabajos de Dataflow con SQL y la IU de SQL de Dataflow.Para demostrar esto, en este instructivo se muestra un ejemplo que une una transmisión de datos de Pub/Sub con datos de una tabla de BigQuery.

Objetivos

En este instructivo, realizarás lo siguiente:

  • Usar SQL para unir datos de transmisión de Pub/Sub con datos de tablas de BigQuery
  • Implementar un trabajo de Dataflow desde la IU de SQL de Dataflow

Costos

En este instructivo, se usan componentes facturables de Google Cloud, que incluyen lo siguiente:

  • Dataflow
  • Cloud Storage
  • Pub/Sub

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto. Los usuarios nuevos de Google Cloud pueden ser aptos para obtener una prueba gratuita.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En GCP Console, en la página de selección de proyecto, selecciona o crea un proyecto de GCP.

    Ir a la página de selección de proyecto

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita las Cloud Dataflow, Compute Engine, Stackdriver Logging, Cloud Storage, Cloud Storage JSON, BigQuery, Cloud Pub/Sub, y Cloud Resource Manager APIAPI.

    Habilita lasAPI

  5. Configurar la autenticación
    1. En GCP Console, ve a la página Crear clave de la cuenta de servicio.

      Ir a la página Crear clave de la cuenta de servicio
    2. En la lista Cuenta de servicio, selecciona Cuenta de servicio nueva.
    3. Ingresa un nombre en el campo Nombre de cuenta de servicio.
    4. En la lista Función, selecciona Proyecto > Propietario.

      Nota: El campo Función autoriza tu cuenta de servicio para acceder a los recursos. Puedes ver y cambiar este campo luego con GCP Console. Si desarrollas una app de producción, especifica permisos más detallados que Proyecto > Propietario. Para obtener más información, consulta Cómo otorgar funciones a las cuentas de servicio.
    5. Haz clic en Crear. Se descargará un archivo JSON a tu computadora que contiene tus descargas de claves.
  6. Configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS con la ruta de acceso al archivo JSON que contiene la clave de tu cuenta de servicio. Esta variable solo se aplica a tu sesión actual de shell. Por lo tanto, si abres una sesión nueva, deberás volver a configurar la variable.

  7. Instala y, luego, inicializa el SDK de Cloud. Elige una de las opciones de instalación. Es posible que debas establecer la propiedad project en el proyecto que usas para esta explicación.
  8. Ve a la IU web de BigQuery en Cloud Console. Así se abrirá el último proyecto al que accediste. Para cambiar a un proyecto diferente, haz clic en el nombre del proyecto en la parte superior de la IU web de BigQuery y busca el proyecto que quieres usar.
    Ir a la IU web de BigQuery

Cambiar a la IU de SQL de Dataflow

En la IU web de BigQuery, siga estos pasos para cambiar a la IU de Dataflow.

  1. Haz clic en el menú desplegable Más y selecciona Configuración de consulta.

  2. En el menú Configuración de consultas que se abre a la derecha, seleccione Motor de Dataflow.

  3. Si tu proyecto no tiene habilitadas las API de Dataflow y Data Catalog, se te pedirá que las habilites. Haz clic en Habilitar las API. Habilitar las API de Dataflow y Data Catalog puede demorar unos minutos.

  4. Cuando se complete la habilitación de las API, haz clic en Guardar.

Crea fuentes de ejemplo

Si quieres seguir el ejemplo proporcionado en este instructivo, crea las fuentes siguientes y úsalas en los pasos del instructivo.

  • Un tema de Pub/Sub llamado transactions: una transmisión de datos de transacciones que llega mediante una suscripción al tema de Pub/Sub. Los datos de cada transacción incluyen información sobre el producto comprado, el precio de oferta y la ciudad y estado en los que se realizó la compra. Después de crear el tema de Pub/Sub, crea una secuencia de comandos que publica mensajes en su tema. Ejecutarás esta secuencia de comandos en una sección posterior de este instructivo.
  • Una tabla de BigQuery llamada us_state_salesregions: una tabla que proporciona una asignación de estados a regiones de ventas. Antes de crear esta tabla, debes crear un conjunto de datos de BigQuery.

Busca fuentes de Cloud Pub/Sub

La IU de SQL de Dataflow proporciona una forma de encontrar objetos de origen de datos de Pub/Sub para cualquier proyecto al que tengas acceso, para que no tengas que recordar sus nombres completos.

Para el ejemplo de este instructivo, agrega el tema de Pub/Sub transactions que creaste:

  1. En el panel de navegación izquierdo, haz clic en la lista desplegable Agregar datos (Add Data) y selecciona Fuentes de Cloud Dataflow (Cloud Dataflow sources).

  2. En el panel Agregar fuente de Cloud Dataflow que se abre a la derecha, selecciona Temas de Pub/Sub. En el cuadro de búsqueda, ingresa transactions. Selecciona el tema y haz clic en Agregar.

Asignar un esquema a tu tema de Pub/Sub

La asignación de un esquema le permite ejecutar consultas de SQL en sus datos de tema de Pub/Sub. Actualmente, Dataflow SQL espera que los mensajes en temas de Pub/Sub se serialicen en formato JSON. En el futuro, se generará compatibilidad con otros formatos, como Avro.

Después de agregar el ejemplo del tema de Pub/Sub como una fuente de Dataflow, siga estos pasos para asignar un esquema al tema en la IU de SQL de Dataflow:

  1. Selecciona el tema en el panel Recursos.

  2. En la pestaña Esquema, haga clic en Editar esquema. El panel lateral Schema se abre a la derecha.

    El panel lateral en el que se debe agregar o editar un esquema

  3. Mueve el botón Editar como texto y pega el siguiente esquema intercalado en el editor. A continuación, haz clic en Enviar.

    [
          {
              "description": "Pub/Sub event timestamp",
              "name": "event_timestamp",
              "mode": "REQUIRED",
              "type": "TIMESTAMP"
          },
          {
              "description": "Transaction time string",
              "name": "tr_time_str",
              "type": "STRING"
          },
          {
              "description": "First name",
              "name": "first_name",
              "type": "STRING"
          },
          {
              "description": "Last name",
              "name": "last_name",
              "type": "STRING"
          },
          {
              "description": "City",
              "name": "city",
              "type": "STRING"
          },
          {
              "description": "State",
              "name": "state",
              "type": "STRING"
          },
          {
              "description": "Product",
              "name": "product",
              "type": "STRING"
          },
          {
              "description": "Amount of transaction",
              "name": "amount",
              "type": "FLOAT64"
          }
        ]
        
  4. (Opcional) Haga clic en Obtener vista previa del tema para examinar el contenido de sus mensajes y confirmar que coincidan con el esquema que definió.

    Se abrirá el botón

Observa el esquema

  1. En el panel de navegación izquierdo de la IU de Dataflow SQL, haga clic en Fuentes de Cloud Dataflow.
  2. Haga clic en Temas de Pub/Sub.
  3. Haz clic en Transacciones.
  4. En Schema, puede ver el esquema que asignó al tema de Pub/Sub transactions.

Crea una consulta de SQL

La IU de SQL de Dataflow te permite crear consultas de SQL para ejecutar tus trabajos de Dataflow.

La consulta de SQL siguiente es una consulta de enriquecimiento de datos. Agrega un campo adicional, sales_region, a la transmisión de eventos Pub/Sub (transactions), mediante una tabla de BigQuery (us_state_salesregions) que asigna estados a regiones de ventas.

Copia y pega la consulta de SQL siguiente en el Editor de consultas. Reemplaza project-id por el ID del proyecto.

    SELECT tr.*, sr.sales_region
    FROM pubsub.topic.`project-id`.transactions as tr
      INNER JOIN bigquery.table.`project-id`.dataflow_sql_dataset.us_state_salesregions AS sr
      ON tr.state = sr.state_code
    

Cuando ingresa una consulta en la IU de SQL de Dataflow, la consulta validador verifica la sintaxis de consulta. Se muestra un ícono de marca de verificación verde si la consulta es válida. Si no lo es, aparecerá un ícono de exclamación rojo. Si la sintaxis de la consulta no es válida, se proporcionará información sobre lo que se debe corregir si haces clic en el ícono del validador.

En la captura de pantalla siguiente, se muestra la consulta válida en el Editor de consultas. El validador muestra una marca de verificación verde.

Ingresa tu consulta en el editor.

Crea un trabajo de Dataflow para ejecutar tu consulta de SQL

Para ejecutar tu consulta de SQL, crea un trabajo de Dataflow desde la IU de SQL de Dataflow.

  1. Debajo del Editor de consultas, haga clic en Crear trabajo de Dataflow.

  2. En el panel Create Dataflow job que se abre a la derecha, cambie el Table name predeterminado a dfsqltable_sales.

  3. Opcional: Dataflow elige automáticamente la configuración óptima para su trabajo SQL de Dataflow, pero puede expandir el menú Parámetros opcionales para especificar manualmente las siguientes opciones de canalización:

    • Cantidad máxima de trabajadores
    • Zona
    • Correo electrónico de la cuenta de servicio
    • Machine type
    • Experimentos adicionales
    • Configuración de la dirección IP del trabajador
    • Red
    • Subred
  4. Haga clic en Crear. Su trabajo de Dataflow tardará unos minutos en comenzar a ejecutarse.

  5. El panel Resultados de la consulta aparece en la IU. Para volver al panel Resultados de la consulta de un trabajo más adelante, busque el trabajo en el panel Historial de trabajos y utilice el botón Abrir consulta en el editor. como se muestra en Ver el trabajo y el resultado de Dataflow.

  6. En Información del trabajo, haz clic en el enlace ID del trabajo. Esto abre una nueva pestaña del navegador con la página Job Details de Dataflow en la IU web de Dataflow.

Ver el trabajo y el resultado de Dataflow

Dataflow convierte tu consulta de SQL en una canalización de Apache Beam. En la interfaz de usuario web de Dataflow que se abrió en una nueva pestaña del navegador, puede ver una representación gráfica de su canalización.

Puedes hacer clic en las casillas para ver un desglose de las transformaciones que se generan en la canalización. Por ejemplo, si haces clic en el cuadro superior de la representación gráfica que tiene la etiqueta Ejecutar consulta de SQL, aparecerá un gráfico que muestra las operaciones que ocurren en segundo plano.

Los dos cuadros superiores representan las dos entradas que se unieron: el tema de Pub/Sub, transactions, y la tabla de BigQuery, us_state_salesregions.

Para ver la tabla de resultados que contiene los resultados del trabajo, regrese a la pestaña del navegador con la IU de Dataflow SQL. En el panel de navegación izquierdo, en de tu proyecto, haz clic en el conjunto de datos dataflow_sql_dataset que creaste. Luego, haz clic en la tabla de resultados dfsqltable_sales. En la pestaña Vista previa, se muestran los contenidos de la tabla de resultados.

Visualiza los trabajos anteriores y edita tus consultas

La IU de SQL de Dataflow almacena trabajos y consultas anteriores en el panel Historial de trabajos. Los trabajos se enumeran según el día en que comenzó el trabajo. La lista de trabajos muestra primero los días que contienen trabajos en ejecución. Luego, la lista muestra los días sin trabajos en ejecución.

Puedes usar la lista del historial de trabajos para editar consultas de SQL anteriores y ejecutar trabajos nuevos de Dataflow. Por ejemplo, en caso de que quieras modificar tu consulta para agregar ventas por región de ventas cada 15 segundos. Usa el panel Historial de trabajos para acceder al trabajo en ejecución que iniciaste antes en el instructivo. Con este, cambia la consulta de SQL y ejecuta otro trabajo con la consulta modificada.

  1. En el panel de navegación de izquierdo, haz clic en Historial de trabajos.

  2. En Historial de trabajos, haz clic en Cloud Dataflow. Aparecerán todos los trabajos anteriores de tu proyecto.

  3. Haz clic en el trabajo que quieres editar. Haz clic en Abrir en editor de consultas.

  4. Edita tu consulta de SQL en el Editor de consultas para agregar ventanas de saltos de tamaño constante. Reemplaza project-id por el ID del proyecto si copias la consulta siguiente.

         SELECT
           sr.sales_region,
           TUMBLE_START("INTERVAL 15 SECOND") AS period_start,
           SUM(tr.amount) as amount
         FROM pubsub.topic.`project-id`.transactions AS tr
           INNER JOIN bigquery.table.`project-id`.dataflow_sql_dataset.us_state_salesregions AS sr
           ON tr.state = sr.state_code
         GROUP BY
           sr.sales_region,
           TUMBLE(tr.event_timestamp, "INTERVAL 15 SECOND")
        
  5. Debajo del Editor de consultas, haz clic en Crear trabajo de Cloud Dataflow para crear uno nuevo con la consulta modificada.

Limpia

Para evitar que se generen costos en tu cuenta de Google Cloud por los recursos que se usaron en este instructivo, sigue estos pasos:

  1. Detén tu secuencia de comandos de publicación transactions_injector.py si aún se está ejecutando.

  2. Detén los trabajos de Dataflow en ejecución. Ve a la IU web de Dataflow en Cloud Console.

    Ir a la IU web de Dataflow

    Para cada trabajo que creaste a partir de este instructivo, sigue estos pasos:

    1. Haz clic en el nombre del trabajo.

    2. En el panel Resumen del trabajo, haz clic en Detener trabajo. Aparecerá el cuadro de diálogo Detener trabajo con las opciones para detenerlo:

    3. Haz clic en Cancelar.

    4. Haz clic en Detener trabajo. El servicio detiene la transferencia y procesamiento de todos los datos lo antes posible. Debido a que Cancelar detiene el procesamiento de manera inmediata, es posible que pierdas los datos “en tránsito”. Detener un trabajo puede tardar unos minutos.

  3. Borra tu conjunto de datos de BigQuery. Ve a la IU web de BigQuery en Cloud Console.

    Ir a IU web de BigQuery

    1. En el panel de navegación, en la sección Recursos, haz clic en el conjunto de datos dataflow_sql_dataset que creaste.

    2. En el lado derecho del panel de detalles, haz clic en Borrar conjunto de datos. Esta acción borra el conjunto de datos, la tabla y todos los datos.

    3. En el cuadro de diálogo Borrar conjunto de datos (Delete dataset), ingresa el nombre del conjunto de datos (dataflow_sql_dataset) y, luego, haz clic en Borrar para confirmar el comando de borrado.

  4. Borra tu tema de Pub/Sub. Ve a la página de temas de Pub/Sub en Cloud Console.

    Ir a la página de Cloud Pub/Sub

    1. Marca la casilla de verificación junto al tema transactions.

    2. Haz clic en Borrar para borrar el tema de forma definitiva.

    3. Ve a la página de suscripciones de Pub/Sub.

    4. Marca la casilla de verificación junto a las suscripciones restantes a transactions. Si tus trabajos ya no están en ejecución, es posible que no haya ninguna suscripción.

    5. Haz clic en Borrar para borrar las suscripciones de manera permanente.

  5. Borra el depósito de etapas de Dataflow en Cloud Storage. En Cloud Console, ve al navegador de Cloud Storage.

    Ir al navegador de Cloud Storage

    1. Marque la casilla de verificación junto al depósito de etapas de Dataflow.

    2. Haz clic en Borrar para borrar el depósito de manera permanente.

Qué sigue