For low volume cases, we can operate with zero mapping of fields. In those cases, we run every transfer as a full refresh.
If the volumes are higher, then we'll typically ask the source to expose a primary key and last_updated_at timestamp field. In those cases, we run incremental transfers. We use the last_updated_at to figure out what data to transfer, and the primary key to merge it into the destination table without creating dupes.