Está en la página 1de 7

Procesamiento ETL con Dataflow y

BigQuery
Comprobar los permisos del proyecto
Antes de comenzar a trabajar en Google Cloud, debemos asegurarnos que
el proyecto tenga los permisos correctos dentro de Identity and Access
Management (IAM).
1. En la consola de Google Cloud, en el menú de navegación ( ),
hacer clic en IAM y administración > IAM.
2. Confirmar que la cuenta de servicio de cómputo predeterminada
{project-number}-compute@developer.gserviceaccount.com esté
presente y tenga asignada la función de editor. El prefijo de la cuenta
es el número del proyecto, que se puede encontrar en Menú de
navegación > Inicio.
Asegurarse que la API de Dataflow esté habilitada correctamente
Algunas veces el API de Dataflow puede presentar errores. Para garantizar
el acceso a la API necesaria, reiniciar la conexión a la API de Dataflow.

1. En Cloud Console, ingresa "Dataflow API" en la barra de búsqueda


superior. Haga clic en el resultado de la API de flujo de datos.
2. Clic en Administrar (Manage).
3. Haga clic en Deshabilitar API (Disable API).

Si se le pide que confirme, haga clic en Desactivar.


4. Haga clic en Habilitar. Cuando la API se haya habilitado nuevamente,
la página mostrará la opción para deshabilitar.

Configurar algunas variables de entorno

Crear una variable de entorno para el ID de proyecto:

export PROJECT=<PROJECT-ID>
gcloud config set project $PROJECT

gsutil mb -c regional -l us-central1 gs://$PROJECT


mkdir dataflow-python

Copiar archivos al bucket

Usaremos el comando gsutil para copiar archivos en el bucket de Cloud


Storage que acabamos de crear:

gsutil cp gs://spls/gsp290/data_files/usa_names.csv
gs://$PROJECT/data_files/
gsutil cp gs://spls/gsp290/data_files/head_usa_names.csv
gs://$PROJECT/data_files/
Crear el dataset de BigQuery

Crearemos un dataset en BigQuery llamado lake. Aquí es donde se


cargarán todas las tablas en BigQuery:

bq mk lake

Construir un pipeline de Dataflow

Ahora vamos a crear un flujo de datos que ingestará datos en la tabla de


BigQuery. Podemos usar el editor de código integrado para ver y editar el
código en la consola de Google Cloud.
Los pipelines que vamos a construir siguen la siguiente secuencia:

Ingestión de Datos

Crearemos un pipeline de Dataflow con un origen TextIO y un destino de


BigQueryIO para ingerir datos en BigQuery. Más específicamente, haremos
lo siguiente:
● Consumir los archivos de Cloud Storage.
● Filtrar la fila de encabezado en los archivos.
● Convertir las líneas leídas en objetos de diccionario.
● Enviar las filas a BigQuery.

Ejecutar el pipeline de Apache Beam

Ejecutemos lo siguiente para configurar el entorno de python:

cd dataflow-python/
# Configuramos el entorno de python.
# Pip is una herramienta, parecida a Maven en Java
sudo pip3 install virtualenv
#Dataflow requiere python 3.7
virtualenv -p python3 venv
source venv/bin/activate
pip install apache-beam[gcp]==2.24.0

Ejecutemos el pipeline de Dataflow. Los siguientes comandos crearán los


workers requeridos y los apagará cuando estén completos:

python data_ingestion.py \
--project=$PROJECT \
--region=us-central1 \
--runner=DataflowRunner \
--staging_location=gs://$PROJECT/test \
--temp_location gs://$PROJECT/test \
--input gs://$PROJECT/data_files/head_usa_names.csv \
--save_main_session

Abrimos Dataflow

Clic en el nombre del job para ver su progreso. Una vez que el estado del
job sea Success vamos a BigQuery (Menú de navegación > BigQuery) y
veremos que los datos estén cargados.
Clic en el nombre del proyecto para ver la tabla usa_names debajo del
dataset lake.

Transformación de Datos

Ahora crearemos un pipeline de Dataflow con un origen de TextIO y un


destino de BigQueryIO para ingerir datos en BigQuery. Específicamente
haremos lo siguiente:
● Consumir los archivos de Cloud Storage.
● Convertir las líneas leídas en objetos de diccionario.
● Transformar los datos que contienen el año a un formato que
BigQuery entienda como una fecha.
● Enviar las filas a BigQuery.

Ejecutar el pipeline de Apache Beam

python data_transformation.py \
--project=$PROJECT \
--region=us-central1 \
--runner=DataflowRunner \
--staging_location=gs://$PROJECT/test \
--temp_location gs://$PROJECT/test \
--input gs://$PROJECT/data_files/head_usa_names.csv \
--save_main_session

En Dataflow, clic en el nombre del job para ver su progreso. Una vez que el
estado del job sea Success vamos a BigQuery (Menú de navegación >
BigQuery) y veremos que los datos estén cargados en una tabla llamada
usa_names_transformed.

Enriquecimiento de Datos

Crearemos nuevamente un pipeline de Dataflow con un origen de TextIO y


un destino de BigQueryIO para ingerir datos en BigQuery. Específicamente
haremos lo siguiente:

● Consumir los archivos de Cloud Storage.


● Filtrar la fila de encabezado en los archivos.
● Convertir las líneas leídas en objetos de diccionario.
● Enviar las filas a BigQuery.

python data_enrichment.py \
--project=$PROJECT \
--region=us-central1 \
--runner=DataflowRunner \
--staging_location=gs://$PROJECT/test \
--temp_location gs://$PROJECT/test \
--input gs://$PROJECT/data_files/head_usa_names.csv \
--save_main_session

También podría gustarte