arrow_back

Procesamiento de datos sin servidores con Dataflow: Cómo usar Dataflow SQL para realizar análisis por lotes (Python)

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 realizar análisis por lotes (Python)

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
  • Escribir una canalización que use SQL para agregar el tráfico del sitio por minuto

Configuración y requisitos

Antes de hacer clic en el botón Comenzar lab

Nota: Lee estas instrucciones.

Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.

En este lab práctico de Qwiklabs, se te proporcionarán credenciales temporales nuevas para acceder a Google Cloud y realizar las actividades en un entorno de nube real, no en uno de simulación o demostración.

Requisitos

Para completar este lab, necesitarás lo siguiente:

  • Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
  • Tiempo para completar el lab
Nota: Si ya tienes un proyecto o una cuenta personal de Google Cloud, no los uses para el lab. Nota: Si usas una Pixelbook, abre una ventana de incógnito para ejecutar el lab.

Cómo iniciar tu lab y acceder a la consola

  1. Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá una ventana emergente para que selecciones tu forma de pago. A la izquierda, verás un panel con las credenciales temporales que debes usar para este lab.

    Panel de credenciales

  2. Copia el nombre de usuario y, luego, haz clic en Abrir la consola de Google. El lab inicia los recursos y abre otra pestaña que muestra la página Elige una cuenta.

    Sugerencia: Abre las pestañas en ventanas separadas, una junto a la otra.
  3. En la página Elige una cuenta, haz clic en Usar otra cuenta. Se abrirá la página de acceso.

    Cuadro de diálogo Elige una cuenta el que se destaca la opción Usar otra cuenta

  4. Pega el nombre de usuario que copiaste del panel Detalles de la conexión. Luego, copia y pega la contraseña.

Nota: Debes usar las credenciales del panel Detalles de la conexión. No uses tus credenciales de Google Cloud Skills Boost. Si tienes una cuenta propia de Google Cloud, no la utilices para este lab para no incurrir en cargos.
  1. Haz clic para avanzar por las páginas siguientes:
  • Acepta los Términos y Condiciones.
  • No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
  • No te registres para obtener pruebas gratuitas.

Después de un momento, se abrirá la consola de Cloud en esta pestaña.

Nota: Para ver el menú con una lista de los productos y servicios de Google Cloud, haz clic en el menú de navegación que se encuentra en la parte superior izquierda de la pantalla. Menú de la consola de Cloud

Configuración del entorno de desarrollo basado en notebooks de Jupyter

En este lab, ejecutarás todos los comandos en una terminal del notebook.

  1. En el menú de navegación de la consola de Google Cloud, haz clic en Vertex AI > Workbench.

  2. Haz clic en Habilitar API de Notebooks.

  3. En la página de Workbench, selecciona NOTEBOOKS ADMINISTRADOS POR EL USUARIO y haz clic en CREAR NUEVO.

  4. En el cuadro de diálogo Instancia nueva que se muestra, establece la región en y la zona en .

  5. En Entorno, selecciona Apache Beam.

  6. Haz clic en CREAR en la parte inferior del cuadro de diálogo.

Nota: El aprovisionamiento completo del entorno tarda de 3 a 5 minutos. Espera hasta que se complete este paso. Nota: Haz clic en Habilitar API de Notebooks para habilitarla.
  1. Cuando el entorno esté listo, haz clic en el vínculo ABRIR JUPYTERLAB que se encuentra junto al nombre del notebook. Esto abrirá tu entorno en una nueva pestaña del navegador.

IDE_link

  1. Luego, haz clic en Terminal. Esto abrirá una terminal en la que podrás ejecutar todos los comandos del lab.

Abre la terminal

Descarga el repositorio de código

A continuación, descargarás un repositorio de código que usarás en este lab.

  1. En la terminal que acabas de abrir, ingresa lo siguiente:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst cd /home/jupyter/training-data-analyst/quests/dataflow_python/
  1. En el panel izquierdo de tu entorno de notebook, en el navegador de archivos, verás que se agregó el repo training-data-analyst.

  2. Navega al repo clonado /training-data-analyst/quests/dataflow_python/. Verás una carpeta para cada lab. Cada una de ellas se divide en una subcarpeta lab con un código que debes completar y una subcarpeta solution con un ejemplo viable que puedes consultar como referencia si no sabes cómo continuar.

Opción Explorador destacada en el menú Ver expandido

Nota: Para abrir un archivo y editarlo, simplemente debes navegar al archivo y hacer clic en él. Se abrirá el archivo, en el que puedes agregar o modificar código.

Haz clic en Revisar mi progreso para verificar el objetivo. Crea una instancia de notebook y clona el repo del curso

