Skip to main content

Documentation Index

Fetch the complete documentation index at: https://www.integrate.io/docs/llms.txt

Use this file to discover all available pages before exploring further.

Overview

History Mode implements Slowly Changing Dimension Type 2 (SCD Type 2) tracking for your data pipelines. When enabled, Integrate.io maintains a complete history of all changes to your records, allowing you to see not just the current state of your data, but every version that has ever existed. This feature is ideal for:
  • Audit compliance - Track every change made to sensitive data
  • Historical analysis - Analyze how data has changed over time
  • Point-in-time queries - Reconstruct the state of your data at any moment in history
  • Data lineage - Understand the evolution of your records

How It Works

When History Mode is enabled for a table, Integrate.io automatically adds three tracking columns to your destination:
ColumnTypeDescription
_iio_activeBOOLEANTRUE for the current version, FALSE for historical versions
_iio_startTIMESTAMPWhen this version became active
_iio_endTIMESTAMPWhen this version became inactive (9999-12-31 for active records)

How _iio_start Is Populated

The _iio_start timestamp indicates when a record version became active. The value depends on the sync mode:

CDC Sync (Continuous Changes)

For CDC operations, _iio_start uses the actual transaction timestamp from the source database:
SourceTimestamp Source
MySQLBinlog event timestamp
SQL ServerCDC transaction time
This means _iio_start reflects when the change actually happened in your source database, not when Integrate.io processed it.

Initial Sync

During the initial full-table sync, there is no CDC event. In this case, _iio_start is set to the import timestamp - when the sync batch started. All records in the same batch share the same _iio_start value.

Record Lifecycle

INSERT - New record added

When a new record is inserted in the source:
  • A new row is created with _iio_active = true
  • _iio_start is set to the transaction timestamp
  • _iio_end is set to 9999-12-31 23:59:59

UPDATE - Existing record modified

When a record is updated in the source:
  • The current active row is marked inactive: _iio_active = false, _iio_end = transaction_timestamp
  • A new row is inserted with the updated values and _iio_active = true

DELETE - Record removed

When a record is deleted in the source:
  • The current active row is marked inactive: _iio_active = false, _iio_end = transaction_timestamp
  • No new row is inserted (soft delete - history preserved)

Supported Sources & Destinations

Note: History Mode is only available for specific source and destination combinations that support CDC (Change Data Capture).

Supported Sources

SourceSupportedNotes
MySQL✅ YesRequires binary logging enabled
SQL Server✅ YesRequires CDC enabled on database and tables
Other Sources❌ NoNot supported at this time

Supported Destinations

DestinationSupported
Amazon Redshift✅ Yes
Snowflake✅ Yes
Other Destinations❌ No

Configuration

Enabling History Mode

1
Navigate to your pipeline’s Schema Settings page
2
Find the History Mode toggle in the table header or individual table rows
3
Enable History Mode for the desired tables
Important: History Mode can only be enabled for tables that are not yet selected for sync. Once a table has started syncing, History Mode cannot be enabled.

Restrictions

  • History Mode must be enabled before the initial sync
  • Cannot be enabled for tables that have already started syncing
  • Requires a primary key on the source table

Example Scenario

After Initial Sync

Destination table with History Mode columns:
idusernameemailstatus_iio_active_iio_start_iio_end
1alicealice@example.comactivetrue2024-01-01 10:00:009999-12-31 23:59:59
2bobbob@example.comactivetrue2024-01-01 10:00:009999-12-31 23:59:59
3charliecharlie@example.cominactivetrue2024-01-01 10:00:009999-12-31 23:59:59

After UPDATE (id=1 status changed)

UPDATE users SET status = 'inactive' WHERE id = 1;
idusernameemailstatus_iio_active_iio_start_iio_end
1alicealice@example.comactivefalse2024-01-01 10:00:002024-01-15 14:30:00
1alicealice@example.cominactivetrue2024-01-15 14:30:009999-12-31 23:59:59
2bobbob@example.comactivetrue2024-01-01 10:00:009999-12-31 23:59:59
3charliecharlie@example.cominactivetrue2024-01-01 10:00:009999-12-31 23:59:59

After DELETE (id=2 removed)

DELETE FROM users WHERE id = 2;
idusernameemailstatus_iio_active_iio_start_iio_end
1alicealice@example.comactivefalse2024-01-01 10:00:002024-01-15 14:30:00
1alicealice@example.cominactivetrue2024-01-15 14:30:009999-12-31 23:59:59
2bobbob@example.comactivefalse2024-01-01 10:00:002024-02-01 09:00:00
3charliecharlie@example.cominactivetrue2024-01-01 10:00:009999-12-31 23:59:59
Note: After deletion, id=2 still exists with _iio_active = false for historical queries.
Last modified on May 12, 2026