
Before you begin
- 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
Create a new dataset and table to store the data
/ 20
Execute the query to see how many unique products were viewed
/ 15
Execute the query to use the UNNEST() on array field
/ 15
Create a dataset and a table to ingest JSON data
/ 20
Execute the query to COUNT how many racers were there in total
/ 10
Execute the query that will list the total race time for racers whose names begin with R
/ 10
Execute the query to see which runner ran fastest lap time
/ 10
O BigQuery é um banco de dados de análise NoOps, totalmente gerenciado e de baixo custo desenvolvido pelo Google. Com ele, você pode consultar muitos terabytes de dados sem ter que gerenciar uma infraestrutura ou precisar de um administrador de banco de dados. O BigQuery usa SQL e está disponível no modelo de pagamento por uso. Assim, você pode se concentrar na análise dos dados para encontrar insights relevantes.
Neste laboratório, você vai trabalhar intensamente com dados semiestruturados (fazendo a ingestão de dados dos tipos matriz e JSON) dentro do BigQuery. A desnormalização do seu esquema em uma única tabela com campos aninhados e repetidos pode gerar melhorias de desempenho, mas a sintaxe SQL para trabalhar com dados do tipo matriz pode ser complexa. Nas atividades práticas, você vai aprender a carregar, consultar, solucionar problemas e desaninhar vários conjuntos de dados semiestruturados.
Neste curso, você vai aprender a:
Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é iniciado quando você clica em Começar o laboratório e mostra por quanto tempo os recursos do Google Cloud vão ficar disponíveis.
Este laboratório prático permite que você realize as atividades em um ambiente real de nuvem, não em uma simulação ou demonstração. Você vai receber novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.
Confira os requisitos para concluir o laboratório:
Clique no botão Começar o laboratório. Se for preciso pagar, você verá um pop-up para selecionar a forma de pagamento. No painel Detalhes do laboratório à esquerda, você vai encontrar o seguinte:
Se você estiver usando o navegador Chrome, clique em Abrir console do Google Cloud ou clique com o botão direito do mouse e selecione Abrir link em uma janela anônima.
O laboratório ativa os recursos e depois abre a página Fazer login em outra guia.
Dica: coloque as guias em janelas separadas lado a lado.
Se necessário, copie o Nome de usuário abaixo e cole na caixa de diálogo Fazer login.
Você também encontra o Nome de usuário no painel Detalhes do laboratório.
Clique em Seguinte.
Copie a Senha abaixo e cole na caixa de diálogo de boas-vindas.
Você também encontra a Senha no painel Detalhes do laboratório.
Clique em Seguinte.
Acesse as próximas páginas:
Depois de alguns instantes, o console do Google Cloud será aberto nesta guia.
Você verá a caixa de mensagem Olá! Este é o BigQuery no Console do Cloud. Ela tem um link para o guia de início rápido e as notas de versão.
O console do BigQuery vai abrir.
Nomeie o novo conjunto de dados como fruit_store
. Não altere as outras opções (Local dos dados, Expiração padrão das tabelas).
Clique em Criar conjunto de dados.
No SQL, normalmente você terá um único valor para cada linha, como nesta lista de frutas abaixo:
Row |
Fruit |
1 |
raspberry |
2 |
blackberry |
3 |
strawberry |
4 |
cherry |
E se você quisesse uma lista de frutas para cada pessoa na loja? Ela poderia ficar assim:
Row |
Fruit |
Person |
1 |
raspberry |
sally |
2 |
blackberry |
sally |
3 |
strawberry |
sally |
4 |
cherry |
sally |
5 |
orange |
frederick |
6 |
apple |
frederick |
Em um banco de dados SQL relacional tradicional, você examinaria a repetição de nomes e consideraria imediatamente dividir a tabela acima em duas, uma com as frutas e outra com as pessoas. Esse processo é chamado de normalização (o ato de transformar uma tabela em várias). Trata-se de uma abordagem comum para bancos de dados transacionais como o mySQL.
Para o armazenamento em data warehouse, os analistas de dados costumam fazer o contrário (a desnormalização) e transformam muitas tabelas separadas em uma grande tabela de relatórios.
Agora você vai aprender uma abordagem diferente que armazena dados em diversos níveis de granularidade em uma só tabela usando campos repetidos:
Row |
Fruit (array) |
Person |
1 |
raspberry |
sally |
blackberry | ||
strawberry | ||
cherry | ||
2 |
orange |
frederick |
apple |
O que há de estranho na tabela anterior?
Qual é o dado estratégico? O tipo de dados array
.
Uma maneira mais fácil de interpretar a matriz de frutas:
Row |
Fruit (array) |
Person |
1 |
[raspberry, blackberry, strawberry, cherry] |
sally |
2 |
[orange, apple] |
frederick |
As duas últimas tabelas são iguais, e aprendemos duas coisas importantes com elas:
Teste por conta própria.
Clique em Executar.
Agora tente executar esta consulta:
Será exibido um erro parecido com este:
Erro: Array elements of types {INT64, STRING} do not have a common supertype at [3:1]
As matrizes podem ter só um tipo de dados (somente strings ou números, por exemplo).
Clique em Executar.
Depois que você receber os resultados, clique na guia JSON para ver a estrutura aninhada.
E se você precisasse ingerir um arquivo JSON no BigQuery?
Crie uma nova tabela chamada fruit_details
no conjunto de dados.
fruit_store
.A opção Criar tabela vai aparecer.
cloud-training/data-insights-course/labs/optimizing-for-performance/shopping_cart.json
Defina o nome da nova tabela como fruit_details
.
Marque a caixa de seleção de Esquema (Detectar automaticamente).
Clique em Criar tabela.
No esquema, observe que fruit_array
está marcada como REPEATED. Isso significa que ela é uma matriz.
Resumo
Clique em Verificar meu progresso para ver o objetivo.
Você ainda não tem matrizes nas suas tabelas? Vamos criar!
Agora, use a função ARRAY_AGG()
para agregar os valores da string em uma matriz.
ARRAY_LENGTH()
para contar o número de páginas e de produtos que foram visualizados:DISTINCT
a ARRAY_AGG()
:Clique em Verificar meu progresso para ver o objetivo.
Resumo
É possível fazer coisas muito úteis com as matrizes, por exemplo:
ARRAY_LENGTH(<array>)
ARRAY_AGG(DISTINCT <field>)
ARRAY_AGG(<field> ORDER BY <field>)
ARRAY_AGG(<field> LIMIT 5)
O conjunto de dados público do BigQuery para Google Analytics bigquery-public-data.google_analytics_sample
tem muito mais campos e linhas do que o conjunto de dados data-to-insights.ecommerce.all_sessions
do nosso curso. Mais importante do que isso, ele já armazena valores de campos, como produtos, páginas e transações de forma nativa como MATRIZES.
Execute a consulta.
Role para a direita nos resultados até encontrar o campo hits.product.v2ProductName
(os campos com múltiplos aliases serão discutidos em breve).
A quantidade de campos disponíveis no esquema do Google Analytics pode sobrecarregar a análise.
Você vai receber um erro:
Erro: Cannot access field page on a value with type ARRAY<STRUCT<hitNumber INT64, time INT64, hour INT64, ...>> at [3:8]
Para consultar os campos "REPEATED" (as matrizes) normalmente, você precisa organizar as matrizes em linhas.
Por exemplo, a matriz de hits.page.pageTitle
está armazenada como uma linha única, da seguinte forma:
e ela precisa ser:
Como fazer isso com o SQL?
Resposta: use a função UNNEST() no seu campo de matriz:
Vamos abordar o UNNEST() com mais detalhes posteriormente. Por enquanto, basta saber que:
Clique em Verificar meu progresso para ver o objetivo.
Você pode estar se perguntando por que o alias de campo hit.page.pageTitle
parece ser três campos em um, separados por pontos. Da mesma forma que os valores matriz oferecem a flexibilidade de aprofundamento na granularidade dos seus campos, outros tipos de dados permitem maior amplitude no seu esquema, com o agrupamento de campos relacionados. Esse tipo de dado SQL é o STRUCT.
A maneira mais fácil de entender conceitualmente um STRUCT é pensar que ele é uma tabela separada e pré-mesclada na sua tabela principal.
Um STRUCT pode ter:
Até parece uma tabela, não é mesmo?
Para abrir o conjunto de dados bigquery-public-data, clique em +ADICIONAR, selecione Marcar um projeto com estrela por nome e insira bigquery-public-data
Clique em Marcar com estrela.
O projeto bigquery-public-data
será listado na seção "Explorer".
Abra bigquery-public-data.
Encontre e abra o conjunto de dados google_analytics_sample.
Clique na tabela ga_sessions(366)_.
Comece a rolar pelo esquema e responda à pergunta abaixo usando o recurso de busca do seu navegador.
Como você pode imaginar, em um site moderno de e-commerce há uma quantidade enorme de dados de sessão armazenados.
A principal vantagem de ter 32 STRUCTs em uma única tabela é que isso permite a execução de consultas como esta, sem o uso de mesclagens:
.*
diz ao BigQuery para retornar todos os campos desse STRUCT (como se totals.*
fosse uma tabela separada que mesclamos).O armazenamento de grandes tabelas de relatórios como STRUCTs ("tabelas" pré-mescladas) e MATRIZES (granularidade profunda) permite que você:
O próximo conjunto de dados contém os tempos das voltas completadas por corredores em uma pista. Cada volta será chamada de "split".
Row |
runner.name |
runner.split |
1 |
Rudisha |
23.4 |
O que você observa sobre os aliases de campos? Como existem campos aninhados dentro do struct (name e split são um subconjunto de runner), você acaba com uma notação de ponto.
E se o corredor tiver vários tempos de volta em uma única corrida (como tempo por volta)?
Usaremos uma matriz, é claro!
Row |
runner.name |
runner.splits |
1 |
Rudisha |
23.4 |
26.3 | ||
26.4 | ||
26.1 |
Recapitulando:
Crie um novo conjunto de dados chamado racing
.
Clique no conjunto de dados racing
e selecione "Criar tabela".
cloud-training/data-insights-course/labs/optimizing-for-performance/race_results.json
Nomeie a nova tabela como race_results
.
Clique em Criar tabela.
Depois do job de carregamento, veja o esquema da tabela recém-criada:
Qual campo é o STRUCT? Como você sabe disso?
O campo participants é um STRUCT porque é do tipo RECORD.
Qual campo é uma MATRIZ?
O campo participants.splits
é uma matriz de pontos flutuantes dentro do struct participants
. Ele tem o modo REPEATED que indica uma matriz. Os valores dessa matriz são chamados de valores aninhados porque estão dentro de um único campo.
Clique em Verificar meu progresso para ver o objetivo.
Quantas linhas foram retornadas?
Resposta: 1
E se você quisesse listar o nome de cada corredor e o tipo de corrida?
Erro: Cannot access field name on a value with type ARRAY<STRUCT<name STRING, splits ARRAY<FLOAT64>>>> at [2:27]
Isso também acontece quando esquecemos de adicionar GROUP BY com funções de agregação. Temos dois níveis diferentes de granularidade: uma linha para a corrida e três linhas para os nomes dos participantes. Como você mudaria isto...
Row |
race |
participants.name |
1 |
800 m |
Rudisha |
2 |
??? |
Makhloufi |
3 |
??? |
Murphy |
... para ter isto:
Row |
race |
participants.name |
1 |
800 m |
Rudisha |
2 |
800 m |
Makhloufi |
3 |
800 m |
Murphy |
No SQL relacional tradicional, se você tivesse uma tabela de corridas e uma de participantes, o que você faria para extrair informações das duas? Você usaria JOIN para combiná-las. Aqui, o STRUCT com os participantes (que, conceitualmente, é muito semelhante a uma tabela) já faz parte da tabela de corridas, mas ainda não está associado corretamente ao campo não STRUCT "race".
Você consegue pensar em um comando SQL com duas palavras que você usaria para associar a corrida de 800 m a cada um dos corredores na primeira tabela?
Resposta: CROSS JOIN
Ótimo.
Table name "participants" missing dataset while no default dataset is set in the request
.
Ainda que o STRUCT com os participantes seja como uma tabela, tecnicamente ele é um campo na tabela racing.race_results
.
Uau! Você listou todos os corredores de cada corrida.
Row |
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 |
Isso retornará o mesmo resultado desta consulta:
Se você tivesse mais de um tipo de corrida (800 m, 100 m, 200 m), um CROSS JOIN poderia associar cada nome de corredor a todas as corridas possíveis como um produto cartesiano?
Resposta: não. Esta é uma função CROSS JOIN correlacionada que só descompacta os elementos associados a uma única linha. Para mais detalhes, veja como trabalhar com matrizes e STRUCTs.
Recapitulando o que são STRUCTs:
STRUCT(``"Rudisha" as name, [23.4, 26.3, 26.4, 26.1] as splits``)`` AS runner
Responda às perguntas abaixo usando a tabela racing.race_results
que você criou.
Tarefa: escreva uma consulta para usar COUNT e descobrir quantos corredores participaram da corrida.
FROM
.Possível solução:
Row |
racer_count. |
1 |
8 |
Resposta: 8 corredores participaram da corrida.
Clique em Verificar meu progresso para ver o objetivo.
Escreva uma consulta que listará o tempo total dos corredores com nomes que começam com R. Ordene os resultados começando pelo menor tempo total. Use o operador UNNEST() e comece com a consulta parcialmente escrita abaixo.
Possível solução:
Row |
name |
total_race_time. |
1 |
Rudisha |
102.19999999999999 |
2 |
Rotich |
103.6 |
Clique em Verificar meu progresso para ver o objetivo.
Você verificou que o tempo de volta mais rápido registrado na corrida de 800 m foi de 23,2 segundos, mas não sabe quem conseguiu esse tempo. Crie uma consulta que retorne esse resultado.
Possível solução:
Row |
name |
split_time. |
1 |
Kipketer |
23.2 |
Clique em Verificar meu progresso para ver o objetivo.
Você ingeriu conjuntos de dados JSON, criou matrizes e structs e usou dados semiestruturados desaninhados para extrair insights.
Esses treinamentos ajudam você a aproveitar as tecnologias do Google Cloud ao máximo. Nossas aulas incluem habilidades técnicas e práticas recomendadas para ajudar você a alcançar rapidamente o nível esperado e continuar sua jornada de aprendizado. Oferecemos treinamentos que vão do nível básico ao avançado, com opções de aulas virtuais, sob demanda e por meio de transmissões ao vivo para que você possa encaixá-las na correria do seu dia a dia. As certificações validam sua experiência e comprovam suas habilidades com as tecnologias do Google Cloud.
Manual atualizado em 3 de fevereiro de 2024
Laboratório testado em 25 de agosto de 2023
Copyright 2025 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.
Este conteúdo não está disponível no momento
Você vai receber uma notificação por e-mail quando ele estiver disponível
Ótimo!
Vamos entrar em contato por e-mail se ele ficar disponível
One lab at a time
Confirm to end all existing labs and start this one