HOW TO: Add Column in Snowflake—Quick & Easy Methods (2024)

Snowflake table structures require regular updates due to shifting user/business requirements and evolving data demands. It's crucial to modify table schemas efficiently to avoid excessive rework. Luckily, Snowflake offers ALTER TABLE statements to make it simple to change your table schema. Need to add new columns or data attributes? Not a problem! You can utilize the Snowflake ADD COLUMN clause within the ALTER TABLE statement, enabling you to add columns to an existing table without disrupting any existing table relationships.

In this article, we'll cover the ins & outs of how to add column in Snowflake table using Snowflake ADD COLUMN, covering its full syntax, use cases, limitations, tips and tricks—and so much more!

What Is Snowflake Alter Table Command?

Snowflake provides the ALTER TABLE command for applying structural changes to tables without needing to rebuild or recreate them.

ALTER TABLE provides efficient schema changes with minimal disruption to existing tables, indexes, constraints, grants, and relationships, which enables iterative expansion of tables over time.

Check out the documentation for more in-depth of ALTER TABLE

Save up to 30% on your Snowflake spend in a few minutes!

Enter your work email
Enter your work email

Step-by-Step Guide to Add a Column in Snowflake Using Alter Table

We will start by outlining the basic steps and syntax on how to add column in Snowflake tables using Snowflake Add column using clear cut examples.

Syntax Overview

The syntax for adding a column is straightforward:

ALTER TABLE table_name
ADD COLUMN new_column_name column_type;
Snowflake ADD COLUMN Syntax

Let's break this query down:

  • ALTER TABLE specifies we want to modify the structure of an existing Snowflake table
  • table_name is the identifier of the target table
  • Snowflake ADD COLUMN introduces the new data attribute
  • new_column_name sets the desired name of the new column
  • column_type declares the data type such as VARCHAR, INTEGER, etc

How to Add a Simple Column Using ADD COLUMN in Snowflake?

To add a basic new string column called "major" to a table called "students", we can run the following command:

ALTER TABLE students
ADD COLUMN major VARCHAR(255);
Snowflake ADD COLUMN (Adding a Simple Column using Snowflake ADD COLUMN)

This appends a VARCHAR column to store 255-character string data to the student's table schema.

Adding a Simple Column using Snowflake ADD COLUMN

How to Add a Column With a Default Value?

Columns can have default values set when added using the DEFAULT clause:

ALTER TABLE students
ADD COLUMN account_status VARCHAR(20) DEFAULT 'active';
Snowflake ADD COLUMN (Adding a Column with Default Value)

Now any new rows added to the students table will populate account_status with “active” by default.

Adding a Column with Default Value

How to Add a Column With a NOT NULL Constraint?

For columns that require a value (while inserting data), we can add the NOT NULL constraint:

ALTER TABLE students
ADD COLUMN phone_number VARCHAR(20) NOT NULL;
Snowflake ADD COLUMN (Adding a Required Column with NOT NULL)

This forces all rows in the users table to contain a phone number value after alteration.

Adding a Required Column with NOT NULL
Note: When adding a NOT NULLcolumn to a table that already contains data, it is essential to first verify that there are no null values in the column, or alternatively, provide a default value for the new column to prevent any potential data inconsistencies.

How to Add Multiple Columns in Snowflake at the Same Time?

We can add multiple columns in a single ALTER TABLE statement like:

ALTER TABLE students
ADD COLUMN last_name VARCHAR(50), 
           address VARCHAR(50) NOT NULL;
Snowflake ADD COLUMN (Adding Multiple Columns)

This adds both a last name and required address attribute at the same time.

Adding Multiple Columns using Snowflake ADD COLUMN

When to Add a Column in Snowflake?

The flexibility of ALTER TABLE makes adding columns in Snowflake an ideal approach to iteratively increase table schemas over time. Adding columns using ADD COLUMN in Snowflake provides a safe and easy way to introduce new data points, metrics, and dimensions to existing tables. Here are a few good reasons you may need to add column in Snowflake:

1) Adapting to Changing Data Needs

As your priorities as a user shift, new metrics and breakdowns are often required from existing data. Rather than redesigning schemas, new columns can be added to capture emerging needs, such as:

  • Adding indicators for user type or segment
  • Bringing in new engagement and behavioral traits
  • Introducing timeline attributes like order history

Adding columns provides precision to hone in on new dimensions.

2) Enabling New Analytics or Generating Reports

Introducing new analytics/reporting requires access to supporting data elements. Adding columns avoids schema rework to make attributes available like:

  • Adding columns for retention or churn calculations
  • Bringing in descriptive dimensions for segmentation
  • Ingesting new metrics required for extensive analysis/reporting

3) Evolving Schema Design

