- Add 37 census documentation files for IBGE census datasets (1970-2010) - Add dataviz wordcloud scripts and images - Add relatorio_final.md with research findings on households and living conditions New data from DuckDB queries: - 90.7M households, 203M population - 53.2% Black population - 27.9% female-headed households - 46.6% urban sewage without collection/treatment - 15,816 favela sectors (2010) - 68% Black population in Fortaleza
baseldosdados
Mirror completo das tabelas públicas do projeto Base dos Dados — 533 tabelas, ~675 GB em Parquet+zstd.
Os dados foram exportados do BigQuery para o Hetzner Object Storage (Helsinki) no formato Parquet com compressão zstd, organizados por dataset e tabela. O acesso é feito diretamente sobre os arquivos via DuckDB, sem necessidade de importar nada localmente — as queries leem os parquets do S3 sob demanda.
Consultando os dados
Acesso via browser ou curl, protegido por senha - peça!
Shell no browser
Acesse https://db.ミ.xyz → autentique → shell DuckDB interativo direto no browser.
Use .tables para listar os datasets.
SQL via curl
Endpoint POST /query — SQL no body, resultado como texto plano:
# Query inline
curl -s -X POST https://db.xn--2dk.xyz/query \
-H "X-Password: <senha>" \
--data-binary "SELECT count(*) FROM br_anatel_banda_larga_fixa.densidade_brasil"
# A partir de um arquivo .sql
curl -s -X POST https://db.xn--2dk.xyz/query \
-H "X-Password: <senha>" \
--data-binary @minha_query.sql
# Heredoc (útil em scripts)
curl -s -X POST https://db.xn--2dk.xyz/query \
-H "X-Password: <senha>" \
--data-binary @- << 'SQL'
SELECT sigla_uf, sum(densidade) AS total
FROM br_anatel_banda_larga_fixa.densidade_uf
WHERE ano = 2023
GROUP BY 1
ORDER BY 2 DESC
SQL
# Salvar resultado em arquivo
curl -s -X POST https://db.xn--2dk.xyz/query \
-H "X-Password: <senha>" \
--data-binary @query.sql > resultado.csv
Exploração local
Para rodar as queries na sua própria máquina com DuckDB instalado:
duckdb data/basedosdados.duckdb
As queries são executadas diretamente sobre os arquivos Parquet no S3 — não há download de dados. O DuckDB lê os arquivos remotos sob demanda via httpfs.
Precisa da credencial da .env - peça!
Ask: linguagem natural → SQL
Interface TUI que permite fazer perguntas em português e obter SQL automaticamente.
Arquitetura
Pergunta → [schema filtrado] → LLM local (sqlcoder) ou API externa
→ SQL
- Schema filtrado: As tabelas relevantes são filtradas e enviadas ao LLM
- Geração SQL: Modelo local (sqlcoder via Ollama) ou API externa (Gemini/OpenRouter)
No browser
Acesse https://ask.ミ.xyz → autentique → digite sua pergunta em português.
Local
# Compilar
cd ask
cargo build --release
# Modo interativo (TUI)
./target/release/ask
# Modo CLI
./target/release/ask "Quantos municípios tem SP?"
Variáveis de ambiente
| Variável | Padrão | Descrição |
|---|---|---|
SQL_GENERATOR |
gemini |
Generator: sqlcoder, gemini, ou openrouter |
GEMINI_API_KEY |
— | Chave API Gemini (obrigatória se usar gemini) |
OPENROUTER_API_KEY |
— | Chave API OpenRouter (obrigatória se usar openrouter) |
GEMINI_MODEL |
gemini-flash-lash |
Modelo Gemini |
OPENROUTER_MODEL |
openai/gpt-4o-mini |
Modelo OpenRouter |
OLLAMA_MODEL |
sqlcoder |
Modelo Ollama (sqlcoder ou sqlcoder:14b) |
OLLAMA_HOST |
http://localhost:11434 |
Host Ollama |
TOP_K_TABLES |
5 |
Número de tabelas a selecionar |
SCHEMA_FILE |
context/schema_compact_inline.txt |
Schema texto para fallback |
SCHEMA_JSON |
context/basedosdados-schema.json |
Schema JSON completo |
DB_FILE |
data/basedosdados.duckdb |
Arquivo DuckDB |
Pipeline de exportação
Seção para mantenedores — não necessário para consulta dos dados.
Fluxo
BigQuery (basedosdados) → GCS (Parquet + zstd) → Hetzner Object Storage (rclone)
- Descobre automaticamente todos os datasets e tabelas via API do BigQuery
- Exporta em paralelo no formato Parquet com compressão zstd
- Transfere GCS → Hetzner Object Storage via rclone (streaming direto, sem disco local)
- Verifica contagem de arquivos entre GCS e S3
Resume automático: se interrompido, basta rodar novamente.
Scripts
| Script | Função |
|---|---|
scripts/roda.sh |
Pipeline principal de exportação |
scripts/prepara_db.py |
Gera data/basedosdados.duckdb com views para todas as tabelas |
Configuração (.env)
| Variável | Descrição |
|---|---|
YOUR_PROJECT |
ID do projeto GCP (para faturamento) |
BUCKET_NAME |
Nome do bucket GCS intermediário |
BUCKET_REGION |
Região do bucket S3 (ex: eu-central) |
SOURCE_PROJECT |
Projeto fonte (basedosdados) |
PARALLEL_EXPORTS |
Jobs paralelos de exportação BigQuery (padrão: 8) |
HETZNER_S3_BUCKET |
Nome do bucket no Hetzner Object Storage |
HETZNER_S3_ENDPOINT |
Endpoint do Hetzner (ex: https://hel1.your-objectstorage.com) |
S3_CONCURRENCY |
Transfers paralelos do rclone (padrão: 64) |
PARALLEL_UPLOADS |
Datasets enviados em paralelo (padrão: 4) |
AWS_ACCESS_KEY_ID |
Access key do Hetzner Object Storage |
AWS_SECRET_ACCESS_KEY |
Secret key do Hetzner Object Storage |
BASIC_AUTH_PASSWORD |
Senha do shell web e endpoint /query |
GEMINI_API_KEY |
Chave da API Gemini para o ask |
Executando
chmod +x scripts/roda.sh
./scripts/roda.sh --dry-run # estima tamanho e custo
./scripts/roda.sh # execução local
./scripts/roda.sh --gcloud-run # cria VM no GCP, roda lá e deleta ao final
Autenticação GCP necessária antes da primeira exportação:
gcloud auth login
gcloud auth application-default login
gcloud config set project SEU_PROJECT_ID
--gcloud-run
Cria uma VM e2-standard-4 Debian 12 em us-central1-a, copia o script e o .env, instala dependências e executa via SSH.
| Variável | Padrão | Descrição |
|---|---|---|
GCP_VM_NAME |
bd-export-vm |
Nome da instância |
GCP_VM_ZONE |
us-central1-a |
Zona do Compute Engine |
Deploy do servidor para serviços de db e ask
haloy deploy -f haloy.yml
