What does the AT clause do in Snowflake time travel queries?
The AT clause lets you query the exact state of a table at a specific point in time in the past.
Click to reveal answer
intermediate
How does the BEFORE clause differ from AT in Snowflake?
BEFORE returns the state of the data just before a specified time or query ID, while AT returns the state exactly at that time.
Click to reveal answer
beginner
What is the maximum time travel retention period in Snowflake by default?
By default, Snowflake retains historical data for 1 day (24 hours) for time travel queries.
Click to reveal answer
intermediate
Write a simple Snowflake query to get the state of a table named orders exactly 2 hours ago.
SELECT * FROM orders AT (TIMESTAMP => DATEADD(hour, -2, CURRENT_TIMESTAMP()));
Click to reveal answer
beginner
Why is querying historical data useful in cloud data warehouses like Snowflake?
It helps recover lost or changed data, audit changes, and analyze past states without restoring backups.
Click to reveal answer
What does the AT clause in Snowflake time travel do?
ADeletes data at a specified time
BShows data before a specified past time
CShows current data only
DShows data exactly at a specified past time
✗ Incorrect
AT returns the exact state of data at a given past timestamp.
Which clause returns data just before a specified time in Snowflake?
AAT
BSINCE
CBEFORE
DAFTER
✗ Incorrect
BEFORE returns the state of data immediately before the specified time.
What is the default time travel retention period in Snowflake?
A12 hours
B24 hours
C1 hour
D7 days
✗ Incorrect
Snowflake retains historical data for 24 hours by default.
Which of these is a valid Snowflake query to get data 30 minutes ago?
ASELECT * FROM table AT (TIMESTAMP => DATEADD(minute, -30, CURRENT_TIMESTAMP()));
BSELECT * FROM table BEFORE (TIMESTAMP => DATEADD(minute, -30, CURRENT_TIMESTAMP()));
CSELECT * FROM table SINCE (TIMESTAMP => DATEADD(minute, -30, CURRENT_TIMESTAMP()));
DSELECT * FROM table AFTER (TIMESTAMP => DATEADD(minute, -30, CURRENT_TIMESTAMP()));
✗ Incorrect
AT with DATEADD gets the exact state at 30 minutes ago.
Why use Snowflake time travel to query historical data?
ATo recover or audit past data states
BTo delete old data
CTo speed up current queries
DTo create new tables
✗ Incorrect
Time travel helps recover or audit data as it was in the past.
Explain how you would use the AT and BEFORE clauses in Snowflake to query historical data.
Think about recovering data or auditing changes.
You got /3 concepts.
Describe a real-life scenario where querying historical data with Snowflake time travel would be helpful.
Imagine you lost some important data or want to check what changed.
You got /3 concepts.
Practice
(1/5)
1. What does the AT clause do when querying historical data in Snowflake?
easy
A. Shows data exactly at a specified point in time
B. Shows data after a specified point in time
C. Shows data before a specified point in time
D. Shows the latest data ignoring time
Solution
Step 1: Understand the purpose of AT clause
The AT clause is used to query data as it existed exactly at a specific timestamp.
Step 2: Compare with other time clauses
Unlike BEFORE, which shows data just before a time, AT shows the exact snapshot at that time.
Final Answer:
Shows data exactly at a specified point in time -> Option A
Quick Check:
AT = exact time snapshot [OK]
Hint: Remember: AT means exact time snapshot, not before or after [OK]
Common Mistakes:
Confusing AT with BEFORE clause
Thinking AT shows data after the time
Assuming AT ignores time and shows latest data
2. Which of the following is the correct syntax to query a table named sales as it was exactly at timestamp '2024-01-01 10:00:00' using Snowflake's time travel feature?
easy
A. SELECT * FROM sales AT '2024-01-01 10:00:00';
B. SELECT * FROM sales AT (TIMESTAMP => '2024-01-01 10:00:00'; )
C. SELECT * FROM sales AT (TIMESTAMP => '2024-01-01 10:00:00')
D. SELECT * FROM sales BEFORE (TIMESTAMP => '2024-01-01 10:00:00');
Solution
Step 1: Identify correct syntax for AT clause
Snowflake requires the AT clause with parentheses and the keyword TIMESTAMP => for time travel queries.
Step 2: Check syntax details
SELECT * FROM sales AT (TIMESTAMP => '2024-01-01 10:00:00') correctly uses AT (TIMESTAMP => '2024-01-01 10:00:00') without a trailing semicolon inside the query string.
Final Answer:
SELECT * FROM sales AT (TIMESTAMP => '2024-01-01 10:00:00') -> Option C
Quick Check:
Correct AT syntax = SELECT * FROM sales AT (TIMESTAMP => '2024-01-01 10:00:00') [OK]
Hint: Use AT (TIMESTAMP => 'timestamp') with parentheses for time travel [OK]
3. Given the table orders with changes over time, what will the following query return?
SELECT COUNT(*) FROM orders BEFORE (TIMESTAMP => '2024-03-01 12:00:00');
medium
A. Count of rows just before '2024-03-01 12:00:00'
B. Count of rows after '2024-03-01 12:00:00'
C. Count of rows exactly at '2024-03-01 12:00:00'
D. Count of all current rows ignoring time
Solution
Step 1: Understand BEFORE clause behavior
The BEFORE clause returns data as it existed just before the specified timestamp.
Step 2: Apply to COUNT query
The query counts rows in orders table as they were immediately before '2024-03-01 12:00:00'.
Final Answer:
Count of rows just before '2024-03-01 12:00:00' -> Option A
Quick Check:
BEFORE = data just before time [OK]
Hint: BEFORE means data snapshot just before the timestamp [OK]
Common Mistakes:
Confusing BEFORE with AT clause
Assuming BEFORE returns data after the timestamp
Thinking BEFORE returns current data
4. You wrote this query but got a syntax error:
SELECT * FROM customers AT TIMESTAMP => '2024-05-01 09:00:00';
What is the likely cause?
medium
A. Table name should be in quotes
B. Missing parentheses around the TIMESTAMP clause
C. Timestamp format is incorrect
D. Using BEFORE instead of AT
Solution
Step 1: Check syntax for AT clause
The AT clause requires parentheses around the TIMESTAMP => '...' part.
Step 2: Identify missing parentheses
The query misses parentheses, causing a syntax error.
Final Answer:
Missing parentheses around the TIMESTAMP clause -> Option B
Quick Check:
AT clause needs parentheses [OK]
Hint: Always wrap TIMESTAMP clause in parentheses after AT [OK]
Common Mistakes:
Omitting parentheses around TIMESTAMP
Confusing syntax with BEFORE clause
Incorrect timestamp format causing error
5. You want to compare the number of rows in the transactions table exactly at '2024-04-15 08:00:00' and just before that time. Which pair of queries correctly achieves this?
hard
A. SELECT COUNT(*) FROM transactions BEFORE (TIMESTAMP => '2024-04-15 08:00:00'); SELECT COUNT(*) FROM transactions AT TIMESTAMP => '2024-04-15 08:00:00');
B. SELECT COUNT(*) FROM transactions BEFORE (TIMESTAMP => '2024-04-15 08:00:00'); SELECT COUNT(*) FROM transactions AFTER (TIMESTAMP => '2024-04-15 08:00:00');
C. SELECT COUNT(*) FROM transactions AT (TIMESTAMP => '2024-04-15 08:00:00'); SELECT COUNT(*) FROM transactions AT (TIMESTAMP => '2024-04-15 07:59:59');
D. SELECT COUNT(*) FROM transactions AT (TIMESTAMP => '2024-04-15 08:00:00'); SELECT COUNT(*) FROM transactions BEFORE (TIMESTAMP => '2024-04-15 08:00:00');
Solution
Step 1: Identify query for exact time
Use AT (TIMESTAMP => '2024-04-15 08:00:00') to get data exactly at that timestamp.
Step 2: Identify query for just before time
Use BEFORE (TIMESTAMP => '2024-04-15 08:00:00') to get data just before that timestamp.
Step 3: Verify option matches both queries
SELECT COUNT(*) FROM transactions AT (TIMESTAMP => '2024-04-15 08:00:00'); SELECT COUNT(*) FROM transactions BEFORE (TIMESTAMP => '2024-04-15 08:00:00'); correctly uses AT and BEFORE clauses as required.
Final Answer:
SELECT COUNT(*) FROM transactions AT (TIMESTAMP => '2024-04-15 08:00:00'); SELECT COUNT(*) FROM transactions BEFORE (TIMESTAMP => '2024-04-15 08:00:00'); -> Option D
Quick Check:
AT = exact, BEFORE = just before [OK]
Hint: Use AT for exact time, BEFORE for just before time [OK]
Common Mistakes:
Swapping AT and BEFORE clauses
Using AFTER which is invalid in Snowflake time travel
Using two AT queries with different timestamps
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.