Unique to Snowflake is the concept of stage, it is the last place before data is loaded to a target table.
- User Stage, @~ (internal) every user has his own and you can load your file into there using a PUT command from your desktop, i.e. on prem to cloud. This location also happens to be the place where your worksheets are stored!
- Table stage, @% (internal) every table has one, you can PUT files there ready for loading to tables
- Named stage, @ (internal or external), when external the files are landed in S3 buckets in whatever method you used, maybe PUT. When internal they are loaded into Snowflake's own S3 bucket, using PUT. The difference? You manage the content completely externally if the file is there before loading, that includes encryption and compression. Snowflake does all that management if it is internally.
All content hosted as files externally or internally must be copied into a Snowflake table (COPY command) to take advantage of Snowflake's proprietary micropartitions storage mechanism and things like zero copy cloning. Alternatively you could still keep the files in an S3 bucket as an external stage but register the file as an external table to Snowflake and be able to run SQL on it. These are csv, parquet, avro, orc and json. Of course you don't get the benefits as listed above.
Basically, everything is a file before loading to Snowflake tables (which by the way, with improved compression algorithms achieves better compression too)
For your reading: https://docs.snowflake.com/en/user-guide/data-load-overview.html