0
0
dbtdata~20 mins

dbt-utils (surrogate_key, pivot, unpivot) - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
dbt-utils Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of surrogate_key with multiple columns
Given the following dbt SQL snippet using dbt_utils.surrogate_key, what is the output of the surrogate key for the row where id = 2 and date = '2024-01-01'? Assume the hash function produces lowercase hex strings.

select {{ dbt_utils.surrogate_key(['id', 'date']) }} as sk from (select 2 as id, '2024-01-01' as date) as t
dbt
select {{ dbt_utils.surrogate_key(['id', 'date']) }} as sk from (select 2 as id, '2024-01-01' as date) as t
A'2|2024-01-01' hashed as 'e3b0c44298fc1c149afbf4c8996fb924'
B'2|2024-01-01' hashed as 'a7f5f35426b927411fc9231b56382173'
C'2-2024-01-01' hashed as 'd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2'
D'2,2024-01-01' hashed as 'a7f5f35426b927411fc9231b56382173'
Attempts:
2 left
💡 Hint
The surrogate_key macro concatenates columns with a pipe '|' and hashes the string.
data_output
intermediate
2:00remaining
Result of pivot macro on sales data
Consider a table sales with columns region, product, and sales_amount. Using dbt_utils.pivot to pivot product values into columns with sum of sales_amount, what is the resulting table output for this data?

Data:
region | product | sales_amount
North | A | 100
North | B | 150
South | A | 200
South | B | 50
dbt
select * from {{ dbt_utils.pivot('sales', 'product', 'sales_amount', 'region', 'sum') }}
A[{'region': 'North', 'A': 100, 'B': 0}, {'region': 'South', 'A': 200, 'B': 50}]
B[{'region': 'North', 'A': 250, 'B': 0}, {'region': 'South', 'A': 0, 'B': 200}]
C[{'region': 'North', 'A': 100, 'B': 150}, {'region': 'South', 'A': 200, 'B': 50}]
D[{'region': 'North', 'A': 100, 'B': 150}, {'region': 'South', 'A': 50, 'B': 200}]
Attempts:
2 left
💡 Hint
Pivot creates columns for each product with aggregated sales_amount per region.
🔧 Debug
advanced
2:00remaining
Error raised by unpivot macro misuse
What error will this dbt SQL code raise?

select * from {{ dbt_utils.unpivot('sales', ['A', 'B'], 'product', 'sales_amount') }}

Assume sales table has columns region, A, B.
dbt
select * from {{ dbt_utils.unpivot('sales', ['A', 'B'], 'product', 'sales_amount') }}
ARuntime error: column 'region' not found in unpivoted output
BNo error, returns unpivoted table with columns region, product, sales_amount
CSyntax error: invalid macro usage
DCompilation error: missing group by columns
Attempts:
2 left
💡 Hint
Unpivot requires specifying columns to keep besides the unpivoted columns.
🚀 Application
advanced
2:00remaining
Using surrogate_key in incremental model
You want to create an incremental dbt model that uses dbt_utils.surrogate_key on columns user_id and event_date to uniquely identify rows. Which of the following SQL snippets correctly creates the surrogate key and uses it as the primary key for incremental updates?
Aselect *, {{ dbt_utils.surrogate_key(['user_id', 'event_date']) }} as id from source_table
Bselect {{ dbt_utils.surrogate_key(['user_id', 'event_date']) }} as id, * from source_table
Cselect *, {{ dbt_utils.surrogate_key(['user_id', 'event_date']) }} as surrogate_key from source_table
Dselect {{ dbt_utils.surrogate_key(['user_id', 'event_date']) }} as surrogate_key, * from source_table
Attempts:
2 left
💡 Hint
The surrogate key should be added as a new column, not replace existing columns.
🧠 Conceptual
expert
2:00remaining
Understanding pivot and unpivot transformations
Which statement correctly describes the relationship between dbt_utils.pivot and dbt_utils.unpivot macros?
APivot aggregates data without changing shape; unpivot splits columns into multiple tables.
BPivot removes duplicate rows; unpivot adds calculated columns.
CPivot and unpivot both create new columns but differ in aggregation methods.
DPivot converts rows into columns; unpivot converts columns back into rows, reversing the pivot operation.
Attempts:
2 left
💡 Hint
Think about how data shape changes with pivot and unpivot.