arrow_back

Procesamiento de datos sin servidores con Dataflow: cómo usar Dataflow SQL para hacer análisis por lotes (Java)

Acceder Unirse
Obtén acceso a más de 700 labs y cursos

Procesamiento de datos sin servidores con Dataflow: cómo usar Dataflow SQL para hacer análisis por lotes (Java)

Lab 2 horas universal_currency_alt 5 créditos show_chart Avanzado
info Es posible que este lab incorpore herramientas de IA para facilitar tu aprendizaje.
Obtén acceso a más de 700 labs y cursos

Descripción general

En este lab, aprenderás a hacer lo siguiente:

  • Escribir una canalización que use SQL para agregar el tráfico del sitio por usuario

Configuración y requisitos

En cada lab, recibirá un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.

  1. Accede a Qwiklabs desde una ventana de incógnito.

  2. Ten en cuenta el tiempo de acceso del lab (por ejemplo, 1:15:00) y asegúrate de finalizarlo en el plazo asignado.
    No existe una función de pausa. Si lo necesita, puede reiniciar el lab, pero deberá hacerlo desde el comienzo.

  3. Cuando esté listo, haga clic en Comenzar lab.

  4. Anote las credenciales del lab (el nombre de usuario y la contraseña). Las usarás para acceder a la consola de Google Cloud.

  5. Haga clic en Abrir Google Console.

  6. Haga clic en Usar otra cuenta, copie las credenciales para este lab y péguelas en el mensaje emergente que aparece.
    Si usa otras credenciales, se generarán errores o incurrirá en cargos.

  7. Acepta las condiciones y omite la página de recursos de recuperación.

Verifica los permisos del proyecto

Antes de comenzar a trabajar en Google Cloud, asegúrate de que tu proyecto tenga los permisos correctos en Identity and Access Management (IAM).

  1. En la consola de Google Cloud, en el Menú de navegación (Ícono del menú de navegación), selecciona IAM y administración > IAM.

  2. Confirma que aparezca la cuenta de servicio predeterminada de Compute {número-del-proyecto}-compute@developer.gserviceaccount.com, y que tenga asignado el rol Editor. El prefijo de la cuenta es el número del proyecto, que puedes encontrar en el menú de navegación > Descripción general de Cloud > Panel.

El nombre de la cuenta de servicio predeterminada de Compute Engine y el estado del editor destacados en la página de pestañas Permisos

Nota: Si la cuenta no aparece en IAM o no tiene asignado el rol Editor, sigue los pasos que se indican a continuación para asignar el rol necesario.
  1. En la consola de Google Cloud, en el menú de navegación, haz clic en Descripción general de Cloud > Panel.
  2. Copia el número del proyecto (p. ej., 729328892908).
  3. En el Menú de navegación, selecciona IAM y administración > IAM.
  4. En la parte superior de la tabla de funciones, debajo de Ver por principales, haz clic en Otorgar acceso.
  5. En Principales nuevas, escribe lo siguiente:
{project-number}-compute@developer.gserviceaccount.com
  1. Reemplaza {número-del-proyecto} por el número de tu proyecto.
  2. En Rol, selecciona Proyecto (o Básico) > Editor.
  3. Haz clic en Guardar.

Configura tu IDE

Para los fines de este lab, usará principalmente un IDE web de Theia alojado en Google Compute Engine. El IDE tiene el repositorio de labs clonado previamente. Se ofrece compatibilidad con servidores de lenguaje Java y una terminal para el acceso programático a las APIs de Google Cloud con la herramienta de línea de comandos de gcloud, similar a Cloud Shell.

  1. Para acceder al IDE de Theia, copia y pega en una pestaña nueva el vínculo que se muestra en Google Cloud Skills Boost.
Nota: Es posible que debas esperar entre 3 y 5 minutos para que se aprovisione por completo el entorno, incluso después de que aparezca la URL. Hasta ese momento, se mostrará un error en el navegador.

Panel de credenciales que muestra la ide_url

El repositorio del lab se clonó en tu entorno. Cada lab se divide en una carpeta labs con un código que debes completar y una carpeta solution con un ejemplo viable que puedes consultar como referencia si no sabes cómo continuar.

  1. Haz clic en el botón File Explorer para ver lo siguiente:

Menú expandido de File Explorer con la carpeta Labs destacada

También puedes crear varias terminales en este entorno, como lo harías con Cloud Shell:

La opción New Terminal destacada en el menú Terminal

Para verificarlo, ejecuta gcloud auth list en la terminal con la que accediste como cuenta de servicio proporcionada, que tiene exactamente los mismos permisos que tu cuenta de usuario del lab:

Terminal que muestra el comando gcloud auth list

Si en algún momento tu entorno deja de funcionar, intenta restablecer la VM en la que se aloja el IDE desde la consola de GCE de la siguiente manera:

El botón Restablecer y el nombre de la instancia de VM destacados en la página Instancias de VM

Agrega tráfico del sitio por usuario con SQL

En este lab, reescribirás tu canalización anterior de BatchUserTraffic para que realice las siguientes acciones:

  1. Lea el tráfico del día desde un archivo de Cloud Storage
  2. Convierta cada evento en un objeto CommonLog
  3. Use SQL en lugar de transformaciones de Java para sumar la cantidad de hits para cada ID de usuario único y realizar agregaciones adicionales
  4. Escriba los datos resultantes en BigQuery
  5. Tenga una rama adicional que escriba los datos sin procesar en BigQuery para su análisis posterior

Tarea 1: Prepara el entorno

Al igual que en los labs anteriores, el primer paso es generar datos para que la canalización los procese. Abre el entorno del lab y genera los datos como lo hiciste anteriormente:

Abre el lab adecuado

  1. Si aún no lo has hecho, crea una terminal nueva en tu IDE y, luego, copia y pega el siguiente comando:
# Change directory into the lab cd 4_SQL_Batch_Analytics/labs # Download dependencies mvn clean dependency:resolve export BASE_DIR=$(pwd)
  1. Configura el entorno de datos:
# Create GCS buckets and BQ dataset cd $BASE_DIR/../.. source create_batch_sinks.sh # Generate event dataflow source generate_batch_events.sh # Change to the directory containing the practice version of the code cd $BASE_DIR
  1. Asegúrate de que estén habilitadas las APIs de Data Catalog:
gcloud services enable datacatalog.googleapis.com

Haz clic en Revisar mi progreso para verificar el objetivo. Configurar el entorno de datos

Tarea 2: Agrega dependencias de SQL a la canalización

  1. Abre BatchUserTrafficSQLPipeline.java en tu IDE, que se puede encontrar en 4_SQL_Batch_Analytics/labs/src/main/java/com/mypackage/pipeline.

Esta canalización ya contiene el código necesario para aceptar las opciones de la línea de comandos de la ruta de entrada y un nombre de una tabla de salida, así como el código para leer los eventos de Google Cloud Storage, analizarlos y escribir resultados en BigQuery. Sin embargo, faltan algunas partes importantes.

Al igual que en el lab anterior, el siguiente paso de la canalización es agregar los eventos según cada user_id único y contar las páginas vistas de cada uno. Sin embargo, esta vez realizarás la agregación con SQL. Para ello, usarás SqlTransform en lugar de las transformaciones basadas en Java.

Antes de implementar esto, deberás agregar una dependencia de SQL a tu canalización.

  1. Para completar esta tarea, abre el archivo pom.xml de la canalización, ubicado en 4_SQL_Batch_Analytics/labs/, y agrega la siguiente dependencia:
<dependency> <groupId>org.apache.beam</groupId> <artifactId>beam-sdks-java-extensions-sql</artifactId> <version>${beam.version}</version> </dependency>
  1. Ejecuta el siguiente comando en la terminal del IDE para descargar las dependencias a través de Maven:
mvn clean dependency:resolve
  1. En BatchUserTrafficSQLPipeline.java, asegúrate de que las siguientes importaciones estén en la parte superior del archivo:
import org.apache.beam.sdk.extensions.sql.impl.BeamSqlPipelineOptions; import org.apache.beam.sdk.extensions.sql.SqlTransform;

Tarea 3: Escribe una sentencia de SQL para agregar el tráfico del sitio por usuario

Beam SQL se puede implementar en el dialecto de Apache Calcite.

El método SqlTransform.query(queryString) es la única API para crear una PTransform a partir de una representación de cadena de la consulta en SQL. Puedes aplicar esta PTransform a una sola PCollection o a una PCollectionTuple que contenga varias PCollections (más adelante obtendrás más información sobre PColllectionTuples).

Cuando se aplica a una sola PCollection, puede revisarse a través del nombre de tabla PCOLLECTION de la consulta:

PCollection<Row> filteredNames = testApps.apply( SqlTransform.query( "SELECT appId, description, rowtime " + "FROM PCOLLECTION " + "WHERE id=1"));

El resultado es un objeto Row con un esquema asociado que puede mutarse aún más en las Transformaciones de SQL o en otras PTransform de Java, o bien almacenarse en un receptor.

  • Para completar esta tarea, agrega una SQLTransform a tu canalización y proporciona una cadena de SQL para agregar la cantidad de hits por user_id y asignarle el nombre “pageviews”.

Si lo deseas, también puedes realizar agregaciones adicionales. A modo de referencia, esta era la PTransform que se usaba anteriormente:

