startupdata-lakecost-reductiontutorialgetting-started

O Data Lake de $0 para Startups: DataSpoc + S3 em 30 Minutos

Michael San Martim · 2026-04-28

Você é o engenheiro fundador de uma startup seed-stage. Seu CEO pergunta “quantos usuários se cadastraram semana passada?” e você faz SSH no servidor de produção, abre o psql, escreve uma query, cola o resultado no Slack. Na semana seguinte a pergunta é “qual é nosso MRR do Stripe?” e agora você está malabarizando duas fontes de dados.

Este post constrói uma plataforma de dados completa em 30 minutos por menos de $5/mês. Você vai ingerir do Postgres e Stripe, consultar com SQL e IA, e conectar o Claude como agente. No final, qualquer pessoa no seu time pode fazer perguntas sobre seus dados sem incomodar você.

O Que Você Vai Construir

Postgres ──→ [Pipe] ──→ S3 Bucket ──→ [Lens] ──→ SQL Shell
Stripe ──→ [Pipe] ──┘ │ ├──→ AI Ask
│ ├──→ Jupyter
│ └──→ MCP → Claude
  • Pipe extrai do Postgres e Stripe, escreve Parquet no S3
  • Lens consulta os arquivos Parquet com DuckDB
  • MCP conecta o Claude (ou Cursor, Windsurf) ao seu data lake

Custo total: armazenamento S3 (~$2/mês para dados de escala startup) + DataSpoc ($0, open source).

Minuto 0-5: Instalar Tudo

Terminal window
# Install both tools
pip install dataspoc-pipe dataspoc-lens
# Install the Singer taps you need
dataspoc-pipe add tap-postgres
dataspoc-pipe add tap-stripe
# Verify
dataspoc-pipe --version
dataspoc-lens --version

Crie um bucket S3 para seu data lake:

Terminal window
aws s3 mb s3://mycompany-data-lake --region us-east-1

Minuto 5-12: Ingerir do Postgres

Crie a configuração do pipeline:

pipelines/postgres-app.yaml
source:
tap: tap-postgres
config:
host: "${DATABASE_HOST}"
port: 5432
database: "${DATABASE_NAME}"
user: "${DATABASE_READONLY_USER}"
password: "${DATABASE_READONLY_PASSWORD}"
tables:
- name: users
replication_method: incremental
replication_key: updated_at
- name: orders
replication_method: incremental
replication_key: updated_at
- name: subscriptions
replication_method: incremental
replication_key: updated_at
target:
bucket: "s3://mycompany-data-lake"
prefix: "raw/postgres"
format: parquet

Crie um usuário de banco de dados somente leitura (nunca use as credenciais da sua aplicação para ETL):

-- Run once on your Postgres database
CREATE USER dataspoc_readonly WITH PASSWORD 'secure-random-password';
GRANT CONNECT ON DATABASE myapp TO dataspoc_readonly;
GRANT USAGE ON SCHEMA public TO dataspoc_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO dataspoc_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO dataspoc_readonly;

Defina as variáveis de ambiente e execute:

Terminal window
export DATABASE_HOST="your-rds-endpoint.amazonaws.com"
export DATABASE_NAME="myapp"
export DATABASE_READONLY_USER="dataspoc_readonly"
export DATABASE_READONLY_PASSWORD="secure-random-password"
dataspoc-pipe run postgres-app
[09:05:01] Starting pipeline: postgres-app
[09:05:02] Extracting: users (2,340 rows)
[09:05:03] → raw/postgres/users/users_20260428.parquet (180 KB)
[09:05:03] Extracting: orders (8,920 rows)
[09:05:05] → raw/postgres/orders/orders_20260428.parquet (720 KB)
[09:05:05] Extracting: subscriptions (1,890 rows)
[09:05:06] → raw/postgres/subscriptions/subscriptions_20260428.parquet (95 KB)
[09:05:06] Pipeline complete: 3 tables, 13,150 rows

Minuto 12-20: Ingerir do Stripe

