4 May 2025, Sun

Procedures + Tasks

Procedures + Tasks

🧠 When and Why to Use Procedures + Tasks in Snowflake

Use CaseBenefit
Daily or hourly ETL jobsNative orchestration, no external scheduler
Conditional logicUse JavaScript or SQL logic in procedures
Backfill or cleanup routinesAutomate data maintenance
Audit, logging, or exception handlingAdd structured error management

🛠 Step-by-Step: Creating a Stored Procedure

Snowflake stored procedures support JavaScript with embedded SQL, or Snowflake Scripting (SQL-like syntax).

Example: Procedure to Copy Data Between Tables

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;
$$;

🕑 Step-by-Step: Creating and Scheduling a Task

Once your procedure is created, you can schedule it with a Snowflake Task.

Example: Run the procedure every day at 2 AM UTC

CREATE OR REPLACE TASK daily_copy_task
  WAREHOUSE = my_wh
  SCHEDULE = 'USING CRON 0 2 * * * UTC'
AS
  CALL copy_data();

Start the Task:

ALTER TASK daily_copy_task RESUME;

🔍 Monitor Task Execution

Check status and logs:

SHOW TASKS;

SELECT *
FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY())
WHERE TASK_NAME = 'DAILY_COPY_TASK'
ORDER BY SCHEDULED_TIME DESC;

🔁 Use Case: Chain Tasks Together

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.


✅ Best Practices

TipExplanation
Use separate warehouses for task executionAvoid resource contention
Enable error handling in proceduresUse TRY/CATCH or RETURN codes
Monitor TASK_HISTORY() regularlyTrack failures and durations
Chain tasks for multi-step workflowsMimics DAG-style logic
Use SUSPEND during maintenancePrevent unintended task runs

📚 Useful Documentation