arrow_back

Cómo trabajar con JSON, arrays y structs en BigQuery

Acceder Unirse
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 trabajar con JSON, arrays y structs en BigQuery

Lab 1 hora 15 minutos universal_currency_alt 5 créditos show_chart Intermedio
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

GSP416

Labs de autoaprendizaje de Google Cloud

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 permite que te enfoques en el análisis de datos para encontrar estadísticas valiosas.

En este lab, trabajas en profundidad con datos semiestructurados (transferencia de archivos de tipo JSON y arrays) dentro de BigQuery. Desnormalizar tu esquema en una sola tabla con campos repetidos y anidados puede mejorar el rendimiento; no obstante, puede ser difícil usar la sintaxis de SQL para trabajar con arrays. Practicarás cómo cargar, consultar y desanidar diversos conjuntos de datos semiestructurados, además de cómo solucionar problemas en ellos.

Actividades

En este lab, aprenderás a hacer lo siguiente:

  • Cargar, consultar y desanidar datos semiestructurados
  • Solucionar problemas relacionados con consultas de datos semiestructurados

Configuración y requisitos

Antes de hacer clic en el botón Comenzar lab

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.

Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.

Para completar este lab, necesitarás lo siguiente:

  • Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
Nota: Usa una ventana de navegador privada o de Incógnito para ejecutar este 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.
  • Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Nota: Si ya tienes un proyecto o una cuenta personal de Google Cloud, no los uses en este lab para evitar cargos adicionales en tu cuenta.

Cómo iniciar tu lab y acceder a la consola de Google Cloud

  1. Haga clic en el botón Comenzar lab. Si debe pagar por el lab, se abrirá una ventana emergente para que seleccione su forma de pago. A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:

    • El botón Abrir la consola de Google Cloud
    • El tiempo restante
    • Las credenciales temporales que debe usar para el lab
    • Otra información para completar el lab, si es necesaria
  2. Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).

    El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.

    Sugerencia: Ordene las pestañas en ventanas separadas, una junto a la otra.

    Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta.
  3. De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.

    {{{user_0.username | "Username"}}}

    También puedes encontrar el nombre de usuario en el panel Detalles del lab.

  4. Haz clic en Siguiente.

  5. Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.

    {{{user_0.password | "Password"}}}

    También puedes encontrar la contraseña en el panel Detalles del lab.

  6. Haz clic en Siguiente.

    Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud. Nota: Usar tu propia Cuenta de Google podría generar cargos adicionales.
  7. Haga 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 Google Cloud en esta pestaña.

Nota: Para ver un menú con una lista de productos y servicios de Google Cloud, haz clic en el menú de navegación que se encuentra en la parte superior izquierda. Ícono del menú de navegación

Cómo abrir la consola de BigQuery

  1. En la consola de Google Cloud, seleccione elmenú de navegación > BigQuery.

Se abrirá el cuadro de mensaje Te damos la bienvenida a BigQuery en la consola de Cloud. Este cuadro de mensaje contiene un vínculo a la guía de inicio rápido y las notas de la versión.

  1. Haga clic en Listo.

Se abrirá la consola de BigQuery.

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

  1. En BigQuery, haz clic en los tres puntos que aparecen junto al ID del proyecto y selecciona Crear conjunto de datos:

Se destaca la opción Crear conjunto de datos

  1. Asígnale el nombre fruit_store al nuevo conjunto de datos. Deja las otras opciones con sus valores predeterminados (Ubicación de los datos y Vencimiento predeterminado).

  2. Haz clic en Crear conjunto de datos.

Tarea 2: Practica cómo trabajar con arrays en SQL

Normalmente, en SQL habrá un único valor para cada fila, como en esta lista de frutas:

Fila

Fruit

1

raspberry

2

blackberry

3

strawberry

4

cherry

¿Qué pasaría si quisieras tener una lista de frutas para cada persona que hay en la tienda? Tal vez se vería así:

Fila

Fruit

Person

1

raspberry

sally

2

blackberry

sally

3

strawberry

sally

4

cherry

sally

5

orange

frederick

6

apple

frederick

En una base de datos SQL relacional tradicional, tomarías la decisión de dividir la tabla en dos tablas diferentes de inmediato (Fruit y Person) al ver los nombres que se repiten. Ese proceso se denomina normalización (pasar de una tabla a muchas) y es un enfoque frecuente para bases de datos transaccionales como MySQL.

Para el almacenamiento de datos, los analistas de datos suelen hacer lo opuesto (desnormalización) y unen muchas tablas distintas para crear una gran tabla de informes.

