Reducing Cloud Waste
A pragmatic guide to identifying unused tables, cold data, and idle warehouses before the end of the fiscal year.
As 2025 comes to a close, Finance is asking questions about the cloud bill. Snowflake provides excellent transparency into costs, but you have to look for the waste. Here is a checklist for your End-of-Year audit.
1. The Graveyard of Unused Tables#
Data Engineers love building tables; they hate deleting them. Use ACCOUNT_USAGE.ACCESS_HISTORY to find tables that
haven’t been queried in 90 days.
SELECT
base_object_name,
MAX(query_start_time) as last_accessed
FROM snowflake.account_usage.access_history
, lateral flatten(base_objects_accessed)
WHERE query_start_time > DATEADD(day, -180, CURRENT_DATE())
GROUP BY 1
HAVING -- logic to find old tablessqlAction: Move them to “Archived” schema (cheaper if you have retention policies) or DROP them.
2. Cold Storage Optimization#
Storage costs add up.
- Time Travel: Do you really need 90 days of Time Travel on your
STAGEorRAWtables? Usually, 1 day is enough. 90 days writes 90 days worth of storage overhead. - Transient Tables: For ETL intermediate steps, use
TRANSIENTtables. They have no Fail-Safe costs (saving you the 7-day storage premium).
3. Warehouse Auto-Suspend#
The default used to be 10 minutes. That is an eternity in cloud time. For standard ETL and Ad-Hoc queries, 60 seconds is the new gold standard. If a query finishes in 5 seconds, and the warehouse waits 10 minutes to shut down, you are paying for 99% idle time.
4. Resource Monitors#
Set up “Notify” monitors at 75% of your budget and “Suspend” monitors at 110%. Don’t let a rogue CROSS JOIN loop in a
stored procedure burn your Q4 budget over a weekend.
Conclusion#
FinOps is a continuous practice. By automating these checks (e.g., a weekly “Waste Report” dashboard), you can keep your environment lean and your CFO happy.