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
-
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.

-
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.
-
En la página Elige una cuenta, haz clic en Usar otra cuenta. Se abrirá la página de acceso.

-
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.
- 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.
Configuración del entorno de desarrollo basado en notebooks de Jupyter
En este lab, ejecutarás todos los comandos en una terminal del notebook.
-
En el menú de navegación de la consola de Google Cloud, haz clic en Vertex AI > Workbench.
-
Haz clic en Habilitar API de Notebooks.
-
En la página de Workbench, selecciona NOTEBOOKS ADMINISTRADOS POR EL USUARIO y haz clic en CREAR NUEVO.
-
En el cuadro de diálogo Instancia nueva que se muestra, establece la región en y la zona en .
-
En Entorno, selecciona Apache Beam.
-
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.
- 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.

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

Descarga el repositorio de código
A continuación, descargarás un repositorio de código que usarás en este lab.
- 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/
-
En el panel izquierdo de tu entorno de notebook, en el navegador de archivos, verás que se agregó el repo training-data-analyst.
-
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.

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.
- 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
- 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]
- 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
- 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.
- Agrega la siguiente declaración de importación en
batch_user_traffic_SQL_pipeline.py
:
from apache_beam.transforms.sql import SqlTransform
- 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
- 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.
- Completa el último campo
#TODO
. Aplica un SQLTransform con el dialecto ZetaSQL mediante el siguiente código:
SqlTransform(query, dialect='zetasql')
- Guarda los cambios que realizaste en el archivo.
Tarea 3. Ejecuta tu canalización
- 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}
-
Ve al Menú de navegación > Dataflow para ver el estado de tu canalización.
-
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.
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
.
- 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
.
- 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.
- 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
- 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
-
En la consola de Cloud, navega al menú de navegación > Dataflow para ver el estado de tu canalización.
-
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.