Ingestão via BigQuery, transformação em arquitetura Medallion e consumo analítico com R/dbplyr
Author
Jennifer Luz Lopes
Published
December 26, 2025
Contexto
Este relatório apresenta uma análise da produção de grãos no Brasil utilizando dados oficiais do IBGE/Pesquisa Agrícola Municipal (PAM), processados em ambiente cloud com Google BigQuery e analisados em R através do pacote dbplyr.
O objetivo é demonstrar um pipeline de dados completo, da ingestão à geração de resultados.
Arquitetura do Pipeline
O projeto segue a arquitetura Medallion (Bronze, Silver e Gold), estruturada em cinco etapas:
1. Ingestão de dados (Bronze)
Os dados da PAM/IBGE foram extraídos do datalake público da Base dos Dados, hospedado no BigQuery. Nesta camada, os dados permanecem em formato bruto com filtros mínimos aplicados apenas às culturas de interesse, preservando a integridade original e permitindo reprocessamento futuro quando necessário.
2. Transformação (Silver)
A camada Silver consolida dados limpos e padronizados, incluindo:
Cálculo de métricas produtivas: produtividade, valor por tonelada e eficiência de uso da terra
Classificações regionais e produtivas
Tratamento de valores inconsistentes e outliers
Tabelas agregadas por município e unidade federativa reduzem o volume de dados e preparam a base para análises subsequentes, priorizando qualidade.
3. Análises (Gold)
A camada Gold contém tabelas orientadas a questões de negócio, incluindo:
Evolução temporal da produção nacional
Ranking estadual de produtividade
Especialização regional da produção
Concentração produtiva e identificação de municípios emergentes
As métricas são pré-calculadas e armazenadas no BigQuery para consumo.
4. Consumo via R e BigQuery
O acesso aos dados ocorre diretamente no BigQuery através do dbplyr, que traduz operações R para SQL.
As consultas executam exclusivamente sobre tabelas Gold, garantindo menor volume processado e maior eficiência de custos.
A função collect() é utilizada apenas na etapa final, quando os dados já estão agregados.
Configuração do Ambiente
Ver código
library(pacman)pacman::p_load( DBI, bigrquery, dbplyr, dplyr, ggplot2, scales)# Conexão com o dataset Gold no BigQuery# Assume que as tabelas da camada Gold estão no dataset com sufixo "_gold"con <- DBI::dbConnect( bigrquery::bigquery(),project =Sys.getenv("GCP_PROJECT_ID", "pipeline-pam"),dataset =paste0(Sys.getenv("BQ_DATASET_ID", "analise_lavouras"), "_gold"),billing =Sys.getenv("GCP_PROJECT_ID", "pipeline-pam"))
Nesta seção examinamos a evolução da produção de grãos (Soja, Milho e Arroz) a partir do ano 2000. A consulta é realizada no dataset Gold e agrupa os dados por ano e produto.
ℹ The bigrquery package is using a cached token for
'jenniferlopesagronomia@gmail.com'.
Ver código
# Exibir SQL gerado para conferência (boa prática)dbplyr::sql_render(gold_evolucao)
<SQL> SELECT `ano`, `produto_grupo`, `producao_total_ton`, `produtividade_media`
FROM `gold_evolucao_temporal`
WHERE (`ano` >= 2000.0)
Coleta final
Ver código
df_evolucao <- gold_evolucao |>collect()
Visualização
Ver código
ggplot( df_evolucao,aes(x = ano, y = producao_total_ton /1e6, color = produto_grupo)) +geom_line(linewidth =1.3) +geom_point(size =2.5) +scale_color_manual(values = cafe_pal) +scale_y_continuous(labels =label_number(suffix =" M t")) +labs(title ="Evolução da Produção Nacional de Grãos",subtitle ="Soja, Milho e Arroz",x =NULL,y ="Produção (Milhões de toneladas)") +theme_cafe()
Ranking de Estados por Produtividade
Aqui selecionamos os 10 estados com maior produtividade média no último ano disponível, separando por cultura. A consulta utiliza os dados da tabela gold_ranking_estados.
<SQL> SELECT `gold_ranking_estados`.*
FROM `gold_ranking_estados`
WHERE (`rank_producao` <= 10.0)
Ver código
df_ranking <- gold_ranking |>collect()
Ver código
ggplot( df_ranking,aes(x =reorder(sigla_uf, prod_media),y = prod_media,fill = produto_grupo )) +geom_col(width =0.7) +coord_flip() +facet_wrap(~ produto_grupo, scales ="free_y") +scale_fill_manual(values = cafe_pal) +labs(title ="Top 10 Estados em Produtividade Média",subtitle ="Ranking por cultura – último ano disponível",x =NULL,y ="Produtividade (t/ha)") +theme_cafe() +theme(legend.position ="none")
Especialização Regional
Esta análise mostra a participação de cada região na produção nacional para cada cultura. Utilizamos a tabela gold_perfil_regional para computar a especialização.
<SQL> SELECT `regiao`, `produto_grupo`, `especializacao_regional`
FROM `gold_perfil_regional`
Ver código
df_regional <- gold_regional |>collect()
Ver código
ggplot( df_regional,aes(x = regiao,y = especializacao_regional,fill = produto_grupo)) +geom_col(position ="dodge", width =0.75) +facet_wrap(~ produto_grupo) +scale_fill_manual(values = cafe_pal) +labs(title ="Especialização Regional da Produção",x =NULL,y ="Participação na Produção Nacional (%)") +theme_cafe() +theme(axis.text.x =element_text(angle =30, hjust =1),legend.position ="none")
Municípios Emergentes
A tabela gold_municipios_emergentes contém os municípios que apresentaram maiores ganhos de produtividade ou crescimento de produção nos últimos anos. Apresentamos os top registros para cada cultura.