1. Visão geral/Introdução
Embora os aplicativos de várias camadas, que consistem em Web, servidor de aplicativos e banco de dados, sejam fundamentais para o desenvolvimento da Web e o ponto de partida de muitos sites, o sucesso geralmente traz desafios relacionados a escalonabilidade, integração e agilidade. Por exemplo, como os dados podem ser processados em tempo real e distribuídos para vários sistemas comerciais importantes? Esses problemas, juntamente com as demandas de aplicativos de grande escala na Internet, impulsionaram a necessidade de um sistema de mensagens distribuído e deram origem a um padrão arquitetônico de uso de pipelines de dados para alcançar sistemas resilientes em tempo real. Por isso, entender como publicar dados em tempo real em um sistema de mensagens distribuído e como criar um pipeline de dados são habilidades cruciais para desenvolvedores e arquitetos.
O que você criará
Neste codelab, você vai criar um pipeline de dados meteorológicos que começa com um dispositivo da Internet das Coisas (IoT), usa uma fila de mensagens para receber e entregar dados, aproveita uma função sem servidor para mover os dados para um data warehouse e cria um painel que mostra as informações. Um Raspberry Pi com um sensor meteorológico será usado como dispositivo IoT, e vários componentes do Google Cloud Platform vão formar o pipeline de dados. A criação do Raspberry Pi, embora seja benéfica, é uma parte opcional deste codelab, e os dados de clima de streaming podem ser substituídos por um script.

Depois de concluir as etapas deste codelab, você terá um pipeline de dados de streaming alimentando um painel que mostra temperatura, umidade, ponto de orvalho e pressão atmosférica.

O que você vai aprender
- Como usar o Google Pub/Sub
- Como implantar uma função do Cloud do Google Cloud
- Como aproveitar o Google BigQuery
- Como criar um painel usando o Google Data Studio
- Além disso, se você criar o sensor de IoT, também vai aprender a usar o SDK Google Cloud e proteger chamadas de acesso remoto ao Google Cloud Platform.
O que é necessário
- Uma conta do Google Cloud Platform. Novos usuários do Google Cloud Platform estão qualificados para uma avaliação sem custo financeiro de US$300.
Se você quiser criar a parte do sensor de IoT deste codelab em vez de usar dados de amostra e um script, também vai precisar do seguinte ( que pode ser comprado como um kit completo ou como peças individuais aqui):
- Raspberry Pi Zero W com fonte de alimentação, cartão de memória SD e caixa
- Leitor de cartão USB
- Hub USB (para conectar um teclado e um mouse à única porta USB do Raspberry Pi)
- Fios de protoboard fêmea-fêmea
- Cabeçalhos de martelo GPIO
- Sensor BME280
- Ferro de solda com solda
Além disso, é necessário ter acesso a um monitor de computador ou TV com entrada HDMI, cabo HDMI, teclado e mouse.
2. Etapas da configuração
Configuração de ambiente personalizada
Se você ainda não tem uma Conta do Google (Gmail ou G Suite), crie uma. Não importa se você já tem uma Conta do Google ou não, aproveite o teste sem custo financeiro de US$300.
Faça login no console do Google Cloud Platform ( console.cloud.google.com). Você pode usar o projeto padrão ("Meu primeiro projeto") para este laboratório ou criar um novo. Se quiser criar um projeto, use a página "Gerenciar recursos". O ID do projeto precisa ser um nome exclusivo em todos os projetos do Google Cloud. O ID mostrado abaixo já foi usado e não vai funcionar para você. Anote o ID do projeto (por exemplo, "O ID do seu projeto será _____"), porque ele será necessário mais tarde.


A execução deste codelab não deve custar mais do que alguns dólares, mas pode ser mais se você decidir usar mais recursos ou deixá-los em execução. Não se esqueça de ler a seção "Limpeza" no final do codelab.
3. Criar uma tabela do BigQuery
O BigQuery é um data warehouse empresarial sem servidor, altamente escalonável e de baixo custo. Ele é uma opção ideal para armazenar dados transmitidos de dispositivos IoT e permite que um painel de análise consulte as informações.
Vamos criar uma tabela que vai armazenar todos os dados meteorológicos de IoT. Selecione "BigQuery" no console do Cloud. Isso vai abrir o BigQuery em uma nova janela. Não feche a janela original, porque você vai precisar acessar ela de novo.

Clique no ícone de seta para baixo ao lado do nome do projeto e selecione "Criar novo conjunto de dados".

