Neste artigo rápido, vou instigar você a iniciar seu aprendizado na plataforma GCP se cadastrando, colocando o cartão de crédito mas gastando 0 reais.
Introdução:
Primeiro de tudo é que você deve conhecer pelo menos o básico de todas as clouds, principalmente os principais produtos, desta forma esse artigo é simples rápido e divertido por que não tem erros, muitas dificuldades e já trás uma familiaridade com GCP CLI e sua interface cloud.
Requisitos
- Conhecimento básico de SQL Query.
- ter o gcloud CLI instalado no seu Windows ou Linux.
- Conhecimento básico de python.
Aqui está o rascunho do seu artigo para o dev.to, seguindo o estilo solicitado: linguagem descontraída, sotaque paulista, sem emojis, foco técnico prático e formatado em Markdown.
Do Zero ao ETL no GCP: BigQuery, Dataproc e PySpark na Prática
Fala, meu! Beleza?
Hoje o papo é reto: vamos montar um pipeline de dados na Google Cloud Platform (GCP) sem enrolação. A ideia é sair do zero, configurar a conta, subir um BigQuery boladão, conectar um cluster Dataproc e rodar um PySpark maroto pra transformar uns dados de voos.
Se você tá querendo entender como essas peças se encaixam no mundo real, cola aqui que eu vou te passar a visão.
1. O Início de tudo: A Conta no GCP
Primeira coisa, mano, você precisa de uma conta no Google Cloud. Se você ainda não tem, corre lá e cria. O Google costuma dar uns créditos iniciais (aqueles 300 dólares) que dá pra brincar bastante sem gastar um tostão do bolso.

