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.
Teste e compartilhe seu conhecimento com nossa comunidade.
done
Tenha acesso a mais de 700 laboratórios, selos de habilidade e cursos
Como otimizar o BigQuery para custo e desempenho v1.5
Teste e compartilhe seu conhecimento com nossa comunidade.
done
Tenha acesso a mais de 700 laboratórios, selos de habilidade e cursos
Informações gerais
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 pode aproveitar o modelo de pagamento por uso. Assim, você pode se concentrar na análise dos dados para encontrar informações relevantes.
Este laboratório se concentra em como arquitetar um data warehouse para o desempenho de consultas. Neste laboratório, você vai comparar um esquema relacional tradicional com mesclagens com um esquema desnormalizado. Você também usará o plano de execução de consultas do BigQuery para avaliar de forma quantificável as compensações de desempenho.
Atividades deste laboratório
Neste laboratório, você aprenderá a executar as seguintes tarefas:
Carregar um arquivo de valores separados por vírgula (CSV) em uma tabela do BigQuery usando a interface da Web.
Carregar um arquivo JavaScript® Object Notation (JSON) em uma tabela do BigQuery usando a interface de linha de comando (CLI).
Transformar dados e mesclar tabelas usando a interface da Web.
Armazenar os resultados da consulta em uma tabela de destino.
Consultar uma tabela de destino usando a interface da Web para confirmar se os dados foram transformados e carregados corretamente.
Configuração e requisitos
Para cada laboratório, você recebe um novo projeto do Google Cloud e um conjunto de recursos por um determinado período e sem custos financeiros.
Faça login no Qwiklabs em uma janela anônima.
Confira o tempo de acesso do laboratório (por exemplo, 1:15:00) e finalize todas as atividades nesse prazo.
Não é possível pausar o laboratório. Você pode reiniciar o desafio, mas vai precisar refazer todas as etapas.
Quando tudo estiver pronto, clique em Começar o laboratório.
Anote as credenciais (Nome de usuário e Senha). É com elas que você vai fazer login no Console do Google Cloud.
Clique em Abrir Console do Google.
Clique em Usar outra conta, depois copie e cole as credenciais deste laboratório nos locais indicados.
Se você usar outras credenciais, vai receber mensagens de erro ou cobranças.
Aceite os termos e pule a página de recursos de recuperação.
Ative o Google Cloud Shell
O Google Cloud Shell é uma máquina virtual com ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud.
O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.
No console do Cloud, clique no botão "Abrir o Cloud Shell" na barra de ferramentas superior direita.
Clique em Continuar.
O provisionamento e a conexão do ambiente podem demorar um pouco. Quando você estiver conectado, já estará autenticado, e o projeto estará definido com seu PROJECT_ID. Exemplo:
A gcloud é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.
Para listar o nome da conta ativa, use este comando:
No Console do Google Cloud, selecione o menu de navegação > BigQuery:
Você vai 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 lista as atualizações da IU.
Clique em Concluído.
Tarefa 1: crie um novo conjunto de dados para armazenar as tabelas
No projeto do BigQuery, crie um novo conjunto de dados denominado liquor_sales.
Na seção Explorador, clique no ícone "Conferir ações" do lado do ID do projeto e selecione Criar conjunto de dados.
A caixa de diálogo Criar conjunto de dados será aberta.
Defina o ID do conjunto de dados como liquor_sales. Deixe as demais opções nos valores padrão e clique em Criar conjunto de dados.
No painel esquerdo, será exibida uma tabela liquor_sales relacionada no projeto.
Tarefa 2: carregue e consulte os dados relacionais
Nesta seção, você medirá o desempenho da consulta para dados relacionais no BigQuery.
O BigQuery oferece suporte a JOINs grandes e o desempenho do JOIN é bom. No entanto, o BigQuery é um armazenamento de dados colunar e o desempenho máximo é alcançado em conjuntos de dados desnormalizados. Como o armazenamento do BigQuery é barato e escalonável, é uma boa prática desnormalizar e pré-mesclar os conjuntos de dados em tabelas homogêneas. Em outras palavras, você troca recursos de computação por recursos de armazenamento (sendo este último mais eficiente e econômico).
Nesta seção, você fará o seguinte:
Fazer upload de um conjunto de tabelas de um esquema relacional (em um 3º formulário normal).
Executar consultas nas tabelas relacionais.
Observar o desempenho das consultas para comparar com o desempenho das mesmas consultas em uma tabela de um esquema desnormalizado contendo as mesmas informações.
Faça o upload de tabelas que possuem um esquema relacional. O esquema relacional consiste nas seguintes tabelas:
Nome da tabela
Descrição
vendas
Contém a data e as métricas de vendas.
item
A descrição do item vendido.
fornecedor
O produtor do item.
categoria
O agrupamento ao qual o item pertence.
loja
A loja que vendeu o item.
condado
O condado em que o item foi vendido.
convenience_store
A lista de lojas consideradas lojas de conveniência.
Este é um diagrama do esquema relacional.
Criar a tabela de vendas
Na seção Explorador, clique no ícone "Exibir ações" próximo ao conjunto de dados liquor_sales, selecione Abrir e, em seguida, clique em Criar tabela.
Na página Criar tabela, na seção Origem, faça o seguinte:
Em Criar tabela de, selecione Google Cloud Storage.
Informe o caminho para o nome do bucket do Google Cloud Storage:
Nota: quando você cria uma tabela anteriormente, a opção Selecionar trabalho anterior permite que você use rapidamente suas configurações para criar tabelas semelhantes.
Na seção Destino, configure o seguinte:
Em Nome da tabela, insira vendas.
Deixe os campos de destino restantes com seus padrões.
Volte para a interface da Web do BigQuery Confirme a exibição das novas tabelas carregadas no conjunto de dados de liquor_sales. Atualize o navegador, se for necessário.
Consultar dados relacionais
Em seguida, use o Editor de consultas para consultar seus dados.
Na caixa de código do Editor de consultas, clique em Mais > Configurações de consulta.
Na seção Gerenciamento de recursos, Preferências de cache, desmarque a caixa de seleçãoUsar resultados em cache e clique em Salvar. Se você precisar executar a consulta mais de uma vez, não deverá usar resultados armazenados em cache.
Na janela do Editor de consultas, insira a seguinte consulta nas tabelas relacionais e clique em Executar:
#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
Na parte inferior, na seção Resultados da consulta, clique na guia Resultados. Observe o tempo de conclusão da consulta. Um exemplo é exibido abaixo (o tempo de execução pode variar).
Isso será comparado ao tempo para consultar um conjunto de dados nivelado em seções posteriores.
Tarefa 3: carregar e consultar dados nivelados
Nesta seção, você desnormaliza os esquemas e analisa as vendas de bebidas alcoólicas no estado de Iowa usando os dados nivelados. A execução desta consulta nos dados nivelados deve ser mais rápida do que a execução nos dados relacionais. Você saberá a hora de comparar e confirmar.
Um esquema desnormalizado nivela os dados relacionais em uma única linha. Por exemplo, no esquema desnormalizado, as tabelas county_number, county, store, name, address, city, zipcode, store_location, county_number e cstore são campos contendo todos os campos das tabelas County, Store e Convenience_store.
Nota: o campo
cstore (no esquema desnormalizado) representa o campo convenience_store.store no esquema relacional acima. Ele tem um valor Y se a loja for uma loja de conveniência e nulo, caso contrário.
O diagrama a seguir mostra o esquema desnormalizado.
Criar a tabela iowa_sales_denorm
No painel esquerdo, selecione conjunto de dados liquor_sales e clique em Criar tabela à direita.
A caixa de diálogo Criar tabela é aberta.
Na seção Fonte, configure o seguinte:
Em Criar tabela de, selecione Google Cloud Storage.
Informe o caminho para o nome do bucket do Google Cloud Storage:
Em Delimitador de campo, verifique se Vírgula está selecionada.
Como iowa_sales_denorm.csv contém uma única linha de cabeçalho, para Linhas de cabeçalho a serem ignoradas, digite 1.
Verifique Novas linhas com consulta.
Deixe os demais valores como estão e clique em Criar tabela.
O BigQuery gera um job de carregamento para criar a tabela e fazer o upload dos dados nela. Isso pode levar alguns segundos.
Clique em Histórico pessoal para acompanhar o progresso do trabalho.
Insira e execute a seguinte consulta na tabela com um esquema desnormalizado (esta consulta produz os mesmos resultados que a consulta na seção 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
Na parte inferior, na seção Resultados da consulta, clique na guia Resultados e observe o tempo de conclusão da consulta. Isso será comparado ao tempo para consultar um conjunto de dados nivelado em seções posteriores.
Observe o tempo que a consulta leva para ser executada subtraindo o horário de início do horário de término.
A consulta correspondente à tabela com esquema desnormalizado é executada um pouco mais rápido e possui uma sintaxe mais simples. Sempre que possível, faça a pré-mesclagem dos conjuntos de dados em tabelas homogêneas para otimizar o desempenho no BigQuery.
Comparar o desempenho da consulta com os detalhes da execução
Selecione HISTÓRICO DO PROJETO.
Clique no primeiro trabalho de consulta executado no esquema relacional normalizado e, em seguida, clique em ABRIR COMO NOVA CONSULTA.
Selecione Detalhes de execução.
O plano de execução tem duas seções principais:
Tempo médio e máximo do worker por tipo de trabalho por etapa
Comparativos de mercado de desempenho de alto nível
Tempo decorrido: tempo total para o processamento da consulta.
Tempo de slot consumido: se a consulta não fosse processada em paralelo em várias máquinas, quanto tempo levaria para ser processada.
Bytes embaralhados: embaralhamento automático de dados na memória para processamento paralelo massivo.
Bytes espalhados no disco: se os dados não puderem ser processados na memória, quanto foi espalhado no disco permanente (geralmente a responsável é a distorção dos dados).
Primeiro, compare os tempos de comparativo de mercado entre cada uma das consultas que executamos.
Em seguida, compare o tipo de trabalho em que os workers passaram mais tempo.
Consulta 1. Detalhes de execução do esquema relacional
Consulta 2. Detalhes de execução do esquema desnormalizado
Observações:
A consulta desnormalizada (nº 2) é mais rápida e usa menos tempo de slot para obter o mesmo resultado.
A consulta relacional (nº 1) tem muito mais estágios de entrada e gasta a maior parte do tempo do worker mesclando os conjuntos de dados.
A consulta desnormalizada (nº 2) gasta a maior parte do tempo lendo a entrada de dados e exibindo os resultados. O tempo gasto em agregações e mesclagens é mínimo.
Nenhuma das consultas resultou em bytes espalhados no disco, o que sugere que nossos conjuntos de dados provavelmente não estão distorcidos (ou são significativamente grandes o suficiente para serem vazados da memória de um worker individual).
Nota: as consultas usadas neste laboratório são apenas para fins de demonstração. A diferença de tempo entre as duas consultas se torna mais significativa à medida que o tamanho do conjunto de dados aumenta e a complexidade das cláusulas JOIN aumenta.
Para saber mais detalhes sobre a execução e a otimização do plano de consulta, confira o guia de referência da explicação do plano de consulta.
Como evitar antipadrões de desempenho
Agora que você está familiarizado com o design eficaz de esquemas de banco de dados, é hora de praticar a otimização de algumas consultas mal escritas.
A consulta abaixo está lenta. O que você pode fazer para corrigi-la?
Copie e cole a consulta abaixo no Editor de consultas e execute a consulta para obter um comparativo de mercado.
Objetivo: contar todas as organizações sem fins lucrativos dos EUA que declararam tributos em papel (não eletrônico) em 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
O que podemos fazer para melhorar o desempenho?
Compare com a solução abaixo:
#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
*/
Execute a versão atualizada e acompanhe o tempo.
Limpe o Editor de consultas.
A nova consulta abaixo está sendo executada lentamente. (Execute a consulta para obter um comparativo de mercado; pare após 30 segundos se ela não for concluída).
Objetivo: utilizando o Employer Identification Number (EIN) como campo de ligação, mescle a tabela de declarações de impostos de renda com a tabela de nomes organizacionais, e são retornados os nomes de todas as organizações que apresentaram declarações em 2015.
Adicione esta consulta no Editor de consultas e clique em Executar:
#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
Corrija a consulta acima. (Dica: lembre-se da condição correta do campo JOIN para nosso esquema).
Compare com a solução abaixo.
Adicione esta consulta no Editor de consultas e clique em Executar:
#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
*/
Execute a versão atualizada e acompanhe o tempo.
Você percebe algum tipo de melhora? Qual a velocidade da consulta executada?
Lições aprendidas
Parabéns!
Isso conclui este laboratório prático que analisa o design eficaz do esquema do BigQuery e o desempenho da consulta. Você carregou arquivos CVS e JSON em tabelas do BigQuery, transformou dados e mesclou tabelas, armazenou resultados de consulta e confirmou que os dados foram transformados e carregados corretamente.
Finalize o laboratório
Clique em Terminar o laboratório após a conclusão. O Google Cloud Ensina remove os recursos usados e limpa a conta por você.
Você vai poder avaliar sua experiência no laboratório. Basta selecionar o número de estrelas, digitar um comentário e clicar em Enviar.
O número de estrelas indica o seguinte:
1 estrela = muito insatisfeito
2 estrelas = insatisfeito
3 estrelas = neutro
4 estrelas = satisfeito
5 estrelas = muito satisfeito
Feche a caixa de diálogo se não quiser enviar feedback.
Para enviar seu feedback, fazer sugestões ou correções, use a guia Suporte.
Copyright 2020 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.
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 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
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.
Este laboratório se concentra em como arquitetar um data warehouse para o desempenho de consultas. Você vai comparar um esquema relacional tradicional com mesclagens com um esquema desnormalizado e vai usar o plano de execução de consulta do BigQuery para avaliar de forma quantificável a mudança no desempenho
Duração:
Configuração: 0 minutos
·
Tempo de acesso: 50 minutos
·
Tempo para conclusão: 50 minutos