Ahora, aprenderás un enfoque diferente que utiliza campos repetidos para almacenar datos con distintos niveles de detalle en una sola tabla:

Fila

Fruit (array)

Person

1

raspberry

sally

blackberry

strawberry

cherry

2

orange

frederick

apple

¿Qué tiene de extraño la tabla anterior?

  • Solo tiene dos filas.
  • Hay muchos valores de campo para Fruit en una sola fila.
  • Las personas y todos los valores de campo están asociados.

¿Cuál es la estadística clave? El tipo de datos array.

Esta es una forma más sencilla de interpretar el array Fruit:

Fila

Fruit (array)

Person

1

[raspberry, blackberry, strawberry, cherry]

sally

2

[orange, apple]

frederick

Ambas tablas son exactamente iguales. De aquí surgen dos aprendizajes clave:

  • Básicamente, un array es una lista de elementos entre corchetes [ ].
  • BigQuery muestra los arrays visualmente como acoplados. Solo ordena los valores del array verticalmente (ten en cuenta que todos esos valores siguen perteneciendo a una sola fila).

Compruébalo.

  1. Ingresa lo siguiente en el editor de consultas de BigQuery:
#standardSQL SELECT ['raspberry', 'blackberry', 'strawberry', 'cherry'] AS fruit_array
  1. Haz clic en Ejecutar.

  2. Ahora prueba ejecutar esta:

#standardSQL SELECT ['raspberry', 'blackberry', 'strawberry', 'cherry', 1234567] AS fruit_array

Deberías ver un error parecido al siguiente:

Error: Array elements of types {INT64, STRING} do not have a common supertype at [3:1]

Los arrays solo pueden compartir un tipo de datos (todas las cadenas, todos los números).

  1. Esta es la tabla final para ejecutar la consulta:
#standardSQL SELECT person, fruit_array, total_cost FROM `data-to-insights.advanced.fruit_store`;
  1. Haz clic en Ejecutar.

  2. Después de ver los resultados, haz clic en la pestaña JSON para visualizar la estructura anidada de los resultados.

resultados en la página con pestañas de JSON

Cómo cargar archivos JSON semiestructurados a BigQuery

¿Te preguntas cómo puedes transferir un archivo JSON a BigQuery?

Crea una nueva tabla fruit_details en el conjunto de datos.

  1. Haz clic en el conjunto de datos fruit_store.

Ahora verás la opción Crear tabla.

Nota: Es posible que debas ampliar la ventana del navegador para ver la opción Crear tabla.
  1. Agrega los siguientes detalles a la tabla:
  • Fuente: Selecciona Google Cloud Storage en el menú desplegable Crear tabla desde
  • Selecciona un archivo del bucket de Cloud Storage: cloud-training/data-insights-course/labs/optimizing-for-performance/shopping_cart.json
  • Formato de archivo: JSONL (JSON delimitado por líneas nuevas)
  1. Asigna el nombre fruit_details a la nueva tabla.

  2. Marca la casilla de verificación Esquema (Detección automática).

  3. Haz clic en Crear tabla.

En el esquema, observa que fruit_array está marcado como REPEATED, lo cual indica que es un array.

Resumen

  • BigQuery admite arrays de forma nativa.
  • Los valores de los arrays deben tener un mismo tipo de datos.
  • Los arrays se llaman campos REPETIDOS en BigQuery.

Haz clic en Revisar mi progreso para verificar el objetivo. Crear un nuevo conjunto de datos y una tabla para almacenar nuestros datos

Tarea 3: Crea tus propios arrays con ARRAY_AGG()

Si aún no tienes arrays en tus tablas, puedes crearlos.

  1. Copia y pega la siguiente consulta para explorar este conjunto de datos públicos:
SELECT fullVisitorId, date, v2ProductName, pageTitle FROM `data-to-insights.ecommerce.all_sessions` WHERE visitId = 1501570398 ORDER BY date
  1. Haz clic en Ejecutar y visualiza los resultados.

Ahora usa la función ARRAY_AGG() para agregar los valores de nuestra cadena a un array.

  1. Copia y pega la siguiente consulta para explorar este conjunto de datos públicos:
SELECT fullVisitorId, date, ARRAY_AGG(v2ProductName) AS products_viewed, ARRAY_AGG(pageTitle) AS pages_viewed FROM `data-to-insights.ecommerce.all_sessions` WHERE visitId = 1501570398 GROUP BY fullVisitorId, date ORDER BY date
  1. Haz clic en Ejecutar y visualiza los resultados.

  1. A continuación, usa la función ARRAY_LENGTH() para contar la cantidad de páginas y productos que se visualizaron:
SELECT fullVisitorId, date, ARRAY_AGG(v2ProductName) AS products_viewed, ARRAY_LENGTH(ARRAY_AGG(v2ProductName)) AS num_products_viewed, ARRAY_AGG(pageTitle) AS pages_viewed, ARRAY_LENGTH(ARRAY_AGG(pageTitle)) AS num_pages_viewed FROM `data-to-insights.ecommerce.all_sessions` WHERE visitId = 1501570398 GROUP BY fullVisitorId, date ORDER BY date

  1. Luego, anula el duplicado de las páginas y los productos para ver cuántos productos únicos se visualizaron. Para ello, agrega DISTINCT a ARRAY_AGG():
SELECT fullVisitorId, date, ARRAY_AGG(DISTINCT v2ProductName) AS products_viewed, ARRAY_LENGTH(ARRAY_AGG(DISTINCT v2ProductName)) AS distinct_products_viewed, ARRAY_AGG(DISTINCT pageTitle) AS pages_viewed, ARRAY_LENGTH(ARRAY_AGG(DISTINCT pageTitle)) AS distinct_pages_viewed FROM `data-to-insights.ecommerce.all_sessions` WHERE visitId = 1501570398 GROUP BY fullVisitorId, date ORDER BY date

Haz clic en Revisar mi progreso para verificar el objetivo. Ejecutar la consulta para ver cuántos productos únicos se visualizaron

Resumen

Puedes hacer cosas muy útiles con los arrays, como las siguientes:

  • calcular la cantidad de elementos con ARRAY_LENGTH(<array>)
  • anular el duplicado de elementos con ARRAY_AGG(DISTINCT <field>)
  • ordenar elementos con ARRAY_AGG(<field> ORDER BY <field>)
  • limitar ARRAY_AGG(<field> LIMIT 5)

Tarea 4: Consulta tablas que contengan arrays

El conjunto de datos públicos de BigQuery para Google Analytics, bigquery-public-data.google_analytics_sample, tiene muchos más campos y filas que el conjunto de datos de nuestro curso, data-to-insights.ecommerce.all_sessions. Lo más importante es que ya almacena valores de campo, como productos, páginas y transacciones, de forma nativa como ARRAYS.

  1. Copia y pega la siguiente consulta para explorar los datos disponibles y comprobar si puedes encontrar campos con valores repetidos (arrays):
SELECT * FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20170801` WHERE visitId = 1501570398
  1. Ejecuta la consulta.

  2. Desplázate hacia la derecha sobre los resultados hasta que veas el campo hits.product.v2ProductName (en breve hablaremos sobre los distintos alias de campo).

Puede resultar abrumador analizar todos los campos disponibles en el esquema de Google Analytics.

  1. Intenta consultar solo los campos de nombre de las visitas y las páginas como hiciste anteriormente:
SELECT visitId, hits.page.pageTitle FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20170801` WHERE visitId = 1501570398

Verás el siguiente error: Error:Cannot access field page on a value with type ARRAY<STRUCT<hitNumber INT64, time INT64, hour INT64, ...>> at [3:8]

Para consultar campos REPETIDOS (arrays) normalmente, primero deberás volver a dividir los arrays en filas.

Por ejemplo, el array de hits.page.pageTitle está almacenado como una sola fila, de la siguiente manera:

['homepage','product page','checkout']

Sin embargo, tiene que verse así:

['homepage', 'product page', 'checkout']

¿Cómo lo hacemos con SQL?

Respuesta: Utiliza la función UNNEST() en el campo de array:

SELECT DISTINCT visitId, h.page.pageTitle FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20170801`, UNNEST(hits) AS h WHERE visitId = 1501570398 LIMIT 10

Hablaremos sobre UNNEST() más adelante en detalle, pero, por ahora, debes saber lo siguiente:

  • Tienes que utilizar UNNEST() para desanidar los arrays y volver a organizar sus elementos en filas.
  • UNNEST() siempre aparece después del nombre de la tabla en tu cláusula FROM (piénsalo como una tabla previamente unida).

Haz clic en Revisar mi progreso para verificar el objetivo. Ejecutar la consulta para usar UNNEST() en el campo del array

Tarea 5: Introducción a los STRUCTS

Quizás te hayas preguntado por qué el alias de campo hit.page.pageTitle se ve como tres campos en uno, separados con puntos. Del mismo modo que los valores de los ARRAYS te otorgan flexibilidad para analizar en más profundidad el nivel de detalle de tus campos, otros tipos de datos te permiten ampliar el esquema agrupando campos relacionados. Ese tipo de datos SQL es el tipo de datos STRUCT.

La manera más fácil de pensar en un STRUCT es considerarlo una tabla separada que se unió previamente a tu tabla principal.

Un STRUCT puede tener lo siguiente:

  • Uno o muchos campos
  • Los mismos tipos de datos o tipos distintos de datos para cada campo
  • Su propio alias

Parece igual a una tabla, ¿verdad?

Explora un conjunto de datos con STRUCT

  1. Para abrir el conjunto de datos bigquery-public-data, haz clic en +AGREGAR, selecciona Destaca un proyecto por nombre y, luego, ingresa el nombre bigquery-public-data

  2. Haz clic en Destacar.

El proyecto bigquery-public-data aparecerá en la sección Explorador.

  1. Abre bigquery-public-data.

  2. Busca y abre el conjunto de datos google_analytics_sample.

  3. Haz clic en la tabla ga_sessions(366)_.

  4. Comienza a desplazarte por el esquema y responde la siguiente pregunta usando la función de búsqueda en tu navegador.

Como puedes imaginar, hay una cantidad enorme de datos de sesión del sitio web almacenados para un sitio web moderno de comercio electrónico.

La ventaja principal de tener 32 STRUCTS en una sola tabla es que te permite ejecutar consultas como esta sin tener que realizar UNIONES:

SELECT visitId, totals.*, device.* FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20170801` WHERE visitId = 1501570398 LIMIT 10 Nota: La sintaxis .* le indica a BigQuery que devuelva todos los campos para ese STRUCT (de la misma manera que lo haría si totals.* fuera una tabla independiente que unimos).

Almacenar tus tablas grandes de informes como STRUCTS (“tablas” previamente unidas) y ARRAYS (gran nivel de detalle) te permite hacer lo siguiente:

  • Evitar 32 UNIONES de tabla para obtener ventajas significativas en cuanto al rendimiento
  • Obtener datos detallados a partir de los ARRAYS cuando lo necesites, sin que haya consecuencias si no lo haces (BigQuery almacena cada columna de forma individual en el disco)
  • Tener todo el contexto comercial en una tabla, en lugar de preocuparte por las claves de UNIÓN y por recordar qué tablas tienen los datos que necesitas

Tarea 6: Practica con los STRUCTS y ARRAYS

El próximo conjunto de datos incluirá los tiempos de corredores en sus vueltas alrededor de una pista. A cada vuelta la llamaremos “fracción”.

Corredores en una pista de atletismo

  1. Para esta consulta, prueba la sintaxis de STRUCT y observa los distintos tipos de campos dentro del contenedor de struct:
#standardSQL SELECT STRUCT("Rudisha" as name, 23.4 as split) as runner

Fila

runner.name

runner.split

1

Rudisha

23.4

¿Qué puedes observar sobre los alias de campo? Puesto que el struct contiene campos anidados (los nombres y las fracciones son un subconjunto del corredor), se obtiene una notación de puntos.

¿Qué sucede si el corredor tiene varias fracciones de tiempo para una sola carrera (como el tiempo por vuelta)?

Usaremos un array, por supuesto.

  1. Ejecuta la siguiente consulta para confirmar esto:
#standardSQL SELECT STRUCT("Rudisha" as name, [23.4, 26.3, 26.4, 26.1] as splits) AS runner

Fila

runner.name

runner.splits

1

Rudisha

23.4

26.3

26.4

26.1

En resumen:

  • Los structs son contenedores que pueden tener varios tipos de datos y nombres de campos anidados.
  • Los arrays pueden ser uno de los tipos de campos dentro de un struct (como se mostró antes con el campo “fracciones”).

Practica transferir los datos de JSON

  1. Crea un nuevo conjunto de datos llamado racing.

  2. Haz clic en el conjunto de datos racing y haz clic en Crear tabla.

Nota: Es posible que debas ampliar la ventana del navegador para ver la opción Crear tabla.
  • Fuente: Selecciona Google Cloud Storage en el menú desplegable Crear tabla desde
  • Selecciona un archivo del bucket de Cloud Storage: cloud-training/data-insights-course/labs/optimizing-for-performance/race_results.json
  • Formato de archivo: JSONL (JSON delimitado por líneas nuevas)
  • En Esquema, haz clic en el control deslizante Editar como texto y agrega lo siguiente:
[ { "name": "race", "type": "STRING", "mode": "NULLABLE" }, { "name": "participants", "type": "RECORD", "mode": "REPEATED", "fields": [ { "name": "name", "type": "STRING", "mode": "NULLABLE" }, { "name": "splits", "type": "FLOAT", "mode": "REPEATED" } ] } ]
  1. Asígnale el nombre race_results a la nueva tabla.

  2. Haz clic en Crear tabla.

  3. Una vez que se complete el trabajo de carga, obtén una vista previa del esquema de la tabla creada recientemente:

Página con pestañas de Esquema race_results

¿Cuál es el campo STRUCT?, ¿cómo lo sabes?

El campo participants es el STRUCT porque es del tipo RECORD.

¿Qué campo es el ARRAY?

El campo participants.splits es un array de floats dentro del struct principal participants. Tiene un modo REPEATED, lo que indica que es un array. Los valores de este array se llaman valores anidados porque hay varios valores dentro de un solo campo.

Haz clic en Revisar mi progreso para verificar el objetivo. Crear un conjunto de datos y una tabla para transferir datos de JSON

Practica cómo consultar campos repetidos y anidados

  1. Veamos los tiempos de los corredores para la carrera de 800 metros:
#standardSQL SELECT * FROM racing.race_results

¿Cuántas filas muestra la consulta?

Respuesta: 1

Resultados de la consulta en la página con pestañas de Resultados, con la fila número (1) destacada.

¿Qué pasaría si quisieras mostrar el nombre de cada corredor y el tipo de carrera?

  1. Ejecuta el siguiente esquema y ve qué sucede:
#standardSQL SELECT race, participants.name FROM racing.race_results

Error: Cannot access field name on a value with type ARRAY<STRUCT<name STRING, splits ARRAY<FLOAT64>>>> at [2:27]

Tal como sucede cuando olvidas la instrucción GROUP BY al usar funciones de suma, aquí tenemos dos niveles de detalle diferentes: una fila para la carrera y tres filas para los nombres de los participantes. ¿Qué puedes hacer para cambiar esto…

Fila

race

participants.name

1

800 m

Rudisha

2

???

Makhloufi

3

???

Murphy

…por esto?

Fila

race

participants.name

1

800 m

Rudisha

2

800 m

Makhloufi

3

800 m

Murphy

En SQL relacional tradicional, si tuvieras una tabla de carreras y una de participantes, ¿qué harías para obtener información de ambas tablas? Las UNIRÍAS. El STRUCT de participantes (que es conceptualmente muy similar a una tabla) ya es parte de tu tabla de carreras, pero aún no se correlaciona correctamente con tu campo “race” que no pertenece al STRUCT.

¿Qué comando SQL de dos palabras usarías para correlacionar la carrera de 800 m con cada corredor de la primera tabla?

Respuesta: UNIÓN CRUZADA

Perfecto.

  1. Ahora intenta ejecutar lo siguiente:
#standardSQL SELECT race, participants.name FROM racing.race_results CROSS JOIN participants # this is the STRUCT (it is like a table within a table)

Table name "participants" missing dataset while no default dataset is set in the request.

Si bien el struct de participantes es como una tabla, técnicamente sigue siendo un campo de la tabla racing.race_results.

  1. Agrega el nombre del conjunto de datos a la consulta:
#standardSQL SELECT race, participants.name FROM racing.race_results CROSS JOIN race_results.participants # full STRUCT name
  1. Y haz clic en Ejecutar.

¡Bien! Mostraste correctamente la lista de todos los corredores de cada carrera.

Fila

race

name

1

800 m

Rudisha

2

800 m

Makhloufi

3

800 m

Murphy

4

800 m

Bosse

5

800 m

Rotich

6

800 m

Lewandowski

7

800 m

Kipketer

8

800 m

Berian

  1. Para simplificar la última consulta, puedes hacer lo siguiente:
  • Agregar un alias para la tabla original
  • Reemplazar las palabras "CROSS JOIN" por una coma, ya que, implícitamente, realiza la unión cruzada

El resultado de la consulta será el mismo:

#standardSQL SELECT race, participants.name FROM racing.race_results AS r, r.participants

Si tienes más de un tipo de carrera (800 m, 100 m, 200 m), ¿una UNIÓN CRUZADA no asociaría el nombre de cada corredor con todas las carreras posibles como un producto cartesiano?

