Issue
When viewing the sync history in the Segment Console, customers report that a Reverse ETL sync shows a "No records extracted" message with 0 records extracted during its very first run. This typically occurs when the user has set the mapping sync mode to target "Updated records"
Product
Segment
Environment
Segment Console
Cause
This is expected behavior and not a system failure. When a Reverse ETL mapping is set to only sync "Updated records," Segment requires a baseline to determine what data has changed. During the very first sync, Segment takes a snapshot of your warehouse query results and calculates a checksum for each row to establish this baseline.
Because there is no prior data to compare against during this initial run, the system evaluates all rows as newly "Added" rather than "Updated". As a result, zero records meet the "Updated" criteria, and no records are extracted to the destination.
Resolution
Because the system is functioning as designed, no troubleshooting steps are required to fix the error. However, you can manage how the data syncs by following these steps:
- Allow the initial baseline sync to complete so Segment can record the current state of your warehouse data.
- Proceed with your normal sync schedule. On all subsequent syncs, Segment will compare the fresh data against the baseline snapshot and successfully extract any records that have changed.
- If your actual goal is to send all existing warehouse records to your destination during the very first run, navigate to your mapping settings and change the sync mode from "Updated records" to "Added or Updated records".
Additional Information
Segment maintains the baseline snapshots and record states in a dedicated system schema named __segment_reverse_etl within your data warehouse. Please note that making structural changes to your warehouse tables (like adding, renaming, or removing columns) will alter the checksum calculations. This will cause the system to view all records as "modified," which will trigger a full re-sync of all records on the next run, even if the core data values have not changed.