Parte 1: Agrega tráfico del sitio por usuario con SQL

En esta parte del lab, reescribirás tu canalización anterior de BatchUserTraffic para que realice lo siguiente:

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

Tarea 1. Genera datos sintéticos

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

  • En la terminal del IDE, cambia al directorio que usarás en este lab:
# Change directory into the lab cd 4_SQL_Batch_Analytics/lab export BASE_DIR=$(pwd)

Configura el entorno virtual y las dependencias

Antes de comenzar a editar el código de la canalización en sí, debes asegurarte de haber instalado las dependencias necesarias.

  1. En tu terminal, ejecuta el siguiente comando para crear un entorno virtual para tu trabajo en este lab:
sudo apt-get update && sudo apt-get install -y python3-venv # Create and activate virtual environment python3 -m venv df-env source df-env/bin/activate
  1. Luego, instala los paquetes que necesitarás para ejecutar tu canalización:
python3 -m pip install -q --upgrade pip setuptools wheel python3 -m pip install apache-beam[gcp]
  1. Asegúrate de que estén habilitadas las APIs de Dataflow y Data Catalog:
gcloud services enable dataflow.googleapis.com gcloud services enable datacatalog.googleapis.com

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

La secuencia de comandos crea un archivo llamado events.json que contiene líneas similares a las siguientes:

{"user_id": "-6434255326544341291", "ip": "192.175.49.116", "timestamp": "2019-06-19T16:06:45.118306Z", "http_request": "\"GET eucharya.html HTTP/1.0\"", "lat": 37.751, "lng": -97.822, "http_response": 200, "user_agent": "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.01; Trident/5.1)", "num_bytes": 182}

Luego, copiarás automáticamente este archivo en tu bucket de Google Cloud Storage en .

  • Navegua a Google Cloud Storage y confirma que tu bucket de almacenamiento contenga un archivo llamado events.json.

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

Tarea 2. Agrega dependencias de SQL

  1. En tu Explorador de archivos, navega a training-data-analyst/quests/dataflow_python/4_SQL_Batch_Analytics/lab/ y abre el archivo batch_user_traffic_SQL_pipeline.py.

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 mediante SQL. Para ello, usarás SqlTransform en lugar de las transformaciones basadas en Python.

  1. Agrega la siguiente declaración de importación en batch_user_traffic_SQL_pipeline.py:
from apache_beam.transforms.sql import SqlTransform
  1. Luego, agrega la siguiente consulta en SQL al archivo en la definición de la variable query:
SELECT user_id, COUNT(*) AS page_views, SUM(num_bytes) as total_bytes, MAX(num_bytes) AS max_bytes, MIN(num_bytes) as min_bytes FROM PCOLLECTION GROUP BY user_id
  1. Luego, completa el siguiente campo #TODO. Usarás este código para escribir una transformación para anotar datos sin procesar en BigQuery:
logs | 'WriteRawToBQ' >> beam.io.WriteToBigQuery( raw_table_name, schema=raw_table_schema, create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED, write_disposition=beam.io.BigQueryDisposition.WRITE_TRUNCATE )

Beam SQL se puede implementar en los dialectos de Apache Calcite (predeterminado) y en los de ZetaSQL. Si bien Dataflow los ejecutará, en este ejemplo implementaremos ZetaSQL, ya que es similar al lenguaje que se usa en BigQuery y también es el dialecto implementado en “Dataflow SQL”, que son consultas de SQL creadas directamente en la IU de Dataflow.

  1. Completa el último campo #TODO. Aplica un SQLTransform con el dialecto ZetaSQL mediante el siguiente código:
SqlTransform(query, dialect='zetasql')
  1. Guarda los cambios que realizaste en el archivo.

Tarea 3. Ejecuta tu canalización

  1. Vuelve a la terminal y ejecuta el siguiente código para ejecutar la canalización:
export PROJECT_ID=$(gcloud config get-value project) export REGION={{{project_0.startup_script.lab_region|Region}}} export BUCKET=gs://${PROJECT_ID} export PIPELINE_FOLDER=${BUCKET} export RUNNER=DataflowRunner export INPUT_PATH=${PIPELINE_FOLDER}/events.json export TABLE_NAME=${PROJECT_ID}:logs.user_traffic export AGGREGATE_TABLE_NAME=${PROJECT_ID}:logs.user_traffic export RAW_TABLE_NAME=${PROJECT_ID}:logs.raw python3 batch_user_traffic_SQL_pipeline.py \ --project=${PROJECT_ID} \ --region=${REGION} \ --staging_location=${PIPELINE_FOLDER}/staging \ --temp_location=${PIPELINE_FOLDER}/temp \ --runner=${RUNNER} \ --experiments=use_runner_v2 \ --input_path=${INPUT_PATH} \ --agg_table_name=${AGGREGATE_TABLE_NAME} \ --raw_table_name=${RAW_TABLE_NAME}
  1. Ve al 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.

  3. 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. Agrega tráfico del sitio por usuario con SQL