Insira "weatherData" no conjunto de dados, selecione um local para armazená-lo e clique em "OK".

Clique no sinal de "+" ao lado do conjunto de dados para criar uma tabela.

Em Dados de origem, selecione Criar tabela vazia. Em "Nome da tabela de destino", insira "weatherDataTable". Em Esquema, clique no botão Adicionar campo até ter um total de nove campos. Preencha os campos conforme mostrado abaixo e selecione o Tipo adequado para cada campo. Quando tudo estiver concluído, clique no botão Criar tabela.

Você vai ver um resultado como este:

Agora você tem um data warehouse configurado para receber seus dados meteorológicos.
4. Criar um tópico do Pub/Sub
O Cloud Pub/Sub é uma base simples, confiável e escalonável para a análise de streams e sistemas de computação voltados a eventos. Por isso, ele é perfeito para processar mensagens de IoT recebidas e permitir que sistemas downstream as processem.
Se você ainda estiver na janela do BigQuery, volte ao console do Cloud. Se você fechou o console do Cloud, acesse https://console.cloud.google.com
No console do Cloud, selecione Pub/Sub e, em seguida, Tópicos.

Se aparecer uma solicitação para ativar a API, clique no botão "Ativar API".

Clique no botão "Criar um tópico".

Insira "weatherdata" como o nome do tópico e clique em "Criar".

O tópico recém-criado vai aparecer.

Agora você tem um tópico do Pub/Sub para publicar mensagens de IoT e permitir que outros processos acessem essas mensagens.
Publicação segura no tópico
Se você planeja publicar mensagens no tópico do Pub/Sub de recursos fora do console do Google Cloud (por exemplo, um sensor de IoT), será necessário controlar melhor o acesso usando uma conta de serviço e garantir a segurança da conexão criando um certificado de confiança.
No console do Cloud, selecione "IAM e administrador" e "Contas de serviço".

Clique no botão "Criar conta de serviço".

No menu suspenso "Papel", selecione a função "Publicador do Pub/Sub".

Digite um nome de conta de serviço (iotWeatherPublisher), marque a caixa de seleção "Fornecer uma nova chave privada", verifique se o tipo de chave está definido como JSON e clique em "Criar".

O download da chave de segurança vai começar automaticamente. Como há apenas uma chave, é importante não perdê-la. Clique em "Fechar".

Uma conta de serviço será criada, e um ID de chave será associado a ela.

Para facilitar o acesso à chave mais tarde, vamos armazená-la no Google Cloud Storage. No console do Cloud, selecione "Storage" e "Navegador".

Clique no botão "Criar bucket".

Escolha um nome para o bucket de armazenamento (ele precisa ser globalmente exclusivo em todo o Google Cloud) e clique no botão "Criar".

Localize a chave de segurança que foi baixada automaticamente e arraste e solte ou faça upload dela no bucket de armazenamento.

Depois que o upload da chave for concluído, ela vai aparecer no navegador do Cloud Storage.

Anote o nome do bucket de armazenamento e o nome do arquivo da chave de segurança para uso posterior.
5. Criar um Cloud Function
A computação em nuvem possibilitou modelos de computação totalmente sem servidor em que a lógica pode ser ativada sob demanda em resposta a eventos originados de qualquer lugar. Neste laboratório, uma função do Cloud será iniciada sempre que uma mensagem for publicada no tópico de clima. Ela vai ler a mensagem e armazená-la no BigQuery.
No Console do Cloud, selecione Cloud Functions.

Se uma mensagem da API aparecer, clique no botão "Ativar API".

Clique no botão "Criar função".

