Synapse Link para Cosmos DB: analytics operacionais sem ETL
João Barros
15 de July de 2025
1 min de leitura
O Azure Synapse Link for Cosmos DB é uma integração HTAP (Hybrid Transactional/Analytical Processing) que replica automaticamente dados do Cosmos DB para um analytical store no Synapse, sem impacto nas operações transaccionais.
Como funciona
Cosmos DB (OLTP)
└─ Transactional Store (row-oriented, TTL curto)
└─ Analytical Store (column-oriented, auto-sync, TTL longo)
↑
Synapse Link (replicação automática, ~2 min latência)
↓
Azure Synapse Analytics
└─ Serverless SQL Pool → T-SQL sobre dados Cosmos
└─ Spark Pool → PySpark sobre dados Cosmos
Activar Synapse Link no Cosmos DB
// Portal: Cosmos DB account → Features → Azure Synapse Link → Enable
// Demora ~5 minutos; operação não reversível
// Activar por container (via SDK ou portal):
az cosmosdb sql container update \
--account-name cosmos-bconcepts \
--database-name operational \
--name pedidos \
--analytical-storage-ttl -1 // -1 = sem expiração
Consultar com Serverless SQL
-- No Synapse Studio (sem pipeline, dados actualizados em ~2 min)
SELECT
JSON_VALUE(doc, '$.cliente_id') AS cliente_id,
JSON_VALUE(doc, '$.estado') AS estado,
JSON_VALUE(doc, '$.valor_total') AS valor,
JSON_VALUE(doc, '$.data_criacao') AS data
FROM OPENROWSET(
PROVIDER = 'CosmosDB',
CONNECTION = 'account=cosmos-bconcepts;database=operational',
OBJECT = 'pedidos',
SERVER_CREDENTIAL = 'CosmosDBCredential'
)
WITH (doc NVARCHAR(MAX)) AS rows
WHERE JSON_VALUE(doc, '$.estado') = 'Pendente';
Consultar com PySpark
df = spark.read.format("cosmos.olap") \
.option("spark.synapse.linkedService", "CosmosDB_Operational") \
.option("spark.cosmos.container", "pedidos") \
.load()
df.groupBy("estado").agg({"valor_total": "sum"}).show()
Conclusão
O Synapse Link elimina o padrão clássico de replicar dados operacionais para o data warehouse via ETL nocturno. Para análises sobre dados quase-em-tempo-real de Cosmos DB, é a solução mais simples e eficiente disponível na Azure.