Parte 2: Agrega tráfico del sitio por minuto con SQL

En esta parte del lab, reescribirás tu canalización anterior de BatchMinuteTraffic para que realice lo siguiente:

  • Lea el tráfico del día desde un archivo de Cloud Storage
  • Convierta cada evento en un objeto CommonLog y, luego, agregue un atributo de marca de tiempo de Joda
  • Use SQL en lugar de transformaciones de Java para volver a sumar por ventana la cantidad de aciertos totales por minutoInconsistent tense with other similar lists.
  • Escriba los datos resultantes en BigQuery

Tarea 1. Agrega el campo de marca de tiempo a la fila de CommonLog

En esta tarea, agregarás un campo de marca de tiempo de Joda a tu objeto CommonLog y lo convertirás de forma implícita en un objeto Row genérico.

Las importaciones y opciones correspondientes ya se configuraron para usar ZetaSQL. Se creó una canalización con pasos para transferir y escribir los datos, pero no para transformarlos ni agregarlos. En el explorador de archivos del IDE, navega a training-data-analyst/quests/dataflow_python/4_SQL_Batch_Analytics/lab/ y abre el archivo batch_minute_user_SQL_pipeline.py.

  1. En el primer campo #TODO, agrega la marca de tiempo con formato como una cadena:
ts = datetime.strptime(element.ts[:-8], "%Y-%m-%dT%H:%M:%S") ts = datetime.strftime(ts, "%Y-%m-%d %H:%M:%S")

Ten en cuenta que, cuando se usa el SDK de Python, en la actualidad no se pueden pasar directamente los objetos de tipo datetime a una SqlTransform. En cambio, convertiremos el objeto en una cadena con strftime y, luego, en SQL, usaremos la función TIMESTAMP.

  1. A continuación, agrega la siguiente consulta en SQL:
SELECT COUNT(*) AS page_views, STRING(window_start) AS start_time FROM TUMBLE( (SELECT TIMESTAMP(ts) AS ts FROM PCOLLECTION), DESCRIPTOR(ts), 'INTERVAL 1 MINUTE') GROUP BY window_start Nota: En esta consulta en SQL, convertimos nuestro campo ts para escribir TIMESTAMP y usarlo como la marca de tiempo del evento para nuestras ventanas fijas de un minuto. TUMBLE genera el campo window_start, que también es del tipo TIMESTAMP. Debido al problema que mencionamos antes con el SDK de Python, debemos convertir el campo en una STRING antes de enviar la PCollection resultante a las transformaciones de Python.
  1. Para el siguiente campo #TODO, aplica un SQLTransform con el dialecto ZetaSQL mediante el siguiente código:
SqlTransform(query, dialect='zetasql')

Tarea 2. Ejecuta tu canalización

  1. En tu terminal, ejecuta el siguiente código para ejecutar la canalización:
export PROJECT_ID=$(gcloud config get-value project) export REGION={{{project_0.startup_script.lab_region|Region}}} export BUCKET=gs://${PROJECT_ID} export PIPELINE_FOLDER=${BUCKET} export RUNNER=DataflowRunner export INPUT_PATH=${PIPELINE_FOLDER}/events.json export TABLE_NAME=${PROJECT_ID}:logs.minute_traffic python3 batch_minute_traffic_SQL_pipeline.py \ --project=${PROJECT_ID} \ --region={{{project_0.startup_script.lab_region|Region}}} \ --stagingLocation=${PIPELINE_FOLDER}/staging \ --tempLocation=${PIPELINE_FOLDER}/temp \ --runner=${RUNNER} \ --inputPath=${INPUT_PATH} \ --tableName=${TABLE_NAME} \ --experiments=use_runner_v2
  1. En la consola de Cloud, navega al menú de navegación > Dataflow para ver el estado de tu canalización.

  2. Una vez finalizada la canalización, dirígete a la IU de BigQuery para consultar las tablas logs.minute_traffic resultantes. Como alternativa, puedes consultar desde la terminal:

bq head -n 10 $PROJECT_ID:logs.minute_traffic

Haz clic en Revisar mi progreso para verificar el objetivo. Agrega tráfico del sitio por minuto 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.