Criou a conta? Criou um projeto novo? Então já era, o ambiente tá pronto pra gente começar a bagunça.
- Preparando o Terreno: Cloud SDK e BigQuery Agora a gente vai pro terminal, que é onde a mágica acontece. Você precisa ter o Google Cloud SDK instalado na sua máquina pra rodar os comandos gcloud e bq.
Vamos começar criando nossa estrutura no BigQuery. A gente vai criar uma tabela pra receber uns dados de voos.
Criando a tabela na unha
Dá uma olhada nesse comando aqui:
bq mk --table etl_db.voos_dia_30
Aqui está o rascunho do seu artigo para o dev.to, seguindo o estilo solicitado: linguagem descontraída, sotaque paulista, sem emojis, foco técnico prático e formatado em Markdown.
Do Zero ao ETL no GCP: BigQuery, Dataproc e PySpark na Prática
Fala, meu! Beleza?
Hoje o papo é reto: vamos montar um pipeline de dados na Google Cloud Platform (GCP) sem enrolação. A ideia é sair do zero, configurar a conta, subir um BigQuery boladão, conectar um cluster Dataproc e rodar um PySpark maroto pra transformar uns dados de voos.
Se você tá querendo entender como essas peças se encaixam no mundo real, cola aqui que eu vou te passar a visão.
- O Início de tudo: A Conta no GCP Primeira coisa, mano, você precisa de uma conta no Google Cloud. Se você ainda não tem, corre lá e cria. O Google costuma dar uns créditos iniciais (aqueles 300 dólares) que dá pra brincar bastante sem gastar um tostão do bolso.
Criou a conta? Criou um projeto novo? Então já era, o ambiente tá pronto pra gente começar a bagunça.
- Preparando o Terreno: Cloud SDK e BigQuery Agora a gente vai pro terminal, que é onde a mágica acontece. Você precisa ter o Google Cloud SDK instalado na sua máquina pra rodar os comandos gcloud e bq.
Vamos começar criando nossa estrutura no BigQuery. A gente vai criar uma tabela pra receber uns dados de voos.
Criando a tabela na unha
Dá uma olhada nesse comando aqui:
bq mk --table etl_db.voos_dia_30`
O que tá rolando aqui?
- bq mk: O comando pra criar coisas no BigQuery.
- etl_db: É o nome do seu dataset (o banco de dados, saca?).
- voos_dia_30: É a tabela que a gente tá criando.
Carregando os dados (e resolvendo perrengues)
Agora a gente vai jogar dados lá dentro. O comando básico seria esse aqui, pedindo pro BigQuery se virar pra descobrir os tipos de dados (--autodetect):
bq load --autodetect etl_db.voos_dia_30 gs://basevoos/dados_brutos/base_voos_30.json
Só que a vida de dev não é fácil, né meu? Se você rodar isso direto num JSON cheio de linhas, pode dar ruim porque ele tenta ler como CSV ou se perde no formato. O pulo do gato é especificar o formato certo:
bq load --autodetect --source_format=NEWLINE_DELIMITED_JSON etl_db.voos_dia_30 gs://basevoos/dados_brutos/base_voos_30.json
Agora sim! O --source_format=NEWLINE_DELIMITED_JSON avisa pro BigQuery que é um JSON quebra-linha.
Se você for um cara mais organizado e já tiver o esquema dos dados num arquivo local, dá pra mandar assim também:
Sempre vá em detalhes e copie o gsutil por que você vai utilizar bastante:

bq load --source_format=NEWLINE_DELIMITED_JSON --schema=schema.json etl_db.voos_dia_30 gs://base_voos_latam/2023-07-31.json

3. Performance é dinheiro: Particionamento
Mano, se liga nisso aqui. Fiz uns testes pra ver a diferença entre uma tabela normal e uma particionada. No BigQuery, você paga pelo tanto de dados que você escaneia.
Olha a diferença nas queries:
Consultando tudo (Full Scan):
`
SELECT * FROM `etl_db.tb_voos`; -- Consome 8,49 MB
SELECT * FROM `etl_db.tb_voos_particionada`; -- Consome 16,98 MB (Curioso, né? Mas calma)
`
Consultando com filtro (Onde o filho chora e a mãe não vê):
`
SELECT * FROM etl_db.tb_voos
WHERE flight_date = '2023-07-30';
— Continua consumindo 8,49 MB porque ele leu a tabela inteira!
SELECT * FROM etl_db.tb_voos_particionada
WHERE flight_date = '2023-07-30';
— Agora sim: 8,49 MB (mas num cenário real com terabytes, isso aqui cairia drasticamente pq ele lê SÓ a partição do dia).
`
Resumo da ópera: particione suas tabelas por data sempre que der. É bom pro bolso e pra performance.
4. Subindo o Nível: Dataproc e Transformações
Agora vamos pro Dataproc, que é o Spark gerenciado do Google. Primeiro, garante que você tem permissão pra brincar, habilitando a API:
gcloud services enable cloudresourcemanager.googleapis.com --project=869694498585
Com o cluster criado (vamos supor que você já subiu um cluster chamado cluster-e063-m), a gente precisa acessar o Jupyter Notebook que roda dentro dele. Mas como acessar algo que tá numa rede fechada lá no Google? Túnel SSH, meu parceiro!
Roda esse comando aqui na sua máquina local pra criar o túnel:
gcloud compute ssh cluster-e063-m --project=gcplearning-486711 --zone=us-central1-a -- -D 1080 -N
Lembrando de trocar o project pelo nome do seu projeto e nome do cluster DataProc.
5. Mão na Massa com PySpark
Agora, dentro do Jupyter, a gente vai fazer o ETL de verdade. Nada de arrastar caixinha, aqui é código.
O objetivo é pegar os dados brutos, categorizar a distância dos voos e salvar de volta no Storage.
Configurando o ambiente
`
import pyspark
from pyspark import SparkContext
from pyspark.sql import SQLContext
from datetime import datetime
from pytz import timezone
Configurando fuso horário pra gente não se perder
fuso = 'America/Sao_Paulo'
formato_data = '%Y-%m-%d'
data_atual = datetime.now(timezone(fuso)).strftime(formato_data)
`
Lendo os dados
A gente lê o JSON direto do Bucket. O Spark já infere o Schema, o que é uma mão na roda.
arquivo_bruto_entrada = spark.read.json("gs://base_voos_latam/2023-07-31.json")
arquivo_bruto_entrada.createOrReplaceTempView('tb_voo')
Transformando com SQL
Aqui que eu acho sensacional. Você pode misturar Python com SQL. Vamos categorizar os voos baseados na distância percorrida. Se é pertinho, categoria 1, se é longe pra caramba, categoria 5.
query = """
SELECT distance,
CASE
WHEN distance BETWEEN 0 AND 1000 THEN 1
WHEN distance BETWEEN 1001 AND 2000 THEN 2
WHEN distance BETWEEN 2001 AND 3000 THEN 3
WHEN distance BETWEEN 3001 AND 4000 THEN 4
WHEN distance BETWEEN 4001 AND 5000 THEN 5
END as categoria_distancia
FROM tb_voo
LIMIT 10
"""
df_categoria_distancia = spark.sql(query

Salvando o resultado
Depois de processar, a gente salva isso de volta no Google Cloud Storage, já particionado ou organizado por data de execução do ETL.
`
Definindo onde vai salvar
storage = "gs://base_voos_latam/bronze/"+data_atual+"_etl_voos"
Salvando em JSON (com coalesce(1) pra gerar um arquivo só, mas cuidado com isso em prod hein!)
df_categoria_distancia.coalesce(1).write.format("JSON").save(storage)
Conclusão
É isso, meu! Viu como não é bicho de sete cabeças? A gente saiu de um arquivo JSON solto, jogou no BigQuery, viu que performance importa, subiu um cluster Spark e processou os dados com Python.
Agora é só escalar isso aí e partir pro abraço. Se curtiu, deixa aquele like pra fortalecer.
Abraço e até a próxima!
dataengineering #googlecloud #pyspark #bigquery #etl #devcommunity #dados

