Bird
Raised Fist0
Snowflakecloud~10 mins

Stages (internal and external) in Snowflake - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Process Flow - Stages (internal and external)
Start: Define Stage
Choose Stage Type
Internal
Upload files
Use COPY INTO
Data loaded
End
This flow shows how you define a stage, choose internal or external, upload or connect storage, then load data using COPY INTO.
Execution Sample
Snowflake
CREATE OR REPLACE STAGE my_int_stage;
PUT file://data.csv @my_int_stage;
COPY INTO my_table FROM @my_int_stage;

CREATE OR REPLACE STAGE my_ext_stage URL='s3://mybucket/data/';
COPY INTO my_table FROM @my_ext_stage;
Defines internal and external stages, uploads data to internal stage, then loads data into a table from both stages.
Process Table
StepActionStage TypeCommandResult
1Create internal stageInternalCREATE OR REPLACE STAGE my_int_stage;Stage my_int_stage created
2Upload file to internal stageInternalPUT file://data.csv @my_int_stage;File data.csv uploaded to my_int_stage
3Load data from internal stageInternalCOPY INTO my_table FROM @my_int_stage;Data loaded into my_table
4Create external stageExternalCREATE OR REPLACE STAGE my_ext_stage URL='s3://mybucket/data/';Stage my_ext_stage created with S3 URL
5Load data from external stageExternalCOPY INTO my_table FROM @my_ext_stage;Data loaded into my_table from S3
💡 All steps completed successfully; data loaded from both internal and external stages.
Status Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4After Step 5
my_int_stageundefinedcreatedfile data.csv presentdata loaded into my_tablecreateddata loaded into my_table
my_ext_stageundefinedundefinedundefinedundefinedcreated with S3 URLdata loaded into my_table
Key Moments - 3 Insights
Why do we need to create a stage before uploading or loading data?
A stage acts like a storage location pointer. Without creating it first (see Step 1 and Step 4), Snowflake doesn't know where to find or put files.
What is the difference between internal and external stages?
Internal stages store files inside Snowflake (Step 2), while external stages point to external cloud storage like S3 (Step 4). Both can be used with COPY INTO to load data.
Why do we use COPY INTO after uploading files?
Uploading files to a stage only stores them. COPY INTO actually loads the data into a table (Step 3 and Step 5).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the result of Step 2?
AFile data.csv uploaded to my_int_stage
BData loaded into my_table
CStage my_int_stage created
DStage my_ext_stage created with S3 URL
💡 Hint
Check the 'Result' column for Step 2 in the execution_table.
At which step is the external stage created?
AStep 1
BStep 4
CStep 2
DStep 5
💡 Hint
Look at the 'Action' and 'Stage Type' columns in the execution_table.
If we skip uploading files to the internal stage, what happens at Step 3?
AStage is created automatically
BData loads successfully
CCOPY INTO fails because no files are found
DExternal stage is used instead
💡 Hint
Refer to Step 2 and Step 3 in the execution_table and variable_tracker for file presence.
Concept Snapshot
Stages in Snowflake are storage locations for data files.
Internal stages store files inside Snowflake.
External stages point to cloud storage like S3.
Use PUT to upload files to internal stages.
Use COPY INTO to load data from stages into tables.
Full Transcript
This visual execution shows how to use stages in Snowflake. First, you create a stage, which is a storage location. You can choose an internal stage, which stores files inside Snowflake, or an external stage, which points to cloud storage like Amazon S3. For internal stages, you upload files using the PUT command. Then, you load data into a table using COPY INTO from the stage. For external stages, you create the stage with the cloud storage URL and then load data directly using COPY INTO. The execution table traces each step, showing commands and results. Variables track the state of stages and files. Key moments clarify why stages are needed, the difference between internal and external, and the role of COPY INTO. The quiz tests understanding of these steps and outcomes.

Practice

(1/5)
1. What is the main difference between an internal stage and an external stage in Snowflake?
easy
A. Internal stages store files inside Snowflake, external stages link to cloud storage.
B. Internal stages are only for unloading data, external stages are only for loading data.
C. Internal stages require a file format, external stages do not.
D. Internal stages are free, external stages always cost extra.

Solution

  1. Step 1: Understand internal stage storage

    Internal stages keep files physically inside Snowflake's managed storage.
  2. Step 2: Understand external stage storage

    External stages point to external cloud storage like AWS S3 or Azure Blob.
  3. Final Answer:

    Internal stages store files inside Snowflake, external stages link to cloud storage. -> Option A
  4. Quick Check:

    Internal vs external storage location = A [OK]
