What does the surrogate_key macro in dbt-utils do?
The surrogate_key macro creates a unique key by combining one or more columns. It helps identify each row uniquely, like a fingerprint for data records.
Click to reveal answer
beginner
How does the pivot macro in dbt-utils transform data?
The pivot macro turns rows into columns. It reshapes data so that unique values from one column become new columns, making data easier to compare side by side.
Click to reveal answer
beginner
What is the purpose of the unpivot macro in dbt-utils?
The unpivot macro does the opposite of pivot. It turns columns back into rows, which helps when you want to analyze data in a long, tidy format.
Click to reveal answer
intermediate
Why is using a surrogate key useful in data modeling?
Surrogate keys provide a simple, consistent way to identify rows uniquely, even if natural keys change or are missing. This helps keep data clean and relationships clear.
Click to reveal answer
intermediate
When would you use pivot and unpivot in your data transformations?
Use pivot to create wide tables for easier comparison across categories. Use unpivot to create long tables for easier filtering and aggregation.
Click to reveal answer
What does the surrogate_key macro generate in dbt-utils?
AA visualization of data
BA unique identifier combining columns
CA new table with aggregated data
DA summary statistic of a column
✗ Incorrect
The surrogate_key macro creates a unique key by combining specified columns.
Which macro would you use to turn multiple rows into columns?
Apivot
Bsurrogate_key
Cunpivot
Djoin
✗ Incorrect
The pivot macro reshapes data by turning rows into columns.
What is the main use of the unpivot macro?
ATo turn columns into rows
BTo combine columns into a single unique key
CTo filter data by a condition
DTo create a new table
✗ Incorrect
The unpivot macro converts columns back into rows.
Why might surrogate keys be preferred over natural keys?
AThey are easier to read
BThey reduce the size of the data
CThey automatically create indexes
DThey never change and are always unique
✗ Incorrect
Surrogate keys provide stable, unique identifiers even if natural keys change.
If you want to analyze data by categories side by side, which macro helps?
Asurrogate_key
Bunpivot
Cpivot
Dfilter
✗ Incorrect
The pivot macro creates columns for each category to compare data easily.
Explain how the surrogate_key macro works and why it is useful in data modeling.
Think about how you give each row a unique ID.
You got /3 concepts.
Describe the difference between pivot and unpivot macros and when to use each.
Consider how you reshape data for different analysis needs.
You got /3 concepts.
Practice
(1/5)
1. What is the main purpose of the surrogate_key macro in dbt-utils?
easy
A. To create a unique identifier by combining multiple columns
B. To convert rows into columns for summarization
C. To change column names in a table
D. To remove duplicate rows from a dataset
Solution
Step 1: Understand surrogate_key purpose
The surrogate_key macro combines values from multiple columns to create a unique ID.
Step 2: Compare with other options
Pivoting changes rows to columns, renaming columns is unrelated, and removing duplicates is different.
Final Answer:
To create a unique identifier by combining multiple columns -> Option A
Quick Check:
surrogate_key = unique ID creation [OK]
Hint: surrogate_key always combines columns to make unique IDs [OK]
Common Mistakes:
Confusing surrogate_key with pivot or unpivot
Thinking it renames columns
Assuming it removes duplicates
2. Which of the following is the correct syntax to use the pivot macro in dbt-utils?
easy
A. {% set pivoted = dbt_utils.unpivot(table=ref('sales'), column='month', value='revenue') %}
B. {% set pivoted = dbt_utils.surrogate_key(columns=['id', 'date']) %}
C. {% set pivoted = dbt_utils.pivot(table=ref('sales'), column='month', value='revenue') %}
D. {% set pivoted = dbt_utils.pivot(table='sales', row='month', value='revenue') %}
Solution
Step 1: Identify correct macro and parameters
The pivot macro requires a table, a column to pivot on, and a value column.
Step 2: Check syntax correctness
{% set pivoted = dbt_utils.pivot(table=ref('sales'), column='month', value='revenue') %} uses table=ref('sales'), column='month', and value='revenue', which is correct.
Final Answer:
{% set pivoted = dbt_utils.pivot(table=ref('sales'), column='month', value='revenue') %} -> Option C
Quick Check:
pivot syntax = table, column, value [OK]
Hint: pivot needs table, column, and value parameters [OK]
Common Mistakes:
Using unpivot macro instead of pivot
Passing wrong parameter names like 'row' instead of 'column'
Not using ref() for table argument
3. Given the following data in a table sales_data:
product | month | revenue
-------|-------|--------
A | Jan | 100
A | Feb | 150
B | Jan | 200
B | Feb | 250
What will be the output of this dbt-utils pivot macro call?
{% set pivoted = dbt_utils.pivot(table=ref('sales_data'), column='month', value='revenue') %}
medium
A. A table with columns: product, Jan, Feb and values filled with revenue
B. A table with columns: month, product, revenue repeated
C. A table with columns: product, revenue only
D. An error because pivot needs a group_by column
Solution
Step 1: Understand pivot behavior
Pivot converts unique values in the 'month' column into new columns and fills them with 'revenue' values grouped by 'product'.
Step 2: Apply to given data
For product A, Jan=100 and Feb=150; for B, Jan=200 and Feb=250. So columns are product, Jan, Feb with revenue values.
Final Answer:
A table with columns: product, Jan, Feb and values filled with revenue -> Option A
Quick Check:
pivot turns rows to columns = A table with columns: product, Jan, Feb and values filled with revenue [OK]
Hint: Pivot turns unique column values into new columns [OK]
{% set unpivoted = dbt_utils.unpivot(table=ref('sales_summary'), columns=['Jan', 'Feb'], name='month', value='revenue') %}
But you get an error. What is the most likely cause?
medium
A. The 'columns' parameter should be a string, not a list
B. The 'name' parameter must be 'column_name' instead of 'month'
C. The table reference is missing the schema
D. The 'columns' parameter must be passed as a string with comma-separated column names
Solution
Step 1: Check unpivot columns parameter format
The unpivot macro expects the columns argument as a string listing columns separated by commas, not a list.
Step 2: Identify error cause
Passing a Python list causes a syntax or runtime error; it must be a string like 'Jan, Feb'.
Final Answer:
The 'columns' parameter must be passed as a string with comma-separated column names -> Option D
Quick Check:
unpivot columns = comma-separated string [OK]
Hint: Pass columns as comma-separated string, not list, in unpivot [OK]
Common Mistakes:
Passing columns as Python list instead of string
Using wrong parameter names like 'name' instead of 'column_name'
Ignoring table reference format
5. You have a table employee_sales with columns: employee_id, region, Jan, Feb, Mar. You want to create a unique surrogate key combining employee_id and region, then unpivot the monthly sales columns into rows with columns month and sales. Which dbt-utils macros and steps should you use?
hard
A. Use only pivot macro on employee_id and region columns
B. First use surrogate_key(['employee_id', 'region']) to create ID, then unpivot(table=ref('employee_sales'), columns='Jan, Feb, Mar', name='month', value='sales')
C. Use unpivot macro first, then surrogate_key on month and sales
D. Create surrogate key by concatenating Jan, Feb, Mar columns, then pivot on region
Solution
Step 1: Create unique surrogate key
Use surrogate_key on employee_id and region to get a unique ID per employee-region.
Step 2: Unpivot monthly sales columns
Apply unpivot macro with columns='Jan, Feb, Mar', name='month', and value='sales' to convert months into rows.
Final Answer:
First use surrogate_key(['employee_id', 'region']) then unpivot with columns='Jan, Feb, Mar' -> Option B
Quick Check:
surrogate_key then unpivot = First use surrogate_key(['employee_id', 'region']) to create ID, then unpivot(table=ref('employee_sales'), columns='Jan, Feb, Mar', name='month', value='sales') [OK]
Hint: Create surrogate_key first, then unpivot monthly columns [OK]
Common Mistakes:
Using pivot instead of unpivot for monthly columns
Creating surrogate_key on month and sales columns
Concatenating month columns for surrogate_key
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.