Environment: Azure Container Apps Job (D32-benchmark, 16 vCPU / 32 GiB), westus3
ClickHouse Cloud Production Scale (2 replicas × 4 CPU × ~8 GiB)
Connection: HTTPS, Compression=true, set_async_insert=1, set_wait_for_async_insert=0
PBP sink: clickhouse (direct bulk-copy to play_by_play table)
Job execution: oc-exp-1k-p32-9m3t8xw
Schema: play_by_play PARTITION BY season_id (was game_id; changed due to
  max_partitions_per_insert_block=100 locked by Cloud)

Backend: clickhouse, Scale: 1000 worlds, Environment: local
Streaming mode: totalWorlds=1000, chunkSize=100 [parallel=32]
PBP sink: clickhouse at ./pbp-parquet

Streaming Run Report
--------------------
Total wall time:          303.98 s
Simulation time:           22.91 s
OC write time:             20.73 s
PBP write time:           239.47 s
Merge time:                14.76 s
Peak working set:        17489.9 MB
Chunks completed:             10
OC rows (merged):        244,799
PBP rows (written):   41,993,241

Notes:
- First validation run of the PBP→ClickHouse direct path after the
  ParquetPlayByPlayBatchWriter on ephemeral container disk proved
  pathologically slow (10K stalled at >1h 40m and had to be cancelled).
- PBP throughput: 41.99M rows in 239.47s = 175K rows/sec. Serial PBP
  writes via bulk-copy per chunk; parallelism added later.
