# CSV snapshots or increments? Check before you add.

CSV data checks · Mock sports-statistics example

Inspect repeated CSV exports with a mock sports-statistics example. Distinguish cumulative snapshots from increments, preserve reporting time and verify the source contract.

Updated Nov 4, 2026 · [RowCove](https://rowcove.com/)

**Can I add the values in successive CSV exports?** Only when their source contract defines them as increments. Under this mock cumulative-snapshot contract, 100 followed by 120 means the latest snapshot is 120. Values alone do not establish the intended rule.

**On this page** [Watch the example](https://rowcove.com/guides/csv-snapshots#watch) [Two files, one series](https://rowcove.com/guides/csv-snapshots#two-files-one-series) [Reproduce the check](https://rowcove.com/guides/csv-snapshots#reproduce-the-check) [Inspect the source before combining it](https://rowcove.com/guides/csv-snapshots#inspect-the-source-before-combining-it) [Keep the original export](https://rowcove.com/guides/csv-snapshots#keep-the-original-export) [Questions before a larger job](https://rowcove.com/guides/csv-snapshots#questions-before-a-larger-job) [All practical guides ↗](https://rowcove.com/guides)

## Watch the mock sports-data example

Use the video download below if playback is unavailable. Synthetic figures · English synthetic narration · RowCove team (commercial tool)

[Open or download the video](https://rowcove.com/media/csv-snapshots.mp4) · [English captions](https://rowcove.com/media/csv-snapshots.vtt) · [Download the two-row mock CSV](https://rowcove.com/media/csv-snapshots-mock.csv)

A new sports season brings new statistics exports. A fresh CSV can be an updated
snapshot of the same game, rather than another batch of scoring events. The
same distinction appears in account totals, inventory exports, progress reports
and cumulative counters.

This walkthrough uses two generated mock records. They are not real sports
results. Their small size makes the data rule visible; it provides no benchmark
of large-file speed, memory use or the quality of any prediction.

## Two files, one series

Generated mock records only

| Mock series | Snapshot | Reporting time (UTC) | cumulative_points |
| --- | --- | --- | --- |
| mock-game-01 | mock-snapshot-001 | 00:00 | 100 |
| mock-game-01 | mock-snapshot-002 | 00:05 | 120 |

Under the stated **cumulative snapshot** contract, the later snapshot says 120.
Adding the two values gives 220 and answers a different question. If the rows
were explicitly defined as **increments**, summing 100 and 120 could be the
intended operation. The values alone do not establish which contract applies.
A field name is a clue; verify the producer's definition and source version.

## Reproduce the check

The example keeps a stable series ID, a snapshot ID and an explicit offset in
the reporting timestamp. It chooses the latest report using the parsed time,
not filename order or a file's modification time.



```
from datetime import datetime

rows = [
    {"series_id": "mock-game-01", "snapshot_id": "mock-snapshot-001",
     "reported_at": "2026-01-01T00:00:00+00:00", "cumulative_points": 100},
    {"series_id": "mock-game-01", "snapshot_id": "mock-snapshot-002",
     "reported_at": "2026-01-01T00:05:00+00:00", "cumulative_points": 120},
]
latest = max(rows, key=lambda row: datetime.fromisoformat(row["reported_at"]))
assert latest["cumulative_points"] == 120
assert sum(row["cumulative_points"] for row in rows) == 220
assert latest["cumulative_points"] - rows[0]["cumulative_points"] == 20
assert max(reversed(rows), key=lambda row: datetime.fromisoformat(
    row["reported_at"]))["snapshot_id"] == latest["snapshot_id"]

```



The 20-point difference is the change between these two mock snapshots. It is
not another total to add to the later snapshot. A downward correction can also
be valid: if a revised later snapshot says 98, choose it under this example's
latest-report rule rather than retaining 100 just because it is larger.

## Inspect the source before combining it

Open the relevant local export and inspect the complete series ID, reporting
time and value. Filter the intended series and review repeated IDs across
versions. Establish whether the timestamp represents observation time,
publication time or another clock. See the
[UTC-offset walkthrough](https://rowcove.com/guides/csv-daylight-saving) when clock text is ambiguous.

Keep source-file and source-row provenance with the finding. A preview of the
first records does not prove that all versions or corrections have been read.
For a large investigation, include the complete requested scan, query
preparation, temporary disk and saved output in the work budget.

The Python example above holds the tiny input in memory. Applying its rule to a
large multi-series corpus requires a complete scope, a suitable index or an
external aggregation step. RowCove's bounded collection browsing does not
promise a global latest-per-series aggregate across every shard.

## Keep the original export

RowCove can help with local CSV inspection, supported source filtering and
sorting, complete values and source context. When supported corrections are
needed, stage them and save a separate copy, then reopen the output to check it.
The source definition still determines whether an update replaces or adds to a
value. The independent Python calculation is not a claim of automatic snapshot
reconciliation in the desktop app.

Free Preview displays up to 100 read-only records without an account. Pro adds
supported full-file query and editing workflows; available operations depend
on the reader. Use the [CSV workflow](https://rowcove.com/guides/large-csv-files) ,
[format matrix](https://rowcove.com/formats) and [plans](https://rowcove.com/pricing) to check fit.

## Questions before a larger job

**Can I deduplicate by value alone?** Equal values can occur in different valid
snapshots. Establish the record and version identity first.

**Can I use file order as reporting order?** Only with a source contract that
guarantees it. This example deliberately compares parsed reporting timestamps.

**Does a lower later number prove corruption?** No. Corrections and changing
scope can alter cumulative reports; investigate the producer's version semantics.

**Does a fast first page validate every export?** No. Keep the inspected scope
separate from any full-source conclusion.

Created by the RowCove team, developers of a commercial local data workspace.
AI-assisted text and synthetic narration; all records and illustrations are
generated mock data. No private data, real team statistics, trading strategy
or performance measurement is included.

## Try the first page on your own data.

Start on Windows or macOS: source information and up to 100 records, read-only. Review reader capabilities before planning a full-file Pro workflow.

[Download for Windows ↓](https://rowcove.com/download/windows) [Download for macOS ↓](https://rowcove.com/download/macos)

Version 0.1.1 · Windows x64 · macOS Apple Silicon · [Install guide →](https://rowcove.com/download)

[Reader capabilities →](https://rowcove.com/formats)

---

Canonical page: https://rowcove.com/guides/csv-snapshots

Updated: 2026-11-04

[Related Agent reference](https://rowcove.com/agent/workflows.md)
