Procedures + Tasks

Use Case | Benefit |
---|---|
Daily or hourly ETL jobs | Native orchestration, no external scheduler |
Conditional logic | Use JavaScript or SQL logic in procedures |
Backfill or cleanup routines | Automate data maintenance |
Audit, logging, or exception handling | Add structured error management |
Snowflake stored procedures support JavaScript with embedded SQL, or Snowflake Scripting (SQL-like syntax).
CREATE OR REPLACE PROCEDURE copy_data()
RETURNS STRING
LANGUAGE SQL
AS
$$
BEGIN
INSERT INTO target_table
SELECT * FROM source_table
WHERE load_date = CURRENT_DATE;
RETURN 'Data copied successfully';
END;
$$;
Once your procedure is created, you can schedule it with a Snowflake Task.
CREATE OR REPLACE TASK daily_copy_task
WAREHOUSE = my_wh
SCHEDULE = 'USING CRON 0 2 * * * UTC'
AS
CALL copy_data();
ALTER TASK daily_copy_task RESUME;
Check status and logs:
SHOW TASKS;
SELECT *
FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY())
WHERE TASK_NAME = 'DAILY_COPY_TASK'
ORDER BY SCHEDULED_TIME DESC;
You can chain tasks using the AFTER
clause:
CREATE TASK parent_task
WAREHOUSE = my_wh
SCHEDULE = 'USING CRON 0 * * * * UTC'
AS
CALL stage_data();
CREATE TASK child_task
WAREHOUSE = my_wh
AFTER parent_task
AS
CALL transform_data();
Now, child_task
runs automatically after parent_task
completes.
Tip | Explanation |
---|---|
Use separate warehouses for task execution | Avoid resource contention |
Enable error handling in procedures | Use TRY/CATCH or RETURN codes |
Monitor TASK_HISTORY() regularly | Track failures and durations |
Chain tasks for multi-step workflows | Mimics DAG-style logic |
Use SUSPEND during maintenance | Prevent unintended task runs |