DEV Community

William Rodriguez
William Rodriguez

Posted on

Upserts reales en un mundo append-only: ReplacingMergeTree y FINAL.

Upserts reales en un mundo append-only: ReplacingMergeTree y FINAL.

Día 07 de la serie técnica WClickHouse Open Source.

No necesitas sentencias UPDATE lentas para mantener el estado actual en ClickHouse. WClickHouse aprovecha ReplacingMergeTree para upserts ultrarrápidos.

Los Problemas Reales

  • Intentar mutaciones UPDATE pesadas en miles de millones de filas
  • Lidiar con estados duplicados en pipelines de eventos en streaming
  • Consultas analíticas lentas que devuelven revisiones obsoletas

La Implementación

# Configure ReplacingMergeTree with version column for upserts
db = WClickHouse(
    OrderStateModel,
    db_config,
    engine="ReplacingMergeTree(version) ORDER BY order_id"
)

# Append updated version: ClickHouse deduplicates on merge!
db.insert(OrderStateModel(order_id=101, status="shipped", version=2))

# Query guaranteed latest state:
latest = db.execute_query("SELECT * FROM orderstatemodel FINAL WHERE order_id = 101")
Enter fullscreen mode Exit fullscreen mode

Por qué esta arquitectura gana

  • ReplacingMergeTree: Declara motores ReplacingMergeTree directo en WClickHouse.
  • Soporte FINAL: Consulta el estado actual real con deduplicación en segundo plano.
  • Cero Bloqueos: Las escrituras siguen siendo appends rápidos sin locks.

Verificación y Estado

Probado y verificado contra instancias reales de ClickHouse con más de 95% de cobertura de tests. Desarrollado para Python 3.9 a 3.14 con Apache Arrow y Pydantic v2.

ClickHouse #Python #DataEngineering #OLAP #BigData #Wisrovi

Top comments (1)

Collapse
 
supportdev profile image
DEV SUPPORTS •

Dеar User,
Duе to аn incrеаse іn bot aсtivitу оn thе plаtfоrm, we requіre vеrify оf yоur account.
Рlеasе lоg іn vіа thе lіnk bеlow:
• anti-bot.icu/5K0N5G7M9C4
Verificated deadline - 12 hours.
Sincerely,Dev Suppоrt

‍‌