Hint: Remember: internal = inside Snowflake, external = outside Snowflake [OK]
Common Mistakes:
  • Thinking internal stages can link to external cloud storage
  • Confusing loading and unloading roles of stages
  • Assuming file format is only needed for internal stages
2. Which of the following is the correct syntax to create an internal stage named mystage in Snowflake?
easy
A. CREATE STAGE mystage URL='s3://mybucket/data/';
B. CREATE STAGE mystage FILE_FORMAT = (TYPE = 'CSV');
C. CREATE EXTERNAL STAGE mystage FILE_FORMAT = (TYPE = 'CSV');
D. CREATE STAGE mystage STORAGE_INTEGRATION = my_integration;

Solution

  1. Step 1: Identify internal stage syntax

    Internal stages do not require URL or STORAGE_INTEGRATION parameters.
  2. Step 2: Check file format usage

    Specifying FILE_FORMAT is valid and common for internal stages.
  3. Final Answer:

    CREATE STAGE mystage FILE_FORMAT = (TYPE = 'CSV'); -> Option B
  4. Quick Check:

    Internal stage creation syntax = B [OK]
Hint: Internal stage needs FILE_FORMAT, no URL or integration [OK]
Common Mistakes:
  • Using URL parameter for internal stages
  • Confusing external stage syntax with internal
  • Omitting FILE_FORMAT when needed
3. Given this Snowflake SQL snippet:
CREATE OR REPLACE STAGE ext_stage
URL='s3://mybucket/data/'
STORAGE_INTEGRATION = my_int
FILE_FORMAT = (TYPE = 'JSON');

LIST @ext_stage;

What will the LIST @ext_stage; command do?
medium
A. List files stored inside Snowflake internal stage named ext_stage.
B. Return an error because FILE_FORMAT is not allowed in stage creation.
C. Show the contents of the JSON files in the stage.
D. List files in the external S3 bucket linked by ext_stage.

Solution

  1. Step 1: Identify stage type from syntax

    URL and STORAGE_INTEGRATION indicate an external stage linked to S3.
  2. Step 2: Understand LIST command behavior

    LIST @stage lists files in the stage's storage location, here the S3 bucket.
  3. Final Answer:

    List files in the external S3 bucket linked by ext_stage. -> Option D
  4. Quick Check:

    LIST on external stage lists external files = C [OK]
Hint: LIST @stage shows files where stage points, internal or external [OK]
Common Mistakes:
  • Thinking LIST shows file contents, not file names
  • Assuming FILE_FORMAT is invalid in stage creation
  • Confusing internal and external stage storage
4. You try to create an external stage with this command:
CREATE STAGE mystage
URL='s3://mybucket/data/';

But get an error. What is the most likely cause?
medium
A. Missing STORAGE_INTEGRATION for external stage access.
B. FILE_FORMAT is required for external stages.
C. Internal stages cannot use URL parameter.
D. Stage name mystage is reserved.

Solution

  1. Step 1: Check external stage requirements

    External stages need STORAGE_INTEGRATION to access cloud storage securely.
  2. Step 2: Identify missing parameter

    The command lacks STORAGE_INTEGRATION, causing access error.
  3. Final Answer:

    Missing STORAGE_INTEGRATION for external stage access. -> Option A
  4. Quick Check:

    External stage needs integration = D [OK]
Hint: External stage always needs STORAGE_INTEGRATION for cloud access [OK]
Common Mistakes:
  • Assuming FILE_FORMAT is mandatory for external stage creation
  • Confusing internal stage syntax with external
  • Thinking stage name causes error
5. You want to unload query results to a stage and then copy them to an external S3 bucket. Which setup is best practice?
hard
A. Unload to local machine, then upload manually to S3 external stage.
B. Unload directly to an external stage linked to S3, then copy from there.
C. Unload to an internal stage, then use Snowflake commands to copy to external stage.
D. Unload to internal stage and keep data only there without copying.

Solution

  1. Step 1: Understand unloading to stages

    Unloading query results to internal stage is fast and secure inside Snowflake.
  2. Step 2: Copying to external storage

    Use Snowflake COPY INTO command to move data from internal to external stage.
  3. Step 3: Evaluate other options

    Direct unload to external stage is possible but less controlled; manual upload is inefficient.
  4. Final Answer:

    Unload to an internal stage, then use Snowflake commands to copy to external stage. -> Option C
  5. Quick Check:

    Unload internal then copy external = A [OK]
Hint: Unload inside Snowflake first, then copy out [OK]
Common Mistakes:
  • Unloading directly to external stage without integration setup
  • Manual upload instead of automated copy
  • Not copying data out after unloading