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
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.
Accede a Qwiklabs desde una ventana de incógnito.
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.
Cuando esté listo, haga clic en Comenzar lab.
Anote las credenciales del lab (el nombre de usuario y la contraseña). Las usarás para acceder a la consola de Google Cloud.
Haga clic en Abrir Google Console.
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.
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.
En la consola de Cloud, en la barra de herramientas superior derecha, haz clic en el botón Abrir Cloud Shell.
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:
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.
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.
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.
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
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.
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:
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.
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.
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.
Bajo el cuadro de código Editor de consultas, haz clic en Más > Configuración de consulta.
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é.
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
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
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.
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:
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).
Haz clic en Historial personal para seguir el progreso del trabajo.
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
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.
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
Elige HISTORIAL DEL PROYECTO.
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.
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).
En primer lugar, compara los tiempos de las comparativas entre cada una de las consultas que ejecutamos.
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?
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?
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
*/
Ejecuta tu versión actualizada y controla el tiempo.
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.
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
Corrige la consulta anterior. Sugerencia: Recuerda la condición del campo JOIN correcta para nuestro esquema.
Compáralo con la solución siguiente.
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
*/
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.
Labs create a Google Cloud project and resources for a fixed time
Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
On the top left of your screen, click Start lab to begin
Use private browsing
Copy the provided Username and Password for the lab
Click Open console in private mode
Sign in to the Console
Sign in using your lab credentials. Using other credentials might cause errors or incur charges.
Accept the terms, and skip the recovery resource page
Don't click End lab unless you've finished the lab or want to restart it, as it will clear your work and remove the project
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.
En este lab, nos enfocaremos en cómo diseñar un almacén de datos para mejorar el rendimiento de las consultas. Compararás un esquema relacional tradicional, al que se le aplicaron operaciones JOIN, con un esquema desnormalizado y usarás el plan de ejecución de consultas de BigQuery para evaluar de forma cuantitativa las compensaciones de rendimiento.
Duración:
0 min de configuración
·
Acceso por 50 min
·
50 min para completar