Snowflake SQL Cheat Sheet

IntermediateLast updated: 2026-04-09 • 5 sections

Essential Snowflake SQL commands, functions, and syntax for data engineers. Covers DDL, DML, querying, and Snowflake-specific features.

Database & Schema Operations

CommandSyntaxExample
Create DatabaseCREATE DATABASE [IF NOT EXISTS] db_name;CREATE DATABASE analytics_db;
Create SchemaCREATE SCHEMA [IF NOT EXISTS] schema_name;CREATE SCHEMA raw_data;
Use DatabaseUSE DATABASE db_name;USE DATABASE analytics_db;
Use SchemaUSE SCHEMA schema_name;USE SCHEMA raw_data;
Show DatabasesSHOW DATABASES;SHOW DATABASES LIKE '%analytics%';
Drop DatabaseDROP DATABASE [IF EXISTS] db_name;DROP DATABASE old_db;

Table Operations

CommandSyntaxExample
Create TableCREATE TABLE t (col TYPE, ...);CREATE TABLE users (id INT, name VARCHAR, created_at TIMESTAMP_NTZ);
Create Table AsCREATE TABLE t AS SELECT ...;CREATE TABLE summary AS SELECT dept, COUNT(*) cnt FROM employees GROUP BY dept;
Clone TableCREATE TABLE t CLONE source;CREATE TABLE users_backup CLONE users;
Transient TableCREATE TRANSIENT TABLE t (...);CREATE TRANSIENT TABLE temp_staging (id INT, data VARIANT);
Alter TableALTER TABLE t ADD COLUMN col TYPE;ALTER TABLE users ADD COLUMN email VARCHAR;
Drop TableDROP TABLE [IF EXISTS] t;DROP TABLE old_staging;

Snowflake-Specific Features

FeatureSyntaxUse Case
Time TravelSELECT * FROM t AT(OFFSET => -60*5);Query data as it was 5 minutes ago
Time Travel (Timestamp)SELECT * FROM t AT(TIMESTAMP => '2026-01-01'::TIMESTAMP);Query data at a specific point in time
UndropUNDROP TABLE t;Recover a dropped table within retention period
FLATTENSELECT f.value FROM t, LATERAL FLATTEN(input => t.json_col) f;Expand semi-structured arrays into rows
PARSE_JSONSELECT PARSE_JSON('{"key":"val"}');Parse a JSON string into VARIANT
OBJECT_CONSTRUCTSELECT OBJECT_CONSTRUCT('k1',v1,'k2',v2);Build a JSON object from key-value pairs
QUALIFYSELECT * FROM t QUALIFY ROW_NUMBER() OVER(PARTITION BY id ORDER BY ts DESC) = 1;Filter window function results without subquery
RESULT_SCANSELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));Query results of the last executed query

Warehouse Management

CommandSyntaxNotes
Create WarehouseCREATE WAREHOUSE wh WITH WAREHOUSE_SIZE = 'XSMALL' AUTO_SUSPEND = 60 AUTO_RESUME = TRUE;Always set AUTO_SUSPEND to save credits
ResizeALTER WAREHOUSE wh SET WAREHOUSE_SIZE = 'MEDIUM';Takes effect on next query
SuspendALTER WAREHOUSE wh SUSPEND;Immediately stops credit consumption
ResumeALTER WAREHOUSE wh RESUME;Manual resume if AUTO_RESUME is off
Multi-clusterALTER WAREHOUSE wh SET MIN_CLUSTER_COUNT=1 MAX_CLUSTER_COUNT=3;Enterprise edition feature for concurrency
Query TagALTER SESSION SET QUERY_TAG = 'etl_pipeline_v2';Tag queries for cost attribution

Performance Tips

  • Use CLUSTER BY for large tables (100M+ rows) queried with consistent filters
  • Prefer QUALIFY over subqueries for window function filtering — it's Snowflake-native and faster
  • Set AUTO_SUSPEND = 60 (seconds) on warehouses to avoid idle credit burn
  • Use TRANSIENT tables for staging/temp data to skip Fail-safe storage costs
  • Use COPY INTO with file format options instead of INSERT for bulk loads
  • Monitor with QUERY_HISTORY and WAREHOUSE_METERING_HISTORY views
  • Use RESULT_SCAN(LAST_QUERY_ID()) to chain query results without temp tables
  • Avoid SELECT * in production — specify columns to leverage micro-partition pruning

Frequently Asked Questions

What is the QUALIFY clause in Snowflake?

QUALIFY is a Snowflake-specific clause that filters the results of window functions directly, eliminating the need for subqueries. For example, QUALIFY ROW_NUMBER() OVER(PARTITION BY id ORDER BY ts DESC) = 1 keeps only the latest row per id.

How does Time Travel work in Snowflake?

Time Travel lets you query historical data using AT or BEFORE clauses. You can go back up to 90 days (Enterprise edition) or 1 day (Standard). Syntax: SELECT * FROM table AT(OFFSET => -300) queries data from 5 minutes ago.

What is the difference between VARIANT and VARCHAR in Snowflake?

VARIANT is a semi-structured data type that can store JSON, Avro, ORC, Parquet, or XML data natively. VARCHAR stores plain text strings. Use VARIANT when working with nested/hierarchical data and VARCHAR for flat string values.

Related Cheat Sheets

SQL Window Functions Cheat SheetSnowflake Cost Optimization — Expert Interview QuestionsSnowflake Semi-Structured Data — Expert Interview Questions
← All Cheat Sheets