Bird
Raised Fist0
Snowflakecloud~5 mins

COPY INTO command in Snowflake - Commands & Configuration

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
Introduction
When you have data files stored outside Snowflake, you need a way to load that data into your tables. The COPY INTO command helps you quickly and safely move data from files into Snowflake tables.
When you want to load CSV files from cloud storage into a Snowflake table.
When you receive daily data exports and need to import them automatically.
When you want to bulk load JSON data into a Snowflake table for analysis.
When you need to reload data after fixing errors in the source files.
When you want to load data from an external stage like Amazon S3 or Azure Blob Storage.
Commands
This command creates a table named my_table with three columns to hold the data you will load.
Terminal
CREATE OR REPLACE TABLE my_table (id INT, name STRING, age INT);
Expected OutputExpected
Table MY_TABLE successfully created.
This command creates a named external stage pointing to an S3 bucket where your data files are stored. Snowflake uses this stage to access the files.
Terminal
CREATE OR REPLACE STAGE my_stage URL='s3://my-bucket/data/' CREDENTIALS=(AWS_KEY_ID='AKIAEXAMPLE' AWS_SECRET_KEY='abc123secret');
Expected OutputExpected
Stage MY_STAGE successfully created.
This command loads data from the CSV file in the stage into the my_table table. It uses a file format that matches the CSV structure.
Terminal
COPY INTO my_table FROM @my_stage/file.csv FILE_FORMAT = (TYPE = 'CSV' FIELD_DELIMITER = ',' SKIP_HEADER = 1);
Expected OutputExpected
COPY INTO my_table executed successfully. Loaded 100 rows.
FILE_FORMAT - Defines how the input file is structured so Snowflake can parse it correctly.
SKIP_HEADER - Skips the first line if it contains column names instead of data.
This command checks the data loaded into the table to confirm the COPY INTO command worked as expected.
Terminal
SELECT * FROM my_table;
Expected OutputExpected
ID | NAME | AGE 1 | Alice | 30 2 | Bob | 25 3 | Carol | 27
Key Concept

If you remember nothing else from this pattern, remember: COPY INTO moves data from files into Snowflake tables using a defined file format and stage.

Common Mistakes
Not creating or specifying the correct stage before running COPY INTO.
Snowflake cannot find the data files without a proper stage, so the command fails.
Always create and reference a valid stage that points to your data location before loading.
Using the wrong file format settings, like incorrect delimiter or skipping header lines.
Data will be parsed incorrectly, causing load errors or wrong data in the table.
Match the FILE_FORMAT options exactly to your file's structure, including delimiter and header rows.
Running COPY INTO without checking the table schema matches the data columns.
Data type mismatches cause load failures or incorrect data storage.
Ensure your table columns and data file columns align in order and type before loading.
Summary
Create a table to hold the data you want to load.
Create a stage that points to your external data files.
Use COPY INTO with the correct file format to load data from the stage into the table.
Verify the data loaded correctly by querying the table.

Practice

(1/5)
1. What is the main purpose of the COPY INTO command in Snowflake?
easy
A. To load data files from cloud storage into Snowflake tables
B. To export data from Snowflake tables to local files
C. To create new tables in Snowflake
D. To delete data from Snowflake tables

Solution

  1. Step 1: Understand the command purpose

    The COPY INTO command is designed to load data from external files into Snowflake tables.
  2. Step 2: Compare options

    Options B, C, and D describe exporting, creating, or deleting data, which are not the function of COPY INTO.
  3. Final Answer:

    To load data files from cloud storage into Snowflake tables -> Option A
  4. Quick Check:

    Loading data = COPY INTO [OK]
Hint: COPY INTO means loading data into tables [OK]
Common Mistakes:
  • Confusing COPY INTO with export commands
  • Thinking COPY INTO creates tables
  • Assuming COPY INTO deletes data
2. Which of the following is the correct basic syntax to load data using COPY INTO in Snowflake?
easy
A. COPY table_name INTO @stage_name FILE_FORMAT = (TYPE = 'CSV');
B. LOAD DATA INTO table_name FROM @stage_name FORMAT = CSV;
C. COPY INTO table_name FROM @stage_name FILE_FORMAT = (TYPE = 'CSV');
D. INSERT INTO table_name COPY FROM @stage_name FILE_FORMAT = CSV;

Solution

  1. Step 1: Recall correct COPY INTO syntax

    The correct syntax is COPY INTO table_name FROM @stage_name FILE_FORMAT = (TYPE = 'CSV'); to load CSV files from a stage.
  2. Step 2: Identify incorrect syntax

    Options A, C, and D use wrong keywords or order that Snowflake does not accept.
  3. Final Answer:

    COPY INTO table_name FROM @stage_name FILE_FORMAT = (TYPE = 'CSV'); -> Option C
  4. Quick Check:

    Correct COPY INTO syntax = COPY INTO table_name FROM @stage_name FILE_FORMAT = (TYPE = 'CSV'); [OK]
