Learn  /  Cheat sheets

Snowflake SQL cheat sheet

Snowflake-specific commands and syntax, on one printable page.

Cheat sheet5 min readUpdated 30 September 2026
SnowflakeSQL
All cheat sheets and guides
All guides and cheat sheets

Context

SQL
USE ROLE analyst;
USE WAREHOUSE transform_wh;
USE DATABASE analytics;
USE SCHEMA marts;
SELECT CURRENT_ROLE(), CURRENT_WAREHOUSE();

Warehouses

SQL
CREATE WAREHOUSE bi_wh
  WAREHOUSE_SIZE = 'XSMALL'
  AUTO_SUSPEND = 60 AUTO_RESUME = TRUE;
ALTER WAREHOUSE bi_wh SET WAREHOUSE_SIZE = 'SMALL';
ALTER WAREHOUSE bi_wh SUSPEND;

Stages and loading

SQL
CREATE STAGE raw_stage
  FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1);
LIST @raw_stage;
COPY INTO raw.orders FROM @raw_stage
  PATTERN = '.*orders.*[.]csv'
  ON_ERROR = 'CONTINUE';

Unload to files

SQL
COPY INTO @raw_stage/export/sales_
FROM (SELECT * FROM marts.fct_sales)
FILE_FORMAT = (TYPE = PARQUET)
HEADER = TRUE;

JSON with VARIANT

SQL
SELECT v:id::NUMBER             AS id,
       v:customer.name::STRING  AS name,
       i.value:sku::STRING      AS sku
FROM raw.events,
     LATERAL FLATTEN(input => v:items) i;
PARSE_JSON('{"a": 1}')

QUALIFY

Filter on a window function directly.

SQL
SELECT *
FROM orders
QUALIFY ROW_NUMBER() OVER (
  PARTITION BY customer_id
  ORDER BY order_date DESC) = 1;

Handy functions

SQL
IFF(amount > 100, 'big', 'small')
DATEADD(month, -1, CURRENT_DATE)
DATEDIFF('day', start_date, end_date)
DATE_TRUNC('week', order_date)
TRY_TO_NUMBER('12a')     -- NULL, not an error
SPLIT_PART('a-b-c', '-', 2)   -- 'b'

Time travel

SQL
SELECT * FROM t AT(OFFSET => -60*60);  -- 1 hour ago
SELECT * FROM t AT(TIMESTAMP =>
  '2026-09-29 09:00'::TIMESTAMP_LTZ);
SELECT * FROM t BEFORE(STATEMENT => '<query_id>');
UNDROP TABLE t;

Zero-copy clone

SQL
CREATE DATABASE analytics_dev CLONE analytics;
CREATE TABLE t_backup CLONE t;
CREATE TABLE t_yday CLONE t
  AT(OFFSET => -60*60*24);

Streams and tasks

SQL
CREATE STREAM orders_s ON TABLE raw.orders;
CREATE TASK nightly WAREHOUSE = transform_wh
  SCHEDULE = 'USING CRON 0 2 * * * Europe/London'
AS CALL refresh_marts();
ALTER TASK nightly RESUME;

Roles and grants

SQL
CREATE ROLE analyst;
GRANT USAGE ON WAREHOUSE bi_wh TO ROLE analyst;
GRANT USAGE ON DATABASE analytics TO ROLE analyst;
GRANT USAGE ON SCHEMA analytics.marts TO ROLE analyst;
GRANT SELECT ON ALL TABLES IN SCHEMA analytics.marts
  TO ROLE analyst;
GRANT ROLE analyst TO USER maria;

Cost check

SQL
SELECT warehouse_name,
       SUM(credits_used) AS credits
FROM snowflake.account_usage.warehouse_metering_history
WHERE start_time >= DATEADD(day, -30, CURRENT_TIMESTAMP())
GROUP BY 1 ORDER BY 2 DESC;

Alessandro Ecclesie AgazziWritten by Alessandro Ecclesie Agazzi, analytics engineer in London. Updated 30 September 2026. About me

Found this useful?

New guides and "what's new" explainers on data and AI land here regularly. Follow along on LinkedIn, or share this one with a colleague.