Early schema design often misses attributes that become useful later on. ALTER TABLE and ADD COLUMN in Snowflake enables easy expansion like:

  • Adding temporal columns
  • Adding metadata (like author, source and other descriptors)
  • Capturing additional descriptive fields
  • Incremental expansion of future proofs table design over time

4) Integrating New Data Sources

When bringing in new data from external sources, existing schemas often need expansion to ingest additional fields and attributes provided. Adding columns makes this easy without overhauling schemas.

5) Adding Temporal Data

Time-series analytics requires adding temporal columns (like event, created_at timestamps) to unlock insights. ALTER TABLE provides a simple way to introduce new date-based attributes.

Therefore, rather than requiring painful table rebuilds, ALTER TABLE provides precision when modifying Snowflake tables. Adding columns incrementally future proofs your data model for new use cases over time.

What Are the Limitations of Adding New Columns in Snowflake?

While using Snowflake ALTER TABLE to add column in Snowflake provides powerful schema/table evolution, some limitations do exist, they are:

1) NOT NULL Constraint Requires Empty Table

Adding NOT NULL constraints requires existing tables to be empty first. Attempting to add a NOT NULL constraint to a populated table will result in an error since Snowflake cannot backfill existing rows with a value.

The reason is that existing rows will have NULL values for that column, which violates the NOT NULL constraint being introduced. Snowflake has no way to populate a meaningful value in all existing rows when altering the schema like this.

To add a NOT NULL column, the best practice is to create a new table with the constraint and migrate data into it. For example:

CREATE TABLE students_new (
  student_id INT PRIMARY KEY, 
  email VARCHAR NOT NULL);
  
INSERT INTO students_new
SELECT id, email 
FROM students;
Snowflake ADD COLUMN limitations 

This avoids NOT NULL issues by moving to a new table designed with the constraint up front.

Adding NOT NULL columns to empty tables is possible since new rows will have values populated. But for tables with existing data, NOT NULL requires migration to a new schema first.

2) New Columns Are Added to End of Table

Another limitation is that new columns added via ALTER TABLE are always appended to the end of the table schema. There is no way to directly specify a particular location in the schema to insert the new column.

For example:

ALTER TABLE students
ADD COLUMN middle_name VARCHAR(50);
Snowflake ADD COLUMN limitations 

As you can see, this will add the new middle name column after the last existing column in the table. You cannot place it after the first name column for example.

The only option is to create a new table with columns in the desired order and migrate data:

CREATE TABLE students_new (
  first_name VARCHAR, 
  middle_name VARCHAR,
  last_name VARCHAR);
  
INSERT INTO students_new
SELECT first_name, last_name 
FROM students;
Snowflake ADD COLUMN limitations 

Now middle name is in the preferred position.

So column order cannot be controlled through ALTER TABLE directly—a new table needs to be created instead.

3) Bloated Storage

Adding columns in Snowflake can potentially increase the storage requirements for the table, especially if the new column has a large data type or is populated with data retroactively.

Tips and Tricks to Add Column in Snowflake

Take advantage of these additional tips and tricks for painlessly adding columns using Snowflake ADD COLUMN :

1) Use IF EXISTS/IF NOT EXISTS

Add IF NOT EXISTS when adding new columns to avoid errors if columns already exist:

ALTER TABLE students
ADD COLUMN phone_number VARCHAR(20);
Snowflake ADD COLUMN Use IF EXISTS/IF NOT EXISTS
Using IF NOT EXISTS in Snowflake ADD COLUMN
ALTER TABLE students
ADD COLUMN IF NOT EXISTS phone_number VARCHAR(20);
Snowflake ADD COLUMN Use IF EXISTS/IF NOT EXISTS
Using IF NOT EXISTS in Snowflake ADD COLUMN

Or IF EXISTS when dropping columns to ignore missing ones:

ALTER TABLE students
DROP COLUMN IF EXISTS phone_number;
Snowflake ADD COLUMN Use IF EXISTS/IF NOT EXISTS
Using IF EXISTS in Snowflake DROP COLUMN

You can see that, this provides control and error handling when making schema changes.

2) Modify Schema Without Blocking Query Execution

ALTER TABLE lets you evolve schema non-destructively without blocking query execution or requiring downtime. Tables remain available throughout additions.

3) Plan Column Changes Up-Front

When possible, plan needed columns upfront even if they won't be populated yet. This avoids excessive ALTER statements down the road.

4) Test Additions First

Thoroughly test column additions and review impacts before applying changes in prod.

5) Add Comments

It's generally a good practice to use the COMMENT clause when adding new columns to document the purpose and meaning of the column for future reference.

Practical Scenarios and Examples of Using Snowflake ADD COLUMN

Let's examine some practical use cases for the Snowflake ALTER TABLE ADD COLUMN example, demonstrating how to add columns in Snowflake using a sample Students table:

CREATE TABLE Students (
   ID INT,  
   Name VARCHAR(50),
   Age INT);
   
INSERT INTO Students 
   VALUES (1, 'Chaos', 20),
          (2, 'Genius', 18),
          (3, 'Johnny', 21),
          (4, 'Tim', 23),
Snowflake ADD COLUMN Example
Creating and inserting sample data in Students table - Snowflake ADD COLUMN

Example 1—Adding an Email Column

In this example, we need to add an email address column to the Students table to capture contact information:

ALTER TABLE Students
ADD COLUMN Email VARCHAR(50);
Snowflake ADD COLUMN Example 1
Adding an Email Column - Snowflake ADD COLUMN

As you can see, this adds the new Email column to the end of the table schema. Now we can start collecting email addresses for students.

Example 2—Adding a Status Column with Default

Here, we want to add a Status column indicating if a student is active or inactive, with a default of 'active':

ALTER TABLE Students
ADD COLUMN Status VARCHAR(20) DEFAULT 'active';
Snowflake ADD COLUMN Example 2
Adding a Status Column with Default - Snowflake ADD COLUMN

The new Status column will be populated with “active” by default for existing rows.

Example 3—Adding Birth Date Column

Suppose we want to capture date of birth information in a new column:

ALTER TABLE Students
ADD COLUMN BirthDate DATE;
Snowflake ADD COLUMN Example 3
Adding Birth Date Column - Snowflake ADD COLUMN

You can see that this adds a column to store date values. We could then backfill historical birth dates or start collecting for new students.

The Students table now has added columns for contact information, status tracking, and date of birth data—all through simple ALTER TABLE statements.

select * from students;
Snowflake ADD COLUMN Example 3
Selecting all from Students table - Snowflake ADD COLUMN

Example 4—How Do I Add Three Columns in Snowflake?

In this example, we will add multiple columns (three columnto be precise) to a Snowflake table in a single statement. To do so, you can specify them separated by commas after the Snowflake ADD COLUMN clause. For example:

ALTER TABLE Students
ADD COLUMN Email VARCHAR(50),
ADD COLUMN Status VARCHAR(20) DEFAULT 'active',
ADD COLUMN BirthDate DATE;
Snowflake ADD COLUMN Example 4

This will add three new columns to the students table. You can optionally add constraints like NOT NULL or DEFAULT values for each column being added by specifying them after the data type.

Example 5—How Do I Add a Column to an External Table in a Snowflake?

You can add a column to an external table using the standard ALTER TABLE syntax, just like you would for a regular table. The syntax is:

ALTER TABLE <external_table_name> ADD COLUMN <new_col_name> <data_type>;
Snowflake ADD COLUMN Example 5

For example, to add a new column called email VARCHAR(100) to an external table named customers_ext:

ALTER TABLE customers_ext ADD COLUMN email VARCHAR(100);
Snowflake ADD COLUMN Example 5

This will add the new email column to the end of the external table's schema.

A few important points about adding columns to external tables:

  • You cannot add NOT NULL constraints when adding a new column, as Snowflake cannot validate or enforce that for data in external sources.
  • The new column is just schema metadata until you provide an updated FILE_FORMAT that maps the column to actual data files.
  • After altering the table, you need to REFRESH the external table metadata to pick up the schema change.

So the full sequence would be:

ALTER TABLE customers_ext ADD COLUMN email VARCHAR(100);
ALTER EXTERNAL TABLE customers_ext
SET FILE_FORMAT = (EXISTING_FILE_FORMAT);
ALTER EXTERNAL TABLE customers_ext REFRESH;
Snowflake ADD COLUMN Example 5

This adds the new column, updates the file format to map it to data files, and then refreshes the external table metadata.

How to Drop a Column in Snowflake ?

While adding columns is useful for expanding schemas, sometimes attributes need removal. Here is how to drop columns using similar ALTER TABLE syntax:

Syntax Overview

ALTER TABLE table_name
DROP COLUMN column_name;
Snowflake DROP COLUMN Syntax

For example:

ALTER TABLE Students
DROP COLUMN Email;
Snowflake DROP COLUMN Example
Dropping a Column in Snowflake - Snowflake ADD COLUMN
select * from students;
Snowflake DROP COLUMN Example
Selecting all from Students table - Snowflake ADD COLUMN

As you can see, you have successfully removed a column from Snowflake table.

Using IF EXISTS for erroless column removal

You can also specify IF EXISTS to suppress errors if the column does not exist:

ALTER TABLE table_name
DROP COLUMN IF EXISTS column_name;
Snowflake DROP COLUMN Using IF EXISTS

The column will be removed errorless from the schema and all rows will lose that attribute and data.

Want to take Chaos Genius for a spin?

It takes less than 5 minutes.

Enter your work email
Enter your work email

Conclusion