Hint: COPY INTO table FROM stage with FILE_FORMAT [OK]
Common Mistakes:
  • Swapping INTO and FROM keywords
  • Using LOAD DATA instead of COPY INTO
  • Incorrect FILE_FORMAT syntax
3. Given the command:
COPY INTO my_table FROM @my_stage FILE_FORMAT = (TYPE = 'CSV' FIELD_DELIMITER = ',') ON_ERROR = 'skip_file';

What happens if one file in the stage has errors during loading?
medium
A. Snowflake retries loading the file indefinitely
B. The entire load fails and no data is loaded
C. Only the erroneous rows are skipped, file loads partially
D. The file with errors is skipped, other files load successfully

Solution

  1. Step 1: Understand ON_ERROR = 'skip_file'

    This option tells Snowflake to skip any file that causes errors during loading instead of failing the entire load.
  2. Step 2: Analyze the effect on other files

    Other files without errors will load normally, so only the bad file is skipped.
  3. Final Answer:

    The file with errors is skipped, other files load successfully -> Option D
  4. Quick Check:

    ON_ERROR = skip_file skips bad files [OK]
Hint: ON_ERROR = skip_file skips bad files, loads others [OK]
Common Mistakes:
  • Assuming entire load fails on one bad file
  • Thinking only bad rows are skipped with skip_file
  • Believing Snowflake retries endlessly
4. You run this command:
COPY INTO sales FROM @data_stage FILE_FORMAT = (FORMAT_NAME = 'csv_format');

But get an error: SQL compilation error: file format not found. What is the likely cause?
medium
A. The stage @data_stage does not exist
B. The FILE_FORMAT clause references a named file format that does not exist
C. The sales table does not exist
D. The CSV files are empty

Solution

  1. Step 1: Analyze the error message

    The error says file format not found, meaning Snowflake expects a named file format or a full definition.
  2. Step 2: Check the FILE_FORMAT clause

    The clause FILE_FORMAT = (FORMAT_NAME = 'csv_format') references a named file format that does not exist.
  3. Final Answer:

    The FILE_FORMAT clause references a named file format that does not exist -> Option B
  4. Quick Check:

    File format error means missing or wrong FILE_FORMAT [OK]
Hint: File format errors mean missing or wrong FILE_FORMAT [OK]
Common Mistakes:
  • Assuming stage or table missing causes file format error
  • Ignoring need for file format definition
  • Thinking empty files cause this error
5. You want to load JSON files from an external S3 bucket into a Snowflake table named events. Which COPY INTO command correctly handles JSON format and ignores files with errors?
hard
A. COPY INTO events FROM @s3_stage FILE_FORMAT = (TYPE = 'JSON') ON_ERROR = 'skip_file';
B. COPY INTO events FROM @s3_stage FILE_FORMAT = (TYPE = 'CSV') ON_ERROR = 'continue';
C. COPY INTO events FROM @s3_stage FILE_FORMAT = (TYPE = 'JSON') ON_ERROR = 'abort_statement';
D. COPY INTO events FROM @s3_stage FILE_FORMAT = (TYPE = 'XML') ON_ERROR = 'skip_file';

Solution

  1. Step 1: Match file format to JSON files

    Since files are JSON, the FILE_FORMAT must specify TYPE = 'JSON'.
  2. Step 2: Choose error handling to ignore bad files

    ON_ERROR = 'skip_file' skips files with errors, which matches the requirement.
  3. Step 3: Eliminate incorrect options

    COPY INTO events FROM @s3_stage FILE_FORMAT = (TYPE = 'CSV') ON_ERROR = 'continue'; uses CSV format, wrong for JSON. COPY INTO events FROM @s3_stage FILE_FORMAT = (TYPE = 'JSON') ON_ERROR = 'abort_statement'; aborts on error, not ignoring. COPY INTO events FROM @s3_stage FILE_FORMAT = (TYPE = 'XML') ON_ERROR = 'skip_file'; uses XML format, incorrect.
  4. Final Answer:

    COPY INTO events FROM @s3_stage FILE_FORMAT = (TYPE = 'JSON') ON_ERROR = 'skip_file'; -> Option A
  5. Quick Check:

    JSON format + skip_file error handling = COPY INTO events FROM @s3_stage FILE_FORMAT = (TYPE = 'JSON') ON_ERROR = 'skip_file'; [OK]
Hint: Match FILE_FORMAT type to file type and use skip_file to ignore errors [OK]
Common Mistakes:
  • Using wrong file format type
  • Choosing abort instead of skip_file for errors
  • Confusing JSON with CSV or XML