📖 Scenario: Imagine you work for an online store. You want to keep track of how product prices change over time. This helps you see price trends and understand when prices go up or down.
🎯 Goal: You will create a dbt snapshot to track changes in product prices over time. This snapshot will store historical versions of product data so you can analyze price changes later.
📋 What You'll Learn
Create a source table with product data
Define a snapshot configuration with unique key and strategy
Write the snapshot SQL to track price changes
Run the snapshot and display the historical data
💡 Why This Matters
🌍 Real World
Snapshot tables help businesses track how data changes over time, like price changes, customer info updates, or inventory levels.
💼 Career
Data analysts and engineers use snapshots to build historical datasets for reporting, auditing, and trend analysis.
Progress0 / 4 steps
1
Create the source table with product data
Create a source table called products with these exact columns and values: product_id (1, 2, 3), product_name ('T-shirt', 'Jeans', 'Sneakers'), and price (20, 40, 60). Use a dbt model SQL file named products.sql with a select statement returning these rows.
dbt
Hint
Use a select * from (values ...) statement to create the table with exact rows.
2
Configure the snapshot settings
Create a dbt snapshot configuration file named product_price_snapshot.sql. Add a snapshot block with unique_key = 'product_id' and strategy = 'check'. Also, set check_cols = ['price'] to track changes only in the price column.
dbt
Hint
Use {% snapshot %} and {{ config(...) }} to set snapshot options.
3
Run the snapshot to track price changes
Run the dbt snapshot command to create the snapshot table and track historical price changes for products.
dbt
Hint
Use the terminal command dbt snapshot to run the snapshot.
4
Display the snapshot historical data
Write a select query to display all rows from the snapshot table named snapshots.product_price_snapshot. Use order by product_id, dbt_valid_from to see the history in order.
dbt
Hint
Use select * from snapshots.product_price_snapshot order by product_id, dbt_valid_from to see the full history.
Practice
(1/5)
1. What is the main purpose of using snapshot tables in dbt?
easy
A. To save historical versions of data automatically
B. To speed up query performance by caching results
C. To create temporary tables for intermediate calculations
D. To delete old data from the database
Solution
Step 1: Understand snapshot tables
Snapshot tables store copies of data at different points in time to track changes.
Step 2: Identify the main use
They are used to save historical versions automatically, not for caching or deleting data.
Final Answer:
To save historical versions of data automatically -> Option A
Quick Check:
Snapshot tables = historical data tracking [OK]
Hint: Snapshots track data changes over time automatically [OK]
Common Mistakes:
Confusing snapshots with caching mechanisms
Thinking snapshots delete old data
Assuming snapshots create temporary tables
2. Which of the following is the correct way to define a snapshot strategy in dbt?
easy
A. strategy: timestamp
B. method: snapshot
C. type: incremental
D. mode: historical
Solution
Step 1: Recall snapshot config syntax
In dbt snapshots, the strategy is set using strategy: timestamp or strategy: check.
Step 2: Identify correct keyword
Only strategy: timestamp is valid; others like method, type, or mode are incorrect.
Final Answer:
strategy: timestamp -> Option A
Quick Check:
Snapshot strategy keyword = strategy [OK]
Hint: Use 'strategy' keyword to set snapshot method [OK]
Common Mistakes:
Using wrong keywords like 'method' or 'type'
Confusing snapshot strategy with model materialization
But dbt throws an error. What is the likely cause?
medium
A. The 'updated_at' key should be inside 'config' block
B. The 'strategy' value 'timestamp' is invalid
C. The 'updated_at' key is missing quotes
D. The 'updated_at' key should be 'updated_at_column'
Solution
Step 1: Check snapshot config keys for timestamp strategy
For 'timestamp' strategy, the correct key is updated_at_column, not updated_at.
Step 2: Identify the error cause
Using updated_at causes dbt to error because it expects updated_at_column.
Final Answer:
The 'updated_at' key should be 'updated_at_column' -> Option D
Quick Check:
Timestamp strategy key = updated_at_column [OK]
Hint: Use 'updated_at_column' key for timestamp strategy [OK]
Common Mistakes:
Using 'updated_at' instead of 'updated_at_column'
Misplacing keys outside config block
Assuming strategy value is wrong
5. You want to track changes in a product price over time using dbt snapshots. The source table has columns product_id, price, and last_updated. Which snapshot config is best to capture price changes accurately?
hard
A. strategy: timestamp with updated_at_column: last_updated
B. strategy: check with check_cols: ['price']
C. strategy: timestamp with updated_at_column: price
D. strategy: check with check_cols: ['last_updated']
Solution
Step 1: Understand the difference between timestamp and check strategies
Timestamp strategy uses a datetime column to detect changes; check strategy compares specified columns directly.
Step 2: Analyze columns for tracking price changes
Price changes may not always update 'last_updated' reliably, so checking 'price' column directly is safer.
Step 3: Choose the best config
Using strategy: check with check_cols: ['price'] ensures any price change triggers a new snapshot version.
Final Answer:
strategy: check with check_cols: ['price'] -> Option B
Quick Check:
Check strategy on price column = accurate price tracking [OK]
Hint: Use check strategy on price column for accurate tracking [OK]
Common Mistakes:
Using timestamp on a non-datetime column
Relying on last_updated which may be unreliable
Checking wrong columns for changes
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.