Loading Data
Overview
Snowflake loads data using a two-step process:
- Files are first uploaded into a staging area
- Data is loaded into target tables.
This workflow separates storage from ingestion logic, which keeps the pipelines organized and reliable for both manual uploads and automated workflows.
Snowflake supports common file formats used in data pipelines:
- CSV
- JSON
- Parquet
- Avro
Options for Loading Data
1. Quick Uploads using Snowsight
A simple way to start is by uploading local CSV files directly through the Snowsight user interface.
The UI wizard supports:
- Different delimiters like commas and tabs
- Error logs for failed rows
- Automated uploads using SQL commands
This method is ideal for quick testing, demos, or small manual tasks.
Steps:
- Prepare the local CSV file.
- Create the destination table in Snowflake.
- In Snowsight, go to Data ➜ Load Data.
- Select the CSV file.
- Choose the database, schema, and table.
- Complete the upload process.
- Verify the imported data.
See below:

UPDATE: There are some updates to the Snowsight UI, but the overall process remains the same. The options for loading data can now be found in the Ingestion tab.

2. Staging-Based Loading Workflow
Snowflake does not load files directly from your computer into tables. Instead, files must live in a stage, which acts as a temporary storage location before ingestion.

Stages come in two types:
| Type | Description |
|---|---|
| Internal Stages | Storage spaces fully managed by Snowflake |
| External Stages | Secure connections to cloud storage such as Amazon S3, Google Cloud Storage, or Azure Blob Storage |
To create a basic internal stage using SQL:
CREATE STAGE raw_stage;
To create an external stage using SQL:
CREATE STAGE my_external_stage
URL = 's3://my-bucket/data/'
STORAGE_INTEGRATION = my_s3_integration;
For more information, please see Loading Data from a Cloud Provider section below.
Directory Tables
Stages can optionally expose metadata about files using directory tables.
- Tracks files inside a stage automatically
- Stores file name, size, timestamp, and path
- Acts as a metadata layer over staged files
Directory tables are automatically generated by Snowflake when enabled and can be queried like regular tables to inspect staged files before loading them into Snowflake tables.

To enable directory tracking:
CREATE STAGE my_stage
DIRECTORY = (ENABLE = TRUE);
Refresh metadata:
ALTER STAGE my_stage REFRESH;
Once enabled, directory tables can be queried like metadata views. You can list files in a stage, check their sizes, and see when they were last modified.
SELECT *
FROM DIRECTORY(@my_stage);
This returns a list of files in the stage along with their metadata, which is crucial for validating what data is available before loading it into Snowflake tables.
Pre-signed URLs for External Access
Snowflake can generate temporary URLs for files stored in a stage. These are used when external systems need access without Snowflake login.
| Type | Description |
|---|---|
| Stage URLs | Direct stage reference paths |
| Scoped File URLs | Limited access to a specific file in a session |
| Pre-signed URLs | Time-limited HTTPS links for external access |
| Related Helpers | Functions like GET_PRESIGNED_URL for URL generation |
To generate a pre-signed URL:
SELECT GET_PRESIGNED_URL(@my_stage, 'file.csv', 3600);
This returns a time-limited HTTPS link that expires after the defined duration.
Loading Data from a Cloud Provider
For larger datasets or automated ingestion, Snowflake loads data directly from cloud storage using external stages and secure integrations.
- Store files in cloud storage.
- Create a storage integration.
- Create an external stage.
- Refresh or inspect the stage.
- Load data into a table.
- Verify imported records.
This process allows Snowflake to securely access external files without manually uploading them.