No campo "Nome", digite function-weatherPubSubToBQ. Em "Gatilho", selecione "Tópico do Cloud Pub/Sub" e, no menu suspenso "Tópico", selecione "weatherdata". Para código-fonte, selecione o editor in-line. Na guia index.js, cole o código a seguir sobre o que está lá para começar. Mude as constantes para projectId, datasetId e tableId de acordo com seu ambiente.
/**
* Background Cloud Function to be triggered by PubSub.
*
* @param {object} event The Cloud Functions event.
* @param {function} callback The callback function.
*/
exports.subscribe = function (event, callback) {
const BigQuery = require('@google-cloud/bigquery');
const projectId = "myProject"; //Enter your project ID here
const datasetId = "myDataset"; //Enter your BigQuery dataset name here
const tableId = "myTable"; //Enter your BigQuery table name here -- make sure it is setup correctly
const PubSubMessage = event.data;
// Incoming data is in JSON format
const incomingData = PubSubMessage.data ? Buffer.from(PubSubMessage.data, 'base64').toString() : "{'sensorID':'na','timecollected':'1/1/1970 00:00:00','zipcode':'00000','latitude':'0.0','longitude':'0.0','temperature':'-273','humidity':'-1','dewpoint':'-273','pressure':'0'}";
const jsonData = JSON.parse(incomingData);
var rows = [jsonData];
console.log(`Uploading data: ${JSON.stringify(rows)}`);
// Instantiates a client
const bigquery = BigQuery({
projectId: projectId
});
// Inserts data into a table
bigquery
.dataset(datasetId)
.table(tableId)
.insert(rows)
.then((foundErrors) => {
rows.forEach((row) => console.log('Inserted: ', row));
if (foundErrors && foundErrors.insertErrors != undefined) {
foundErrors.forEach((err) => {
console.log('Error: ', err);
})
}
})
.catch((err) => {
console.error('ERROR:', err);
});
// [END bigquery_insert_stream]
callback();
};
Na guia "package.json", cole o código a seguir sobre o código do marcador de posição
{
"name": "function-weatherPubSubToBQ",
"version": "0.0.1",
"private": true,
"license": "Apache-2.0",
"author": "Google Inc.",
"dependencies": {
"@google-cloud/bigquery": "^0.9.6"
}
}
Se a função a ser executada estiver definida como "HelloWorld", mude para "subscribe". Clique no botão "Criar"

Levará cerca de dois minutos até que a função mostre que foi implantada.

Parabéns! Você acabou de conectar o Pub/Sub ao BigQuery usando o Functions.
6. Configurar o hardware de IoT (opcional)
Montar o Raspberry Pi e o sensor
Se houver mais de sete fixações, reduza o cabeçalho para apenas sete. Solde os pinos do conector de cabeçalho à placa do sensor.

Instale com cuidado os pinos do cabeçalho do martelo no Raspberry Pi.

Formate o cartão SD e instale o NOOBS (New Out Of Box Software) seguindo as etapas aqui. Insira o cartão SD no Raspberry Pi e coloque o Raspberry Pi na caixa.

Use os fios da placa de ensaio para conectar o sensor ao Raspberry Pi de acordo com o diagrama abaixo.

Pino do Raspberry Pi | Conexão do sensor |
Pino 1 (3,3 V) | NIV |
Pino 3 (CPIO2) | SDI |
Pino 5 (GPIO3) | SCK |
Pino 9 (terra) | GND |

Conecte o monitor (usando o conector mini-HDMI), o teclado/mouse (com o hub USB) e, por fim, o adaptador de energia.
Configurar o Raspberry Pi e o sensor
Depois que o Raspberry Pi terminar de inicializar, selecione o Raspbian como o sistema operacional desejado, verifique se o idioma está correto e clique em "Instalar" (ícone de disco rígido na parte superior esquerda da janela).

Clique no ícone do Wi-Fi (canto superior direito da tela) e selecione uma rede. Se for uma rede segura, insira a senha (chave pré-compartilhada).

Clique no ícone de framboesa (canto superior esquerdo da tela), selecione "Preferências" e depois "Configuração do Raspberry Pi". Na guia "Interfaces", ative o I2C. Na guia "Localização", defina a localidade e o fuso horário. Depois de definir o fuso horário, permita que o Raspberry Pi seja reiniciado.

Depois que a reinicialização for concluída, clique no ícone "Terminal" para abrir uma janela do terminal.

Digite o seguinte comando para garantir que o sensor esteja conectado corretamente.
sudo i2cdetect -y 1
O resultado será assim. Verifique se ele mostra 77.

Instale o SDK Google Cloud.
Para aproveitar as ferramentas da plataforma Google Cloud, o SDK Google Cloud precisa ser instalado no Raspberry Pi. O SDK inclui as ferramentas necessárias para gerenciar e aproveitar o Google Cloud Platform e está disponível para várias linguagens de programação.
Abra uma janela de terminal no Raspberry Pi, se ainda não tiver uma aberta, e defina uma variável de ambiente que corresponda à versão do SDK ao sistema operacional no Raspberry Pi.
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
Agora adicione o local em que os pacotes do SDK do Google Cloud estão armazenados para que as ferramentas de instalação saibam onde procurar quando for solicitado instalar o SDK.
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
Adicione a chave pública do repositório de pacotes do Google para que o Raspberry Pi verifique a segurança e confie no conteúdo durante a instalação.
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Verifique se todo o software no Raspberry Pi está atualizado e instale o SDK Google Cloud principal.
sudo apt-get update && sudo apt-get install google-cloud-sdk
Quando a mensagem "Quer continuar?" aparecer, pressione Enter.
Instale o pacote tendo usando o gerenciador de pacotes do Python. Esse pacote é usado para verificar se um script está sendo executado mais de uma vez e se está sendo instalado para o aplicativo no script de clima.
pip install tendo
Verifique se os pacotes do Google Cloud Pub/Sub e do OAuth2 para Python estão instalados e atualizados usando o gerenciador de pacotes do Python.
sudo pip install --upgrade google-cloud-pubsub
sudo pip install --upgrade oauth2client
Inicialize o SDK Google Cloud.
O SDK permite acesso remoto e autenticado ao Google Cloud. Neste codelab, ele será usado para acessar o bucket de armazenamento para que a chave de segurança possa ser baixada facilmente no Raspberry Pi.
Na linha de comando do Raspberry Pi, insira
gcloud init --console-only
Quando a mensagem "Quer fazer login (S/N)?" aparecer, pressione Enter.
Quando você vir "Acesse o seguinte link no seu navegador", seguido de um URL longo que começa com https://accounts.google.com/o/oauth?..., passe o cursor sobre o URL com o mouse, clique com o botão direito do mouse e selecione "Copiar URL". Em seguida, abra o navegador da Web (ícone de globo azul no canto superior esquerdo da tela), clique com o botão direito do mouse na barra de endereço e clique em "Colar".
Quando a tela de login aparecer, digite o endereço de e-mail associado à sua conta do Google Cloud e pressione "Enter". Em seguida, digite sua senha e clique no botão "Próxima".
Você vai receber uma solicitação informando que o SDK Google Cloud quer acessar sua Conta do Google. Clique no botão "Permitir".
O código de verificação vai aparecer. Com o mouse, destaque o texto, clique com o botão direito do mouse e escolha "Copiar". Volte à janela do terminal, confira se o cursor está à direita de "Enter verification code:", clique com o botão direito do mouse e escolha "Colar". Pressione o botão "Enter".
Se for solicitado que você "Escolha o projeto na nuvem a ser usado", insira o número correspondente ao nome do projeto que você está usando neste codelab e pressione "Enter".
Se você receber uma solicitação para ativar a API Compute, pressione o botão "Enter" para fazer isso. Em seguida, você vai precisar configurar as definições do Google Compute Engine. Pressione "Enter". Uma lista de regiões/zonas em potencial vai aparecer. Escolha uma perto de você, insira o número correspondente e pressione "Enter".
Em instantes, mais informações vão aparecer. O SDK Google Cloud está configurado. Você pode fechar a janela do navegador da Web, porque não vai precisar dela.
Instalar o software do sensor e o script de clima
Na linha de comando do Raspberry Pi, clone os pacotes necessários para ler informações dos pinos de entrada/saída.
git clone https://github.com/adafruit/Adafruit_Python_GPIO
Instalar os pacotes baixados
cd Adafruit_Python_GPIO
sudo python setup.py install
cd ..
Clone o código do projeto que ativa o sensor de clima.
git clone https://github.com/googlecodelabs/iot-data-pipeline
Copie o driver do sensor para o mesmo diretório do restante do software baixado.
cd iot-data-pipeline/third_party/Adafruit_BME280
mv Adafruit_BME280.py ../..
cd ../..
Edite o script digitando...
nano checkWeather.py
Mude o projeto para seu ID do projeto e o tópico para o nome do tópico do Pub/Sub (esses dados foram anotados nas seções "Como configurar" e "Criar um tópico do Pub/Sub" deste codelab).
Mude os valores de sensorID, sensorZipCode, sensorLat e sensorLong para o que você quiser. Os valores de latitude e longitude de um local ou endereço específico podem ser encontrados aqui.
Quando terminar de fazer as mudanças necessárias, pressione Ctrl-X para sair do editor nano. Pressione Y para confirmar.
# constants - change to fit your project and location
SEND_INTERVAL = 10 #seconds
sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
credentials = GoogleCredentials.get_application_default()
project="myProject" #change this to your Google Cloud project id
topic = "myTopic" #change this to your Google Cloud PubSub topic name
sensorID = "s-Googleplex"
sensorZipCode = "94043"
sensorLat = "37.421655"
sensorLong = "-122.085637"
Instalar a chave de segurança
Copie a chave de segurança (na seção "Publicação segura em um tópico") para o Raspberry Pi.
Se você usou SFTP ou SCP para copiar a chave de segurança da máquina local para o Raspberry Pi (no diretório /home/pi), pule a próxima etapa e vá para a exportação do caminho.
Se você colocou a chave de segurança em um bucket de armazenamento, lembre-se do nome dele e do nome do arquivo. Use o comando gsutil para copiar a chave de segurança. Esse comando pode acessar o Google Storage (por isso, ele é chamado de gsutil e o caminho para o arquivo começa com gs://). Mude o comando abaixo para incluir o nome do bucket e do arquivo.
gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .
Uma mensagem vai indicar que o arquivo está sendo copiado e que a operação foi concluída.
Na linha de comando do Raspberry Pi, exporte um caminho para a chave de segurança (mude o nome do arquivo para corresponder ao que você tem).
export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json
Agora você tem um sensor meteorológico de IoT concluído e pronto para transmitir dados ao Google Cloud.
7. Iniciar o pipeline de dados
Talvez seja necessário ativar a API Compute
Streaming de dados de um Raspberry Pi
Se você construiu um sensor meteorológico de IoT Raspberry Pi, inicie o script que vai ler os dados meteorológicos e enviá-los para o Google Cloud Pub/Sub. Se você não estiver no diretório /home/pi/iot-data-pipeline, vá até ele primeiro.
cd /home/pi/iot-data-pipeline
Iniciar o script de clima
python checkWeather.py
A janela do terminal vai mostrar os resultados dos dados meteorológicos a cada minuto. Com o fluxo de dados, você pode pular para a próxima seção (Verificar se os dados estão fluindo).
Streaming de dados simulados
Se você não criou o sensor climático de IoT, pode simular o streaming de dados usando um conjunto de dados públicos armazenado no Google Cloud Storage e inserindo-o no tópico do Pub/Sub. O Google Dataflow será usado com um modelo fornecido pelo Google para leitura do Cloud Storage e publicação no Pub/Sub.
Como parte do processo, o Dataflow vai precisar de um local de armazenamento temporário. Por isso, vamos criar um bucket de armazenamento para essa finalidade.
No console do Cloud, selecione "Storage" e "Navegador".

Clique no botão "Criar bucket".

Escolha um nome para o bucket de armazenamento (lembre-se de que ele precisa ser globalmente exclusivo em todo o Google Cloud) e clique no botão "Criar". Lembre-se do nome desse bucket de armazenamento, porque ele será necessário em breve.

No console do Cloud, selecione Dataflow.

Clique em "Criar job usando um modelo" (parte superior da tela).

Preencha os detalhes do job conforme mostrado abaixo, prestando atenção ao seguinte:
- Insira o nome do job dataflow-gcs-to-pubsub.
- Sua região será selecionada automaticamente de acordo com o local de hospedagem do projeto e não precisará ser alterada.
- Selecione um modelo do Cloud Dataflow de texto do GCS para o Cloud Pub/Sub.
- Em "Arquivos de entrada do Cloud Storage", insira gs://codelab-iot-data-pipeline-sampleweatherdata/*.json. Esse é um conjunto de dados público.
- Para o tópico de saída do Pub/Sub, o caminho exato vai depender do nome do projeto e será algo como "projects/yourProjectName/topics/weatherdata".
- Defina o local temporário como o nome do bucket do Cloud Storage que você acabou de criar junto com um prefixo de nome de arquivo "tmp". Ele terá esta aparência: "gs://myStorageBucketName/tmp".
Quando todas as informações estiverem preenchidas (veja abaixo), clique no botão "Executar job".

O job do Dataflow vai começar a ser executado.

O job do Dataflow leva aproximadamente um minuto para ser concluído.

8. Verificar se os dados estão fluindo
Registros de funções do Cloud
Verificar se a função do Cloud está sendo acionada pelo Pub/Sub
gcloud beta functions logs read function-weatherPubSubToBQ
Os registros precisam mostrar que a função está sendo executada, que os dados estão sendo recebidos e que estão sendo inseridos no BigQuery.

Dados do BigQuery
Verifique se os dados estão sendo transferidos para a tabela do BigQuery. No console do Cloud, acesse o BigQuery (bigquery.cloud.google.com).

Abaixo do nome do projeto (no lado esquerdo da janela), clique no conjunto de dados (weatherData), na tabela (weatherDataTable) e no botão "Consultar tabela".

Adicione um asterisco à instrução SQL para que ela seja SELECT * FROM... conforme mostrado abaixo e clique no botão EXECUTAR CONSULTA.

Se for solicitado, clique no botão "Executar consulta".

Se você vir resultados, os dados estão fluindo corretamente.

Com o fluxo de dados, agora você pode criar um painel de análise.
9. Criar um painel do Data Studio
O Google Data Studio transforma os dados em relatórios e painéis informativos, fáceis de ler e de compartilhar e totalmente personalizáveis.
No navegador da Web, acesse https://datastudio.google.com

Em "Iniciar um novo relatório", clique em "Em branco" e depois no botão "Começar".

Marque a caixa de seleção para aceitar os termos, clique no botão "Próxima", selecione os e-mails que você quer receber e clique no botão "Concluído". Mais uma vez, em "Iniciar um novo relatório", clique em "Em branco".

Clique no botão "Criar nova fonte de dados".

Clique em "BigQuery", depois no botão "Autorizar" e escolha a Conta do Google que você quer usar com o Data Studio. Ela precisa ser a mesma que você usou no codelab.

Clique no botão "Permitir".

Selecione o nome do projeto, o conjunto de dados e a tabela. Em seguida, clique no botão "Conectar".

Mude os campos de tipo conforme mostrado abaixo. Tudo deve ser um número, exceto "timecollected" e "sensorID". O timecollected está definido como "Data e hora", e não apenas "Data". Mude os campos de agregação conforme mostrado abaixo. O ponto de orvalho, a temperatura, a umidade e a pressão precisam ser médias, e todo o resto precisa ser definido como "Nenhum". Clique no botão "Criar relatório".

Confirme clicando no botão "Adicionar ao relatório".

Se for solicitado, selecione sua Conta do Google e clique no botão "Permitir" para que o Data Studio armazene os relatórios no Google Drive.

Uma tela em branco é apresentada para você criar seu painel. Na linha superior de ícones, escolha "Série temporal".

Desenhe um retângulo no canto superior esquerdo da folha em branco. Ela deve ocupar cerca de ¼ da página em branco total.

No lado direito da janela, selecione a guia "Estilo". Mude "Dados ausentes" de "Linha até zero" para "Quebras de linha". Na seção "Eixo Y à esquerda", exclua o 0 de "Valor mínimo do eixo" para mudar para "(Automático)".

Clique no gráfico na planilha e copie/cole (Ctrl-C/Ctrl-V) três vezes. Alinhe os gráficos para que cada um ocupe ¼ do layout.

Clique em cada gráfico e, na seção "Propriedades e dados da série temporal", clique na métrica atual (ponto de orvalho) e escolha outra para ser exibida até que todas as quatro leituras de clima (ponto de orvalho, temperatura, umidade e pressão) tenham um gráfico próprio.


Agora você tem um painel básico.

10. Parabéns!
Você criou um pipeline de dados completo. Assim, você aprendeu a usar o Google Pub/Sub, implantar uma função sem servidor, aproveitar o BigQuery e criar um painel de análise usando o Data Studio. Além disso, você aprendeu a usar o SDK Google Cloud com segurança para trazer dados para o Google Cloud Platform. Por fim, você agora tem experiência prática com um padrão arquitetônico importante que pode lidar com grandes volumes e manter a disponibilidade.

Limpeza
Depois de terminar de testar os dados meteorológicos e o pipeline de análise, remova os recursos em execução.
Se você criou o sensor de IoT, desligue-o. Pressione Ctrl+C na janela do terminal para interromper o script e digite o seguinte para desligar o Raspberry Pi:
shutdown -h now
Acesse o Cloud Functions, clique na caixa de seleção ao lado de function-weatherPubSubToBQ e clique em "Excluir".

Acesse o Pub/Sub, clique em "Tópico", marque a caixa de seleção ao lado do tópico "weatherdata" e clique em "Excluir".

Acesse "Armazenamento", clique nas caixas de seleção ao lado dos buckets de armazenamento e clique em "Excluir".

Acesse bigquery.cloud.google.com, clique na seta para baixo ao lado do nome do projeto, clique na seta para baixo à direita do conjunto de dados "weatherData" e clique em "Excluir conjunto de dados".

Quando solicitado, digite o ID do conjunto de dados (weatherData) para concluir a exclusão dos dados.
