Идемпотентность ETL-job: что это, почему критично, как реализовать? Расскажи про UPSERT, watermark, dedup и retry-логику.