pipelines/stripe.yaml
source:
tap: tap-stripe
config:
api_key: "${STRIPE_API_KEY}"
# Use a restricted key with read-only access
start_date: "2025-01-01"
streams:
- charges
- customers
- invoices
- subscriptions
- balance_transactions
target:
bucket: "s3://mycompany-data-lake"
prefix: "raw/stripe"
format: parquet

Obtenha uma chave de API restrita no Stripe Dashboard (Settings > API Keys > Create Restricted Key com acesso somente leitura):

Terminal window
export STRIPE_API_KEY="rk_live_..."
dataspoc-pipe run stripe
[09:12:01] Starting pipeline: stripe
[09:12:03] Extracting: charges (4,560 records)
[09:12:08] Extracting: customers (2,120 records)
[09:12:11] Extracting: invoices (3,890 records)
[09:12:15] Extracting: subscriptions (1,450 records)
[09:12:18] Extracting: balance_transactions (12,340 records)
[09:12:22] Pipeline complete: 5 streams, 24,360 records

Minuto 20-25: Conectar o Lens e Consultar

Registre o bucket no Lens:

Terminal window
dataspoc-lens add-bucket s3://mycompany-data-lake --name datalake
dataspoc-lens tables
raw.postgres.users
raw.postgres.orders
raw.postgres.subscriptions
raw.stripe.charges
raw.stripe.customers
raw.stripe.invoices
raw.stripe.subscriptions
raw.stripe.balance_transactions

Oito tabelas de duas fontes. Agora consulte:

Terminal window
# How many users signed up last week?
dataspoc-lens query "
SELECT COUNT(*) AS signups
FROM raw.postgres.users
WHERE created_at >= CURRENT_DATE - INTERVAL 7 DAY
"
# What is our MRR?
dataspoc-lens query "
SELECT
SUM(plan_amount / 100.0) AS mrr_dollars
FROM raw.stripe.subscriptions
WHERE status = 'active'
"
# Revenue by day this month
dataspoc-lens query "
SELECT
DATE_TRUNC('day', created::TIMESTAMP) AS day,
SUM(amount / 100.0) AS revenue
FROM raw.stripe.charges
WHERE status = 'succeeded'
AND created::TIMESTAMP >= DATE_TRUNC('month', CURRENT_DATE)
GROUP BY 1
ORDER BY 1
"

Ou use IA (configure um provedor ou use Ollama de graça):

Terminal window
dataspoc-lens setup-ai # installs Ollama + local model
dataspoc-lens ask "what is our MRR?"
dataspoc-lens ask "how many users signed up each day this week?"
dataspoc-lens ask "what is the average revenue per user?"

Minuto 25-30: Conectar o Claude via MCP

Adicione a configuração do servidor MCP para Claude Desktop ou qualquer ferramenta compatível com MCP:

{
"mcpServers": {
"dataspoc-lens": {
"command": "dataspoc-lens",
"args": ["mcp"],
"env": {
"AWS_PROFILE": "default"
}
}
}
}

Agora no Claude Desktop, digite:

What tables do we have in the data lake?

O Claude chama o servidor MCP, descobre suas tabelas e responde. Continue com:

What is our MRR and how has it changed month over month?

O Claude escreve SQL, executa contra seus arquivos Parquet e dá uma resposta formatada com análise. Seu CEO agora pode perguntar diretamente ao Claude em vez de te pingar no Slack.

Agende

Adicione um cron job para manter os dados frescos:

Terminal window
crontab -e
# Extract from Postgres every hour
0 * * * * cd /opt/dataspoc && dataspoc-pipe run postgres-app >> /var/log/dataspoc/postgres.log 2>&1
# Extract from Stripe every 6 hours (API rate limits)
0 */6 * * * cd /opt/dataspoc && dataspoc-pipe run stripe >> /var/log/dataspoc/stripe.log 2>&1
# Refresh Lens cache after extractions
5 * * * * dataspoc-lens cache refresh-stale >> /var/log/dataspoc/cache.log 2>&1

Detalhamento de Custos

ComponenteCusto MensalNotas
DataSpoc Pipe$0Open source
DataSpoc Lens$0Open source
Armazenamento S3 (1 GB)$0.023Parquet é altamente comprimido
Requisições S3~$1-2PUT/GET para extração e queries
Ollama (IA local)$0Roda na sua máquina
Total< $3/mês

