Incremental loading is a data ingestion strategy in which each run processes changes rather than the complete source dataset. A pipeline commonly starts with a full load to establish a baseline, then runs scheduled batches containing newly inserted records, updated records, or deletion events. It is not inherently a streaming technique: an hourly database extraction or a nightly batch of newly arrived files is also incremental loading.
The first design decision is how to identify changes. An append-only table might use an increasing identifier, while a mutable table might expose a reliable last-modified timestamp. A pipeline can store a high-water mark representing its last successfully processed boundary and use that value in the next extraction predicate. For example, an orders pipeline could read records with modification times after the previous boundary and up to a fixed upper boundary captured for the current batch. An index on the filtering column can reduce source scanning, although actual performance depends on the query plan.
A timestamp alone does not guarantee completeness. Multiple records can share the same timestamp, source clocks can differ, and transactions can become visible after an extraction has passed their timestamp. Depending on source behavior, use a compound cursor, a safety delay, an overlapping extraction window with deduplication, or transaction-log-based change data capture. A simple increasing identifier detects new rows but does not identify updates to older rows or hard deletes. Deletions require an explicit mechanism, such as tombstones, soft-delete flags, change logs, or periodic reconciliation.
For file-based cloud ingestion, incrementality usually means selecting newly arrived or modified objects rather than rereading every object. Organizing files by ingestion date and recording processed object identities can make selection efficient. However, a new file can contain old business events, and a modified object can contain records already loaded. File-level progress tracking therefore does not replace record-level deduplication or handling of late-arriving data.
In AWS Glue batch jobs, job bookmarks can track supported source processing state across runs. For supported Amazon S3 sources, bookmarks use object last-modified information; for supported JDBC sources, they use bookmark keys subject to ordering requirements. Enable bookmarks, retain consistent transformation contexts for tracked sources, and commit the job after successful processing. Bookmark pause supports processing without advancing saved state, while reset or rewind supports reprocessing. Bookmarks track source progress, not target contents, so reprocessing does not automatically remove previously written output.
Target write behavior must match the source changes. Appending can be sufficient for immutable events, provided retries cannot create logical duplicates. Mutable entities usually require an upsert or merge using a stable business key, with change ordering to prevent older updates from replacing newer values. Advance the checkpoint only after successful target writes. If writing succeeds but checkpoint persistence fails, a retry may replay the batch, so use idempotent writes, staging tables, or transactional coordination rather than assuming exactly-once delivery.
Batch configuration should balance freshness, throughput, and operational overhead. Choose schedules, extraction windows, file sizes, parallelism, retry policies, and source query limits according to source capacity and recovery requirements. Smaller batches improve freshness but increase scheduling and transaction overhead. Monitor checkpoint age, row counts, duplicate rates, rejected records, and source-to-target reconciliation results. Incremental loading generally lowers routine processing cost, but it adds state-management complexity and still requires a deliberate strategy for backfills, schema changes, and recovery.