And that's a wrap! Adding columns in Snowflake is a really straightforward and easy task! So with the help of ALTER TABLE and Snowflake ADD COLUMN, you can make table changes seamlessly.

In this article, we covered:

  • What Is Snowflake Alter Table Command?
  • Step-by-Step Guide to Add Column in Snowflake
  • How to Add a Simple Column Using Add Column in Snowflake?
  • How to Add Column With a Default Value?
  • How to Add Column With a NOT NULL Constraint?
  • How to Add Multiple Columns at the Same Time?
  • When to Add Column in Snowflake?
  • What Are the Limitations of Adding New Columns?
  • Tips and Tricks to Add Column in Snowflake
  • Practical Scenarios and Examples of Using Snowflake Add Column
    • Example 1—Adding an Email Column
    • Example 2—Adding a Status Column with Default
    • Example 3—Adding Birth Date Column
    • Example 4—How Do I Add Three Columns in Snowflake?
    • Example 5—How Do I Add a Column to an External Table in a Snowflake?
  • How to Drop a Column in Snowflake ?

...and so much more!


FAQs

What is the purpose of the ALTER TABLE command in Snowflake?

Snowflake ALTER TABLE command  allows you to make structural changes to an existing table without needing to rebuild or recreate it.

What command is used to add column in Snowflake?

Snowflake ADD COLUMN command is used to add column in Snowflake.

How do I add a column in Snowflake?

To add a column in Snowflake, you use the ALTER TABLE statement with the ADD COLUMN clause. The syntax is:

ALTER TABLE table_name ADD COLUMN new_column_name data_type;

Can you add multiple columns in one statement in Snowflake?

Yes, you can add multiple columns in a single ALTER TABLE statement by separating them with commas.

How do you add column in Snowflake with a default value in Snowflake?

You can use the DEFAULT clause when adding the column, for example:

ALTER TABLE table ADD COLUMN new_col VARCHAR DEFAULT 'value';

Is it possible to add a NOT NULL column to an existing populated table?

No, adding a NOT NULL column requires the table to be empty first in Snowflake.

Where are new columns added in the table when using Snowflake ADD COLUMN?

New columns are always added to the end of the existing column list.

How can you avoid errors if a column already exists when adding it?

Use IF NOT EXISTS, for example:

ALTER TABLE table ADD COLUMN IF NOT EXISTS column_name;

When would you need to add a new column in Snowflake?

When new data attributes are needed, changing business needs require new metrics, or to integrate data from new sources.

How do you drop and add a column in Snowflake?

Use: ALTER TABLE table_name DROP COLUMN column_name;

To add a column, you use the ADD COLUMN clause:

Use: ALTER TABLE table_name ADD COLUMN new_column_name data_type;

How do you drop a column in Snowflake?

Use ALTER TABLE table_name DROP COLUMN column_name;

You can also use IF EXISTS to suppress errors if the column doesn't exist

Where are new columns added when using the ADD COLUMN clause?

New columns are always added to the end of the table schema when using the ADD COLUMN clause. You cannot directly specify the position of the new column.

How can you handle errors when adding or dropping columns that may or may not exist?

You can use the IF NOT EXISTS clause when adding columns to avoid errors if the column already exists, and the IF EXISTS clause when dropping columns to ignore errors if the column doesn't exist.

Can Snowflake ALTER TABLE statements be executed while queries are running on the table?

Yes, ALTER TABLE statements in Snowflake can be executed without blocking query execution or requiring downtime.

Can you remove a column if you're unsure whether it exists?

Yes, use IF EXISTS, e.g. DROP COLUMN IF EXISTS column_name;

Does ALTER TABLE and Snowflake ADD COLUMN command require blocking queries or downtime?

No, ALTER TABLE and Snowflake ADD COLUMN command is non-destructive and doesn't block queries.

Should column changes be planned ahead of time where possible?

Yes, it's best to plan needed columns upfront to avoid excessive ALTER statements later.

Does ALTER TABLE modify or recreate the table when adding columns?

No, ALTER TABLE simply modifies the schema, it does not recreate or rebuild the table.

What is a good practice before applying column changes to a production table?

It is a good practice to thoroughly test column additions and review their impacts before applying the changes to a production table.

Can you add a NOT NULL constraint when adding a new column to an external table?

No, you cannot add a NOT NULL constraint when adding a new column to an external table, as Snowflake cannot validate or enforce that constraint for data in external sources.

What happens to the data in a column when you drop it?

When you drop a column from a table, all data in that column will be permanently removed from all rows in the table.

How do I add data to Snowflake?

There are several ways to add data to Snowflake tables:

  • Use the INSERT statement to insert new rows
  • Use the COPY INTO statement to load data from staged files
  • Use external tables to automatically ingest data from external sources
  • Use Snowpipe to continuously load data from streaming sources