📖 Scenario: You work as a data engineer managing Snowflake cloud data warehouse resources. Your team wants to monitor credit usage by different warehouses to control costs.Snowflake charges credits based on warehouse usage. Monitoring credit consumption helps avoid surprises in billing.
🎯 Goal: Build a simple Snowflake SQL script that queries credit usage per warehouse, filters by a threshold, and displays the results.This will help your team quickly see which warehouses are using the most credits.
📋 What You'll Learn
Create a table variable with sample warehouse credit usage data
Add a threshold variable to filter warehouses by minimum credits used
Write a query to select warehouses exceeding the threshold
Display the filtered results
💡 Why This Matters
🌍 Real World
Monitoring credit usage in Snowflake helps control cloud costs and optimize resource allocation.
💼 Career
Data engineers and DevOps professionals use such queries to build cost monitoring dashboards and alerts.
Progress0 / 4 steps
1
Create sample warehouse credit usage data
Create a table variable called warehouse_usage with columns warehouse_name (string) and credits_used (number). Insert these exact rows: ('WH_A', 120), ('WH_B', 80), ('WH_C', 200).
Snowflake
Hint
Use a CTE (WITH clause) to create warehouse_usage with the exact rows.
2
Add a credit usage threshold variable
Create a variable called credit_threshold and set it to 100 to filter warehouses with credits used above this value.
Snowflake
Hint
Use a CTE named credit_threshold with a single column value set to 100.
3
Select warehouses exceeding the credit threshold
Write a SELECT query joining warehouse_usage and credit_threshold to return warehouse_name and credits_used where credits_used is greater than credit_threshold.value.
Snowflake
Hint
Use a simple join in the FROM clause and filter with WHERE.
4
Display the filtered credit usage results
Run the full query to display the warehouses with credits used above the threshold. The output should show warehouse_name and credits_used columns.
Snowflake
Hint
Run the query as is. The output should list warehouses WH_A and WH_C with their credits used.
Practice
(1/5)
1. What is the main purpose of monitoring credit usage in Snowflake?
easy
A. To control and optimize Snowflake costs
B. To increase the number of warehouses automatically
C. To backup data to external storage
D. To improve query performance by caching
Solution
Step 1: Understand credit usage concept
Credit usage monitoring tracks how many credits Snowflake consumes, which directly affects billing.
Step 2: Identify the goal of monitoring
The goal is to control and optimize costs by understanding usage patterns.
Final Answer:
To control and optimize Snowflake costs -> Option A
Confusing credit monitoring with performance tuning
Thinking it automatically scales warehouses
Assuming it backs up data
2. Which Snowflake view provides detailed credit usage information for warehouses?
easy
A. INFORMATION_SCHEMA.TABLES
B. ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY
C. ACCOUNT_USAGE.LOGIN_HISTORY
D. SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
Solution
Step 1: Identify views related to credit usage
ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY tracks credit consumption by warehouses.
Step 2: Exclude unrelated views
INFORMATION_SCHEMA.TABLES shows table info, LOGIN_HISTORY tracks logins, QUERY_HISTORY tracks queries but not credit usage.
Final Answer:
ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY -> Option B
Quick Check:
Warehouse credit data = WAREHOUSE_METERING_HISTORY [OK]
Hint: Warehouse credit data is in WAREHOUSE_METERING_HISTORY view [OK]
Common Mistakes:
Choosing QUERY_HISTORY which tracks queries, not credits
Confusing LOGIN_HISTORY with credit usage
Selecting INFORMATION_SCHEMA views unrelated to credits
3. What will the following query return?
SELECT WAREHOUSE_NAME, SUM(CREDITS_USED) AS TOTAL_CREDITS FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY GROUP BY WAREHOUSE_NAME ORDER BY TOTAL_CREDITS DESC;
medium
A. List of warehouses with their current running queries
B. Total credits used by each user in the account
C. Total credits used by each warehouse, sorted from highest to lowest
D. A syntax error due to missing WHERE clause
Solution
Step 1: Analyze the SELECT and GROUP BY
The query sums credits used grouped by warehouse name.
Step 2: Understand ORDER BY clause
Ordering by TOTAL_CREDITS DESC sorts warehouses from highest to lowest credit usage.
Final Answer:
Total credits used by each warehouse, sorted from highest to lowest -> Option C
Quick Check:
SUM credits by warehouse, ordered DESC = Total credits used by each warehouse, sorted from highest to lowest [OK]
Hint: GROUP BY warehouse sums credits; ORDER BY DESC sorts high to low [OK]
Common Mistakes:
Thinking it shows user credit usage
Assuming it lists running queries
Believing missing WHERE causes syntax error
4. You run this query but get no results:
SELECT WAREHOUSE_NAME, SUM(CREDITS_USED) FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WHERE START_TIME > CURRENT_DATE() GROUP BY WAREHOUSE_NAME;
What is the likely cause?
medium
A. Missing GROUP BY clause
B. Syntax error due to missing alias for SUM
C. Incorrect table name used
D. No credit usage recorded today yet
Solution
Step 1: Check the WHERE condition
Filtering START_TIME > CURRENT_DATE() means only today's data is shown.
Step 2: Consider data availability
If no credits used today yet, query returns empty result, not error.
Final Answer:
No credit usage recorded today yet -> Option D
Quick Check:
Empty result = no data matching date filter [OK]
Hint: Empty results often mean no data matches the filter [OK]
Common Mistakes:
Assuming missing alias causes error
Thinking table name is wrong
Believing GROUP BY is missing
5. You want to monitor credit usage by service type (e.g., WAREHOUSE, CLOUD_SERVICES) for the last 7 days. Which query correctly achieves this?
hard
A. SELECT SERVICE_TYPE, SUM(CREDITS_USED) AS TOTAL_CREDITS FROM SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY WHERE START_TIME >= DATEADD(day, -7, CURRENT_DATE()) GROUP BY SERVICE_TYPE ORDER BY TOTAL_CREDITS DESC;
B. SELECT SERVICE_TYPE, SUM(CREDITS_USED) FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WHERE START_TIME >= DATEADD(day, -7, CURRENT_DATE()) GROUP BY SERVICE_TYPE;
C. SELECT WAREHOUSE_NAME, SUM(CREDITS_USED) FROM SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY WHERE START_TIME >= DATEADD(day, -7, CURRENT_DATE()) GROUP BY WAREHOUSE_NAME;
D. SELECT SERVICE_TYPE, CREDITS_USED FROM SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY WHERE START_TIME >= DATEADD(day, -7, CURRENT_DATE());
Solution
Step 1: Identify correct view for service type credit data
ACCOUNT_USAGE.METERING_HISTORY contains credit usage by service type; WAREHOUSE_METERING_HISTORY is only for warehouses.
Step 2: Check query filters and grouping
Filtering last 7 days with DATEADD and grouping by SERVICE_TYPE is correct; ordering by total credits helps see highest usage.
Final Answer:
SELECT SERVICE_TYPE, SUM(CREDITS_USED) AS TOTAL_CREDITS FROM SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY WHERE START_TIME >= DATEADD(day, -7, CURRENT_DATE()) GROUP BY SERVICE_TYPE ORDER BY TOTAL_CREDITS DESC; -> Option A
Quick Check:
Use METERING_HISTORY + SERVICE_TYPE + last 7 days = SELECT SERVICE_TYPE, SUM(CREDITS_USED) AS TOTAL_CREDITS FROM SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY WHERE START_TIME >= DATEADD(day, -7, CURRENT_DATE()) GROUP BY SERVICE_TYPE ORDER BY TOTAL_CREDITS DESC; [OK]
Hint: Use METERING_HISTORY view and group by SERVICE_TYPE for service credit usage [OK]
Common Mistakes:
Using WAREHOUSE_METERING_HISTORY for service types
Not grouping by SERVICE_TYPE
Selecting credits without aggregation
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.