Hint: Look for {% macro %} and {% endmacro %} tags [OK]
Common Mistakes:
Using SQL CREATE MACRO syntax (not dbt)
Writing Python function syntax
Using curly braces without Jinja tags
3. Given this macro definition:
{% macro select_active_users() %}
SELECT * FROM users WHERE active = true
{% endmacro %}
What will be the output SQL of this dbt model?
SELECT id, name FROM ({{ select_active_users() }})
medium
A. SELECT id, name FROM {{ select_active_users() }}
B. SELECT id, name FROM users WHERE active = true
C. Error: Macro call syntax incorrect
D. SELECT id, name FROM (SELECT * FROM users WHERE active = true)
Solution
Step 1: Understand macro expansion
The macro returns the SQL: SELECT * FROM users WHERE active = true.
Step 2: Substitute macro call in model SQL
The model SQL becomes: SELECT id, name FROM (SELECT * FROM users WHERE active = true)
Final Answer:
SELECT id, name FROM (SELECT * FROM users WHERE active = true) -> Option D
Quick Check:
Macro expands SQL inside parentheses [OK]
Hint: Macros insert SQL code where called [OK]
Common Mistakes:
Forgetting parentheses around macro SQL
Thinking macro returns table name only
Using macro call without {{ }}
4. Identify the error in this macro definition:
{% macro get_orders() %}
SELECT * FROM orders
medium
A. Macro name cannot have underscores
B. Missing {% endmacro %} tag to close the macro
C. SELECT statement must be inside double quotes
D. Macro cannot return SELECT statements
Solution
Step 1: Check macro syntax
Macros must start with {% macro %} and end with {% endmacro %} tags.
Step 2: Identify incorrect closing tag
The macro incorrectly uses instead of {% endmacro %}.
Final Answer:
Missing {% endmacro %} tag to close the macro -> Option B
Quick Check:
Macro must end with {% endmacro %} [OK]
Hint: Always close macros with {% endmacro %} [OK]
Common Mistakes:
Using HTML-like closing tags
Thinking underscores are invalid
Believing SELECT needs quotes in macros
5. You want to create a macro that accepts a table name and a column name, then returns SQL to count distinct values in that column. Which macro definition correctly achieves this?
hard
A. {% macro count_distinct(table, column) %} SELECT COUNT(DISTINCT {{ column }}) FROM {{ table }} {% endmacro %}
B. {% macro count_distinct(table, column) %} SELECT COUNT(DISTINCT column) FROM table {% endmacro %}
C. {% macro count_distinct(table, column) %} SELECT COUNT(DISTINCT '{{ column }}') FROM '{{ table }}' {% endmacro %}
D. {% macro count_distinct(table, column) %} SELECT COUNT(DISTINCT $column) FROM $table {% endmacro %}
Solution
Step 1: Understand macro parameters usage
Parameters must be inserted with {{ }} to inject SQL identifiers.
Step 2: Check each option for correct syntax
{% macro count_distinct(table, column) %} SELECT COUNT(DISTINCT {{ column }}) FROM {{ table }} {% endmacro %} correctly uses {{ column }} and {{ table }} without quotes, so SQL identifiers are injected properly.
Final Answer:
{% macro count_distinct(table, column) %} SELECT COUNT(DISTINCT {{ column }}) FROM {{ table }} {% endmacro %} -> Option A
Quick Check:
Use {{ }} to insert parameters as SQL code [OK]
Hint: Use {{ }} to insert macro parameters in SQL [OK]
Common Mistakes:
Putting parameters inside quotes (makes them strings)
Using $variable syntax (not Jinja)
Not wrapping parameters with {{ }}
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.