aggregateField("user_id", Count.combineFn(), "pageviews") .aggregateField("num_bytes", Sum.ofIntegers(), "total_bytes") .aggregateField("num_bytes", Max.ofIntegers(), "max_num_bytes") .aggregateField("num_bytes", Min.ofIntegers(), "min_num_bytes"))

Estas son algunas funciones de agregación de SQL útiles:

COUNT(*) MAX(field_to_find_max_of) SUM(field_to_sum) MIN(field_to_find_min_of)

Si no sabes cómo hacerlo, consulta la solución aquí para ver sugerencias.

Implementa una rama para almacenar datos sin procesar

Es recomendable que almacenes todos los resultados sin procesar en BigQuery para realizar agregaciones de SQL adicionales más adelante en la IU.

  • Para completar esta tarea, vuelve a configurar tu canalización con una rama que escriba los objetos CommonLog sin procesar directamente en BigQuery, en un nombre de tabla al que haga referencia una opción de la línea de comandos rawTableName.

Para ello, finaliza la primera rama de la canalización con un punto y coma y, luego, inicia cada rama con logs.apply();. No olvides agregar esta nueva línea de comandos a las opciones de canalización junto con inputPath y aggregateTableName. Recuerda también que debes cambiar el tipo de sugerencia en BigQueryIO.<Object>write().

Tarea 4: Ejecuta la canalización

  1. Regresa a la terminal y ejecuta tu canalización:
# Set up environment variables export PROJECT_ID=$(gcloud config get-value project) export REGION='{{{project_0.default_region|Region}}}' export BUCKET=gs://${PROJECT_ID} export PIPELINE_FOLDER=${BUCKET} export MAIN_CLASS_NAME=com.mypackage.pipeline.BatchUserTrafficSQLPipeline export RUNNER=DataflowRunner export INPUT_PATH=${PIPELINE_FOLDER}/events.json export AGGREGATE_TABLE_NAME=${PROJECT_ID}:logs.user_traffic export RAW_TABLE_NAME=${PROJECT_ID}:logs.raw cd $BASE_DIR mvn compile exec:java \ -Dexec.mainClass=${MAIN_CLASS_NAME} \ -Dexec.cleanupDaemonThreads=false \ -Dexec.args=" \ --project=${PROJECT_ID} \ --region=${REGION} \ --stagingLocation=${PIPELINE_FOLDER}/staging \ --tempLocation=${PIPELINE_FOLDER}/temp \ --runner=${RUNNER} \ --inputPath=${INPUT_PATH} \ --aggregateTableName=${AGGREGATE_TABLE_NAME} \ --rawTableName=${RAW_TABLE_NAME}"
  1. Ve a Menú de navegación > Dataflow para ver el estado de tu canalización.

  2. Una vez que esta haya finalizado, ve a la IU de BigQuery para consultar las dos tablas resultantes. Asegúrate de que logs.raw exista y que se hayan propagado los datos, ya que lo necesitarás más adelante en el lab.

Haz clic en Revisar mi progreso para verificar el objetivo. Agregar tráfico del sitio por usuario con SQL

Finalice su lab

Cuando haya completado el lab, haga clic en Finalizar lab. Google Cloud Skills Boost quitará los recursos que usó y limpiará la cuenta.

Tendrá la oportunidad de calificar su experiencia en el lab. Seleccione la cantidad de estrellas que corresponda, ingrese un comentario y haga clic en Enviar.

La cantidad de estrellas indica lo siguiente:

  • 1 estrella = Muy insatisfecho
  • 2 estrellas = Insatisfecho
  • 3 estrellas = Neutral
  • 4 estrellas = Satisfecho
  • 5 estrellas = Muy satisfecho

Puede cerrar el cuadro de diálogo si no desea proporcionar comentarios.

Para enviar comentarios, sugerencias o correcciones, use la pestaña Asistencia.

Copyright 2020 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.

Antes de comenzar

  1. Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
  2. .
  3. Los labs tienen un límite de tiempo y no tienen la función de pausa. Si finalizas el lab, deberás reiniciarlo desde el principio.
  4. En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar

Usa la navegación privada

  1. Copia el nombre de usuario y la contraseña proporcionados para el lab
  2. Haz clic en Abrir la consola en modo privado

Accede a la consola

  1. Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
  2. Acepta las condiciones y omite la página de recursos de recuperación
  3. No hagas clic en Finalizar lab, a menos que lo hayas terminado o quieras reiniciarlo, ya que se borrará tu trabajo y se quitará el proyecto

Este contenido no está disponible en este momento

Te enviaremos una notificación por correo electrónico cuando esté disponible

¡Genial!

Nos comunicaremos contigo por correo electrónico si está disponible

Un lab a la vez

Confirma para finalizar todos los labs existentes y comenzar este

Usa la navegación privada para ejecutar el lab

Usa una ventana de navegación privada o de Incógnito para ejecutar el lab. Así evitarás cualquier conflicto entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.