Respuesta: No. Esta es una unión cruzada correlacionada que solo descomprime los elementos asociados con una sola fila. Para obtener un análisis más detallado del tema, consulta cómo trabajar con ARRAYS y STRUCTS

Resumen de los STRUCTS:

  • Un STRUCT de SQL es básicamente un contenedor de otros campos de datos que pueden ser de distintos tipos. La palabra “struct” significa “estructura de datos”. Recuerda el ejemplo de antes: STRUCT(``"Rudisha" as name, [23.4, 26.3, 26.4, 26.1] as splits``)`` AS runner
  • A los STRUCTS se les da un alias (como “runner” en el ejemplo anterior) y podemos entenderlos como una tabla dentro de una tabla principal.
  • Es necesario descomprimir los STRUCTS (y los ARRAYS) para poder usar sus elementos. Incluye UNNEST() junto al nombre del struct o del campo del struct que es un array para descomprimirlo y compactarlo.

Tarea 7: Pregunta del lab: STRUCT()

Usa la tabla racing.race_results que creaste anteriormente para responder la siguiente pregunta.

Tarea: Escribe una consulta para CONTAR cuántos corredores había en total.

  • Para comenzar, usa la siguiente consulta escrita parcialmente:
#standardSQL SELECT COUNT(participants.name) AS racer_count FROM racing.race_results Nota: Recuerda que deberás realizar una unión cruzada en el nombre de tu struct como fuente adicional de datos después de FROM.

Solución posible:

#standardSQL SELECT COUNT(p.name) AS racer_count FROM racing.race_results AS r, UNNEST(r.participants) AS p

Fila

racer_count

1

8

Respuesta: 8 corredores participaron en la carrera.

Haz clic en Revisar mi progreso para verificar el objetivo. Ejecutar la consulta para CONTAR cuántos corredores había en total

Tarea 8: Pregunta del lab: Cómo descomprimir arrays con UNNEST( )

Escribe una consulta que muestre una lista del tiempo total de carrera correspondiente a los corredores cuyos nombres comiencen con R. Ordena los resultados de modo que el mejor tiempo total aparezca primero. Usa el operador UNNEST() y comienza con la consulta escrita parcialmente que figura a continuación.

  • Completa la consulta:
#standardSQL SELECT p.name, SUM(split_times) as total_race_time FROM racing.race_results AS r , r.participants AS p , p.splits AS split_times WHERE GROUP BY ORDER BY ; Nota:
  • Deberás descomprimir el struct y el array dentro del struct como fuentes de datos después de la cláusula FROM.
  • Asegúrate de usar alias cuando corresponda.

Solución posible:

#standardSQL SELECT p.name, SUM(split_times) as total_race_time FROM racing.race_results AS r , UNNEST(r.participants) AS p , UNNEST(p.splits) AS split_times WHERE p.name LIKE 'R%' GROUP BY p.name ORDER BY total_race_time ASC;

Fila

name

total_race_time

1

Rudisha

102.19999999999999

2

Rotich

103.6

Haz clic en Revisar mi progreso para verificar el objetivo. Ejecutar la consulta que mostrará una lista del tiempo total de carrera correspondiente a los corredores cuyos nombres comiencen con R

Tarea 9: Filtra dentro de los valores de array

Descubriste que el tiempo por vuelta más rápido registrado para la carrera de 800 m fue 23.2 segundos, pero no viste qué corredor dio esa vuelta en particular. Crea una consulta que devuelva ese resultado.

  • Completa la consulta escrita parcialmente:
#standardSQL SELECT p.name, split_time FROM racing.race_results AS r , r.participants AS p , p.splits AS split_time WHERE split_time = ;

Solución posible:

#standardSQL SELECT p.name, split_time FROM racing.race_results AS r , UNNEST(r.participants) AS p , UNNEST(p.splits) AS split_time WHERE split_time = 23.2;

Fila

name

split_time

1

Kipketer

23.2

Haz clic en Revisar mi progreso para verificar el objetivo. Ejecutar la consulta para ver qué corredor logró el tiempo por vuelta más rápido

¡Felicitaciones!

Transferiste correctamente conjuntos de datos JSON, creaste ARRAYS y STRUCTS y desanidaste datos semiestructurados para obtener estadísticas.

Próximos pasos y más información

Capacitación y certificación de Google Cloud

Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.

Última actualización del manual: 3 de febrero de 2024

Prueba más reciente del lab: 25 de agosto de 2023

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

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