Synapse Link para Cosmos DB: analytics operacional sin ETL
João Barros
15 de July de 2025
1 min de lectura
Azure Synapse Link for Cosmos DB es una integración HTAP (Hybrid Transactional/Analytical Processing) que replica automáticamente datos de Cosmos DB a un analytical store en Synapse, sin impacto en las operaciones transaccionales.
Cómo funciona
Cosmos DB (OLTP)
└─ Transactional Store (orientado a filas, TTL corto)
└─ Analytical Store (orientado a columnas, auto-sync, TTL largo)
↑
Synapse Link (replicación automática, ~2 min latencia)
↓
Azure Synapse Analytics
└─ Serverless SQL Pool → T-SQL sobre datos Cosmos
└─ Spark Pool → PySpark sobre datos Cosmos
Activar Synapse Link en Cosmos DB
// Portal: Cosmos DB account → Features → Azure Synapse Link → Enable
// Tarda ~5 minutos; operación no reversible
// Activar por container (vía SDK o portal):
az cosmosdb sql container update \
--account-name cosmos-bconcepts \
--database-name operational \
--name pedidos \
--analytical-storage-ttl -1 // -1 = sin expiración
Consultar con Serverless SQL
-- En Synapse Studio (sin pipeline, datos actualizados en ~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, '$.fecha_creacion') AS fecha
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') = 'Pendiente';
Consultar con 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()
Conclusión
Synapse Link elimina el patrón clásico de replicar datos operacionales al data warehouse vía ETL nocturno. Para análisis sobre datos casi en tiempo real de Cosmos DB, es la solución más simple y eficiente disponible en Azure.