The best approach I have found is to land the CSV data directly into a a temporary or transient table. This would be a different table than the final table you want to land the data in. Doing this allows you do any data cleanup and validation as you move it from the landing/raw table into the final/staged table.
If you follow this approach you can accomplish it a couple different ways. You could have an orchestration that moves the files from SFTP to an S3 or Blob Storage location. Then use an S3 Load or Blob Load component to load the data into a transient or temp table.
Then you would do the transformation and moving of the data from the raw table to the final/staged using a transformation. Something like this: