arrow_back

Cómo optimizar el costo y el rendimiento de BigQuery v1.5

Acceder Unirse
Quick tip: Review the prerequisites before you run the lab
Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the student account, which may cause extra charges incurred to your personal account.
Pon a prueba tus conocimientos y compártelos con nuestra comunidad
done
Obtén acceso a más de 700 labs prácticos, insignias de habilidad y cursos

Cómo optimizar el costo y el rendimiento de BigQuery v1.5

Lab 50 minutos universal_currency_alt 5 créditos show_chart Introductorio
info Es posible que este lab incorpore herramientas de IA para facilitar tu aprendizaje.
Pon a prueba tus conocimientos y compártelos con nuestra comunidad
done
Obtén acceso a más de 700 labs prácticos, insignias de habilidad y cursos

Descripción general

BigQuery es la base de datos analítica de bajo costo, no-ops y completamente administrada de Google. Con BigQuery, puedes consultar muchos terabytes de datos sin tener que administrar infraestructuras y sin necesitar un administrador de base de datos. BigQuery usa SQL y puede aprovechar el modelo de pago por uso. BigQuery te permite enfocarte en el análisis de datos para buscar estadísticas valiosas.

En este lab, nos enfocaremos en cómo diseñar un almacén de datos para mejorar el rendimiento de las consultas. Además, compararás un esquema relacional tradicional, al que se le aplicaron operaciones JOIN, con un esquema desnormalizado. También usarás el plan de ejecución de consultas de BigQuery para evaluar de forma cuantitativa las compensaciones de rendimiento.

Actividades

En este lab, aprenderás a realizar estas tareas:

  • Cargar un archivo de valores separados por comas (CSV) en una tabla de BigQuery con la IU web
  • Cargar un archivo de notación de objeto de JavaScript (JSON) en una tabla de BigQuery con la interfaz de línea de comandos (CLI)
  • Transformar datos y unir (JOIN) tablas con la IU web
  • Almacenar los resultados de la consulta en una tabla de destino
  • Consultar una tabla de destino con la IU web para confirmar que los datos se transformaron y cargaron de forma correcta

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.

Activa Google Cloud Shell

Google Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud.

Google Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.

  1. En la consola de Cloud, en la barra de herramientas superior derecha, haz clic en el botón Abrir Cloud Shell.

  2. Haz clic en Continuar.

El aprovisionamiento y la conexión al entorno demorarán unos minutos. Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. Por ejemplo:

gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con el completado de línea de comando.

  • Puedes solicitar el nombre de la cuenta activa con este comando:
gcloud auth list

Resultado:

Credentialed accounts: - @.com (active)

Resultado de ejemplo:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • Puedes solicitar el ID del proyecto con este comando:
gcloud config list project

Resultado:

[core] project =

Resultado de ejemplo:

[core] project = qwiklabs-gcp-44776a13dea667a6 Nota: La documentación completa de gcloud está disponible en la guía de descripción general de gcloud CLI .

Abra BigQuery en Console

  1. En Google Cloud Console, seleccione el menú de navegación > BigQuery.

Se abrirá el cuadro de mensaje Te damos la bienvenida a BigQuery en Cloud Console, que contiene un vínculo a la guía de inicio rápido y enumera las actualizaciones de la IU.

  1. Haga clic en Listo.

Tarea 1. Crea un nuevo conjunto de datos para almacenar tus tablas

En tu proyecto de BigQuery, crea un nuevo conjunto de datos titulado liquor_sales.

  1. En el panel Explorador, haz clic en el ícono Ver acciones que se encuentra junto al ID del proyecto y elige Crear un conjunto de datos.

Se abrirá el diálogo Crear un conjunto de datos.

  1. Define el ID del conjunto de datos en liquor_sales. Deja las otras opciones con sus valores predeterminados y haz clic en Crear un conjunto de datos.

En el panel izquierdo, verás una tabla liquor_sales en tu proyecto.

Tarea 2. Carga y consulta datos relacionales

En esta sección, medirás el rendimiento de las consultas de datos relacionales en BigQuery.

BigQuery admite consultas JOIN de gran tamaño y el rendimiento de los JOIN es bueno. Sin embargo, BigQuery es un almacén de datos en columnas. El máximo rendimiento se consigue en conjuntos de datos desnormalizados. Dado que el almacenamiento de BigQuery es de bajo costo y escalable, es una buena práctica desnormalizar y unir previamente los conjuntos de datos en tablas homogéneas. En otras palabras, se intercambian recursos informáticos por recursos de almacenamiento (estos últimos son más eficaces y rentables).

En esta sección, harás lo siguiente:

  • Cargar un conjunto de tablas de un esquema relacional (en 3ª forma normal)
  • Ejecutar consultas en las tablas relacionales
  • Observar el rendimiento de las consultas para compararlo con el rendimiento de las mismas consultas en una tabla de un esquema desnormalizado que contiene la misma información

Se cargan tablas que tienen un esquema relacional. El esquema relacional consta de las siguientes tablas:

Nombre de la tabla Descripción
sales Contiene la fecha y las métricas de ventas.
item Es la descripción del artículo vendido.
vendor Es el productor del artículo.
category Es la agrupación a la que pertenece el artículo.
store Es la tienda que vendió el artículo.
county Es el condado donde se vendió el artículo.
convenience_store Es la lista de tiendas que se consideran minimercados.

Este es un diagrama del esquema relacional.

Crea la tabla de ventas

  1. En la sección Explorador, haz clic en el ícono Ver acciones, situado junto al conjunto de datos liquor_sales, elige Abrir, y, a continuación, haz clic en Crear tabla.

  1. En la página Crear tabla de la sección Origen, haz lo siguiente:
  • En Crear tabla desde, elige Google Cloud Storage.
  • Escribe la ruta de acceso al nombre del bucket de Google Cloud Storage:
cloud-training/data-insights-course/labs/optimizing-for-performance/sales.csv
  • En Formato de archivo, elige CSV.
Nota: Si ya creaste una tabla anteriormente, la opción Seleccionar trabajo anterior (Select Previous Job) te permite usar rápidamente tu configuración para crear tablas similares.
  1. En la sección Destino, configura lo siguiente:
  • En Nombre de la tabla, escribe sales.
  • Deja el resto de los campos de destino en sus valores predeterminados.

  1. En la sección Esquema, configura lo siguiente:
  • Haz clic en Editar como texto.
  • Copia y pega el siguiente esquema:
[ { "name": "date", "type": "STRING" }, { "name": "store", "type": "STRING" }, { "name": "category", "type": "STRING" }, { "name": "vendor_no", "type": "STRING" }, { "name": "item", "type": "STRING" }, { "name": "state_btl_cost", "type": "FLOAT" }, { "name": "btl_price", "type": "FLOAT" }, { "name": "bottle_qty", "type": "INTEGER" }, { "name": "total", "type": "FLOAT" } ]
  1. Haz clic en Opciones avanzadas para visualizar y configurar estas opciones:
  • En Delimitador de campos, verifica que la opción Coma esté seleccionada.
  • Dado que sales.csv contiene una única fila de encabezado, establece las Filas del encabezado que se omitirán, en 1.
  • Marca Saltos de línea en secciones entrecomilladas.
  • Acepta los valores predeterminados restantes y haz clic en Crear tabla.

BigQuery generará un trabajo de carga para crear la tabla y subir los datos a ella (esto puede tardar algunos segundos).

  1. Haz clic en Historial personal para seguir el progreso del trabajo.

Crea las tablas restantes

Crea las tablas restantes en el esquema relacional con la línea de comandos de Cloud Shell.

  1. Crea la tabla de category:
bq load --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines liquor_sales.category gs://cloud-training/data-insights-course/labs/optimizing-for-performance/category.csv category:STRING,category_name:STRING
  1. Crea la tabla convenience_store:
bq load --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines liquor_sales.convenience_store gs://cloud-training/data-insights-course/labs/optimizing-for-performance/convenience_store.csv store:STRING
  1. Crea la tabla county:
bq load --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines liquor_sales.county gs://cloud-training/data-insights-course/labs/optimizing-for-performance/county.csv county_number:STRING,county:STRING
  1. Crea la tabla item:
bq load --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines liquor_sales.item gs://cloud-training/data-insights-course/labs/optimizing-for-performance/item.csv item:STRING,description:string,pack:INTEGER,liter_size:INTEGER
  1. Crea la tabla store:
bq load --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines liquor_sales.store gs://cloud-training/data-insights-course/labs/optimizing-for-performance/store.csv store:STRING,name:STRING,address:STRING,city:STRING,zipcode:STRING,store_location:STRING,county_number:STRING
  1. Crea la tabla vendor:
bq load --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines liquor_sales.vendor gs://cloud-training/data-insights-course/labs/optimizing-for-performance/vendor.csv vendor_no:STRING,vendor:STRING
  1. Ve a la IU web de BigQuery. Confirma que ves las nuevas tablas cargadas en tu conjunto de datos liquor_sales. Actualiza el navegador si es necesario.

Consulta datos relacionales

A continuación, usa el Editor de consultas para consultar los datos.

  1. Bajo el cuadro de código Editor de consultas, haz clic en Más > Configuración de consulta.

  2. En la sección Administración de recursos, Preferencia de caché, desmarca la casilla de verificación Usar resultados almacenados en caché y haz clic en Guardar. Si tienes que ejecutar la consulta más de una vez, no debes usar los resultados almacenados en caché.

  3. En la ventana Editor de consultas, escribe la siguiente consulta en las tablas relacionales y haz clic en Ejecutar:

#standardSQL SELECT gstore.county AS county, ROUND(cstore_total/gstore_total * 100,1) AS cstore_percentage FROM ( SELECT cy.county AS county, SUM(total) AS gstore_total FROM `liquor_sales.sales` AS s JOIN `liquor_sales.store` AS st ON s.store = st.store JOIN `liquor_sales.county` AS cy ON st.county_number = cy.county_number LEFT OUTER JOIN `liquor_sales.convenience_store` AS c ON s.store = c.store WHERE c.store IS NULL GROUP BY county) AS gstore JOIN ( SELECT cy.county AS county, SUM(total) AS cstore_total FROM `liquor_sales.sales` AS s JOIN `liquor_sales.store` AS st ON s.store = st.store JOIN `liquor_sales.county` AS cy ON st.county_number = cy.county_number LEFT OUTER JOIN `liquor_sales.convenience_store` AS c ON s.store = c.store WHERE c.store IS NOT NULL GROUP BY county) AS hstore ON gstore.county = hstore.county
  1. En la parte inferior, en la sección Resultados de la consulta, haz clic en la pestaña Resultados. Observa la hora de finalización de la consulta. A continuación, se muestra un ejemplo (el tiempo de ejecución puede variar).

Esto se comparará con la hora de consulta de un conjunto de datos acoplado en secciones posteriores.

Tarea 3. Carga y consulta datos acoplados

En esta sección, se desnormalizan los esquemas y se analizan las ventas de bebidas alcohólicas del estado de Iowa con los datos acoplados. La ejecución de esta consulta en los datos acoplados debería ser más rápida que en los datos relacionales. Deberás anotar la hora para comparar y confirmarlo.

Un esquema desnormalizado acopla todos los datos relacionales en una única fila. Por ejemplo, en el esquema desnormalizado, county_number, county, store, name, address, city, zipcode, store_location, county_number y cstore son campos que contienen todos los campos de las tablas County, Store y Convenience_store.

Nota: El campo cstore (en el esquema desnormalizado) representa el campo convenience_store.store en el esquema relacional anterior. Tiene un valor de Y si una tienda es un minimercado. En caso contrario, es null.

En el siguiente diagrama, se muestra el esquema desnormalizado.

Crea la tabla iowa_sales_denorm

  1. En el panel izquierdo, elige el conjunto de datos liquor_sales y haz clic en Crear tabla a la derecha.

Se abrirá el diálogo Crear tabla.

  1. En la sección Origen, configura lo siguiente:
  • En Crear tabla desde, elige Google Cloud Storage.
  • Escribe la ruta de acceso al nombre del bucket de Google Cloud Storage:
cloud-training/data-insights-course/labs/optimizing-for-performance/iowa_sales_denorm.csv
  • En Formato de archivo, elige CSV.
  1. Configura la sección Destino de la siguiente manera:
  • En Nombre de la tabla, escribe iowa_sales_denorm.
  • Deja el resto de los campos de destino en sus valores predeterminados.
  1. En la sección Esquema, configura lo siguiente:
  • Haz clic en Editar como texto.
  • Copia y pega el siguiente esquema:
[ { "name": "date", "type": "STRING" }, { "name": "cstore", "type": "STRING" }, { "name": "store", "type": "STRING" }, { "name": "name", "type": "STRING" }, { "name": "address", "type": "STRING" }, { "name": "city", "type": "STRING" }, { "name": "zipcode", "type": "STRING" }, { "name": "store_location", "type": "STRING" }, { "name": "county_number", "type": "STRING" }, { "name": "county", "type": "STRING" }, { "name": "category", "type": "STRING" }, { "name": "category_name", "type": "STRING" }, { "name": "vendor_no", "type": "STRING" }, { "name": "vendor", "type": "STRING" }, { "name": "item", "type": "STRING" }, { "name": "description", "type": "STRING" }, { "name": "pack", "type": "INTEGER" }, { "name": "liter_size", "type": "INTEGER" }, { "name": "state_btl_cost", "type": "FLOAT" }, { "name": "btl_price", "type": "FLOAT" }, { "name": "bottle_qty", "type": "INTEGER" }, { "name": "total", "type": "FLOAT" } ]
  1. Configura la sección Opciones avanzadas, de la siguiente manera:
  • En Delimitador de campos, verifica que la opción Coma esté seleccionada.
  • Dado que iowa_sales_denorm.csv contiene una única fila de encabezado, para Filas del encabezado que se omitirán, escribe 1.
  • Marca Saltos de línea en secciones entrecomilladas.
  • Acepta los valores predeterminados restantes y haz clic en Crear tabla.

BigQuery generará un trabajo de carga para crear la tabla y subir los datos a ella (esto puede tardar algunos segundos).

  1. Haz clic en Historial personal para seguir el progreso del trabajo.

  2. Escribe y ejecuta la siguiente consulta en la tabla con un esquema desnormalizado (esta consulta produce los mismos resultados que la consulta de la sección anterior):

#standardSQL SELECT gstore.county AS county, ROUND(cstore_total/gstore_total * 100,1) AS cstore_percentage FROM ( SELECT county, sum(total) AS gstore_total FROM `liquor_sales.iowa_sales_denorm` WHERE cstore is null GROUP BY county) AS gstore JOIN ( SELECT county, sum(total) AS cstore_total FROM `liquor_sales.iowa_sales_denorm` WHERE cstore is not null GROUP BY county) AS cstore ON gstore.county = cstore.county ORDER BY county
  1. En la parte inferior, en la sección Resultados de la consulta, haz clic en la pestaña Resultados y anota la hora de finalización de la consulta. Esto se comparará con la hora de consulta de un conjunto de datos acoplado en secciones posteriores.

  2. Toma nota del tiempo que tarda en ejecutarse la consulta restando la hora de inicio de la hora de finalización.

Observa que la consulta correspondiente a la tabla con esquema desnormalizado se ejecuta un poco más rápido y tiene una sintaxis más sencilla. Siempre que sea posible, une previamente los conjuntos de datos en tablas homogéneas para optimizar el rendimiento de BigQuery.

Compara el rendimiento de la consulta con los detalles de la ejecución

  1. Elige HISTORIAL DEL PROYECTO.

  2. Haz clic en el primer trabajo de consulta que ejecutaste en el esquema relacional normalizado y, a continuación, haz clic en ABRIR COMO CONSULTA NUEVA.

  3. Elige Detalles de la ejecución.

El plan de ejecución tiene dos secciones principales:

  • Tiempo promedio y máximo de los trabajadores por tipo de trabajo y por etapa

  • Comparativas de rendimiento de alto nivel

    • Tiempo transcurrido: Es el tiempo total de procesamiento de la consulta.
    • Tiempo de ranura consumido: Se refiere al tiempo que se tardaría en procesar la consulta si no se procesara en paralelo en varias máquinas.
    • Bytes redistribuidos: Es una redistribución automática de datos en la memoria para el procesamiento paralelo masivo.
    • Bytes volcados al disco: Si los datos no se pueden procesar en memoria, indica cuánto se volcó al disco persistente (por lo general, la culpa es del sesgo de los datos).
  1. En primer lugar, compara los tiempos de las comparativas entre cada una de las consultas que ejecutamos.

  1. A continuación, compara el tipo de trabajo al que los trabajadores dedicaron más tiempo.

Consulta 1. Detalles de ejecución del esquema relacional

Consulta 2. Detalles de ejecución del esquema desnormalizado

Observaciones:

  • La consulta desnormalizada (nº 2) es más rápida y usa menos tiempo de ranura para obtener el mismo resultado.
  • La consulta relacional (nº 1) tiene muchas más etapas de entrada y emplea la mayor parte del tiempo de trabajo en unir los conjuntos de datos.
  • La consulta desnormalizada (nº 2) es la que más tiempo dedica a la lectura de los datos de entrada y a la salida de los resultados. El tiempo empleado en agregaciones y uniones es mínimo.
  • Ninguna de las dos consultas dio como resultado bytes volcados al disco, lo que sugiere que es probable que nuestros conjuntos de datos no estén sesgados (o sean lo suficientemente grandes como para que un trabajador individual los vuelque de la memoria).
Nota: Las consultas que se usan en este lab son solo una demostración. La diferencia de tiempo entre las 2 consultas se hace más significativa a medida que aumenta el tamaño de los conjuntos de datos y la complejidad de las cláusulas JOIN.

Para obtener más información sobre los detalles de ejecución y la optimización del plan de consulta, puedes consultar la guía de referencia del Plan de consulta y cronograma.

Evita los antipatrones del rendimiento

Ahora que ya sabes sobre el diseño eficaz de esquemas de bases de datos, es hora de practicar la optimización de algunas consultas mal escritas.

La siguiente consulta se ejecuta demasiado lento, ¿qué puedes hacer para corregirla?

  1. Copia y pega la siguiente consulta en el Editor de consultas y ejecútala para obtener una comparativa.

Objetivo: Contabilizar todas las organizaciones sin fines de lucro de Estados Unidos que presentaron declaraciones de impuestos en papel (no de forma electrónica) en 2015.

#standardSQL # count all paper filings for 2015 SELECT * FROM `bigquery-public-data.irs_990.irs_990_2015` WHERE UPPER(elf) LIKE '%P%' #Paper Filers in 2015 ORDER BY ein # 86,831 as per pagination count, 23s

¿Qué puedes hacer para mejorar el rendimiento?

  1. Compáralo con la solución siguiente:
#standardSQL SELECT COUNT(*) AS paper_filers FROM `bigquery-public-data.irs_990.irs_990_2015` WHERE elf = 'P' #Paper Filers in 2015 # 86,831 at 2s /* Remove ORDER BY when there is no limit Use Aggregation Functions Examine data and confirmed P always uppercase */
  1. Ejecuta tu versión actualizada y controla el tiempo.

  2. Borra los datos del Editor de consultas.

Esta nueva consulta se ejecuta de forma lenta. Ejecuta la consulta para obtener una comparativa y detenla a los 30 segundos si no se completa.

Objetivo: Unir la tabla de presentaciones de declaraciones de impuestos con la tabla de nombres de organizaciones. Para esto, usa el número de identificación del empleador (ein) como campo de enlace, además de obtener los nombres de todas las organizaciones que presentaron declaraciones en 2015.

  1. Agrega esta consulta en el Editor de consultas y, a continuación, haz clic en Ejecutar:
#standardSQL # get all Organization names who filed in 2015 SELECT tax.ein, name FROM `bigquery-public-data.irs_990.irs_990_2015` tax JOIN `bigquery-public-data.irs_990.irs_990_ein` org ON tax.tax_pd = org.tax_period
  1. Corrige la consulta anterior. Sugerencia: Recuerda la condición del campo JOIN correcta para nuestro esquema.

Compáralo con la solución siguiente.

  1. Agrega esta consulta en el Editor de consultas y, a continuación, haz clic en Ejecutar:
#standardSQL # get all Organization names who filed in 2015 SELECT tax.ein, name FROM `bigquery-public-data.irs_990.irs_990_2015` tax JOIN `bigquery-public-data.irs_990.irs_990_ein` org ON tax.ein = org.ein # 86,831 as per pagination count, 23s /* Incorrect JOIN key resulted in CROSS JOIN Correct result: 294,374 at 13s */
  1. Ejecuta tu versión actualizada y controla el tiempo.

¿Ves alguna mejora? ¿Con qué rapidez se ejecuta la consulta?

Lecciones aprendidas

¡Felicitaciones!

Con esto, se concluye este lab práctico sobre el Diseño de esquemas efectivos en BigQuery y rendimiento de consultas. Cargaste archivos CVS y JSON en tablas de BigQuery; transformaste datos y uniste tablas; almacenaste resultados de consultas; y luego confirmaste que los datos se transformaron y cargaron de forma correcta.

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.

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

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

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.