<@U04S8PLJWMT> I enabled a stream using an id as c...
# replication-ask-ai
s
@kapa.ai I enabled a stream using an id as cursor for 'incremental append + deduped'. Running the sync ingested no records, and when I check the connection state I see:
Copy code
{
    "streamDescriptor": {
      "name": "User",
      "namespace": "log"
    },
    "streamState": {
      "version": 2,
      "state_type": "ordered_column",
      "ordered_col": "UserId",
      "ordered_col_val": "380271",
      "incremental_state": {}
    }
  },
which is different from all the other ones with a cursor using a datetime field, e.g.:
Copy code
{
    "streamDescriptor": {
      "name": "Synchronization",
      "namespace": "log"
    },
    "streamState": {
      "cursor": "2026-08-29T16:27:40.673559Z",
      "version": 2,
      "state_type": "cursor_based",
      "stream_name": "Synchronization",
      "cursor_field": [
        "LastUpdated"
      ],
      "stream_namespace": "log",
      "cursor_record_count": 1
    }
  },
k
Thinking completed The difference in state format occurs because Airbyte database connectors handle ordered/primary key column syncing differently from standard datetime cursor syncing: 1. ordered_column vs. cursor_based State Types •
cursor_based
: Used for standard incremental syncs (typically timestamp/datetime columns like
LastUpdated
). It tracks the high-water mark in the
cursor
field and continues querying records where the cursor field is greater than that value [MsSqlServerStateMigrationTest.kt; internal_models.yaml]. •
ordered_column
: Used by relational database sources (such as MSSQL) when an ordered column or primary key (like
UserId
) is used for an initial load or ordered sync. In this mode: ◦
ordered_col
tracks the column being ordered on (
UserId
) [internal_models.yaml]. ◦
ordered_col_val
stores the current high watermark value (
"380271"
) [internal_models.yaml]. ◦
incremental_state
is a placeholder object intended to hold the incremental state to transition to after an initial ordered load finishes [internal_models.yaml; MsSqlServerStateMigration.kt]. 2. Why No Records Were Ingested • No New Records Since Last Sync: In incremental syncs, connectors query for delta records where the cursor/ordered column is greater than the recorded checkpoint value (e.g.,
WHERE UserId > 380271
) [Incremental Sync - Append + Deduped]. If the highest
UserId
currently in your source table is already
380271
(or if no new records have been inserted with an ID greater than that value), the query matches 0 rows, and no records are emitted [incremental-data-synchronization]. • Modifications vs. Appends: Because
UserId
is typically an auto-incrementing identifier rather than an
updated_at
timestamp, any updates or modifications made to existing records with IDs less than or equal to
380271
will not be detected or ingested in incremental mode [Incremental Sync - Append + Deduped]. Only rows with a strictly higher
UserId
will be extracted. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.