Compare com alternativas:

AlternativaCusto Mensal
Snowflake$400+ (warehouse mínimo)
BigQuery$0 (free tier) depois $5/TB consultado
Fivetran + Snowflake$500+
Airbyte Cloud + Redshift$400+
DataSpoc + S3< $5

O Que Você Ganha

Por menos de $5/mês, sua startup agora tem:

  • Ingestão de dados automatizada do Postgres e Stripe (horária)
  • Analytics SQL sobre Parquet na nuvem (sem warehouse para gerenciar)
  • Queries com IA (grátis com Ollama, ou use Claude/OpenAI)
  • Integração MCP para Claude Desktop, Cursor, Windsurf
  • Extração incremental (apenas dados novos são buscados)
  • Sem infraestrutura para gerenciar (S3 + ferramentas CLI)

Caminho de Crescimento: Quando Escalar

Esta configuração suporta uma startup do seed até a Series A confortavelmente. Aqui está quando considerar upgrades:

MarcoAção
Dados > 10 GBAdicionar mais armazenamento S3 ($0.23/mês por 10 GB)
Precisa de transformsAdicionar arquivos SQL de transform (veja nosso post alternativa ao dbt)
5+ fontes de dadosAdicionar mais pipelines Pipe (mesmo padrão)
Precisa de dashboardsConectar Metabase/Superset ao DuckDB via Lens
Time > 5 analistasConsiderar cache do Lens em servidor compartilhado
Dados > 1 TBConsiderar estratégia de particionamento, ainda funciona com DuckDB
Precisa de real-timeAí sim olhe para Kafka + streaming — ainda não

O insight principal: você sempre pode migrar para um stack mais pesado depois. Parquet no S3 é o formato de dados universal. Se você superar o DataSpoc, seus dados funcionam com Spark, Trino, Athena ou Snowflake external tables.

Adicionando Mais Fontes Depois

O DataSpoc Pipe suporta mais de 400 taps Singer. Adicione qualquer fonte em minutos:

Terminal window
# HubSpot CRM
dataspoc-pipe add tap-hubspot
# Google Analytics
dataspoc-pipe add tap-google-analytics
# Salesforce
dataspoc-pipe add tap-salesforce
# MySQL (if you have a second database)
dataspoc-pipe add tap-mysql
# Google Sheets (for manual data)
dataspoc-pipe add tap-google-sheets

Cada fonte ganha seu próprio YAML de pipeline e roda em seu próprio agendamento. Todos os dados pousam no mesmo bucket S3, consultáveis pela mesma interface Lens.

O Script de Setup Completo

Salve isso e execute para configurar tudo de uma vez:

#!/bin/bash
# setup-data-lake.sh -- Complete startup data lake setup
set -e
echo "=== DataSpoc Data Lake Setup ==="
# Install tools
echo "[1/6] Installing DataSpoc..."
pip install dataspoc-pipe dataspoc-lens
# Install taps
echo "[2/6] Installing source connectors..."
dataspoc-pipe add tap-postgres
dataspoc-pipe add tap-stripe
# Create S3 bucket
echo "[3/6] Creating S3 bucket..."
aws s3 mb s3://mycompany-data-lake --region us-east-1
# Run initial extraction
echo "[4/6] Running initial extraction..."
dataspoc-pipe run postgres-app
dataspoc-pipe run stripe
# Configure Lens
echo "[5/6] Configuring query engine..."
dataspoc-lens add-bucket s3://mycompany-data-lake --name datalake
# Setup local AI
echo "[6/6] Setting up AI queries..."
dataspoc-lens setup-ai
echo ""
echo "=== Setup Complete ==="
echo "Tables available:"
dataspoc-lens tables
echo ""
echo "Try: dataspoc-lens ask 'how many users signed up this week?'"

Trinta minutos. Menos de $5/mês. Uma plataforma de dados completa que cresce com você. Pare de fazer SSH na produção para responder perguntas de negócio.

Recomendados