Bird
Raised Fist0
dbtdata~5 mins

Variables and control flow in dbt - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a variable in dbt and how is it used?
A variable in dbt is a named value that you can set and reuse in your models or macros. It helps make your code flexible by allowing you to change values without editing the whole code.
Click to reveal answer
beginner
How do you define and use an if-else control flow in dbt?
In dbt, you use Jinja templating for control flow. An if-else looks like: {% if condition %} do something {% else %} do something else {% endif %}. It helps run different code based on conditions.
Click to reveal answer
beginner
Explain the purpose of the 'set' statement in dbt.
The 'set' statement assigns a value to a variable inside a dbt model or macro. For example, {% set my_var = 10 %} stores 10 in my_var for later use in the code.
Click to reveal answer
intermediate
What is the difference between 'if' and 'elif' in dbt control flow?
'if' starts a condition check. 'elif' (else if) checks another condition only if the previous 'if' was false. It helps check multiple conditions in order.
Click to reveal answer
intermediate
How can you use variables to make dbt models more dynamic?
You can pass variables to dbt models or macros to change behavior without changing code. For example, use a variable to filter data by date or region dynamically.
Click to reveal answer
Which syntax correctly sets a variable named 'threshold' to 100 in dbt?
A{% set threshold = 100 %}
Bthreshold = 100
C{{ set threshold = 100 }}
Dlet threshold = 100
What does the following dbt code do? {% if is_active %} SELECT * FROM users {% else %} SELECT * FROM guests {% endif %}
AAlways selects from users table
BSelects from users if is_active is true, else from guests
CSelects from guests table only
DThrows an error because of syntax
How do you check multiple conditions in dbt control flow?
AUsing if, elif, and else blocks
BUsing multiple if statements without else
CUsing switch-case statements
DUsing only else statements
Which of these is NOT a valid way to use variables in dbt?
APassing variables to macros
BUsing variables to filter data
CChanging variable values during model execution
DSetting variables with {% set %} statement
What happens if the condition in an if statement is false and there is no else block?
ACode inside if runs twice
BCode inside if runs anyway
CError is thrown
DCode inside if is skipped
Explain how variables and control flow work together in dbt to make models flexible.
Think about how you can change model behavior without rewriting code.
You got /4 concepts.
    Describe a real-life example where you would use variables and if-else in a dbt model.
    Imagine you want to run different queries based on user input or environment.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the {% set %} statement do in dbt?
      easy
      A. It deletes a table from the database.
      B. It runs a SQL query directly.
      C. It defines a new model in dbt.
      D. It creates a variable to store a value for reuse.

      Solution

      1. Step 1: Understand the purpose of {% set %}

        The {% set %} statement in dbt is used to create a variable that holds a value.
      2. Step 2: Identify its use in code reuse

        This variable can then be reused multiple times in your dbt project, making code cleaner and easier to maintain.
      3. Final Answer:

        It creates a variable to store a value for reuse. -> Option D
      4. Quick Check:

        {% set %} creates variables [OK]
      Hint: Remember: {% set %} means 'store this value' [OK]
      Common Mistakes:
      • Thinking {% set %} runs SQL directly
      • Confusing it with model creation
      • Assuming it deletes data
      2. Which of the following is the correct syntax to create a variable named my_var with value 10 in dbt?
      easy
      A. {% set my_var = 10 %}
      B. {% var my_var = 10 %}
      C. {{ set my_var = 10 }}
      D. {% set 'my_var' = 10 %}

      Solution

      1. Step 1: Recall dbt variable syntax

        In dbt, variables are created using the Jinja syntax: {% set variable_name = value %}.
      2. Step 2: Check each option

        {% set my_var = 10 %} matches the correct syntax exactly. Options B and C use wrong keywords or delimiters. {% set 'my_var' = 10 %} incorrectly quotes the variable name.
      3. Final Answer:

        {% set my_var = 10 %} -> Option A
      4. Quick Check:

        Correct variable syntax uses {% set %} [OK]
      Hint: Use {% set var = value %} without quotes around var [OK]
      Common Mistakes:
      • Using {{ }} instead of {% %} for setting variables
      • Quoting variable names incorrectly
      • Using wrong keywords like var
      3. Given the following dbt code snippet, what will be the output of {{ greeting }}?
      {% set hour = 15 %}
      {% if hour < 12 %}
        {% set greeting = 'Good morning' %}
      {% elif hour < 18 %}
        {% set greeting = 'Good afternoon' %}
      {% else %}
        {% set greeting = 'Good evening' %}
      {% endif %}
      {{ greeting }}
      medium
      A. Good morning
      B. Good evening
      C. Good afternoon
      D. No output (error)

      Solution

      1. Step 1: Evaluate the value of hour

        The variable hour is set to 15.
      2. Step 2: Check the if-elif-else conditions

        Since 15 is not less than 12, the first condition fails. It is less than 18, so the second condition is true, setting greeting to 'Good afternoon'.
      3. Final Answer:

        Good afternoon -> Option C
      4. Quick Check:

        15 < 18 -> 'Good afternoon' [OK]
      Hint: Check conditions in order; first true branch runs [OK]
      Common Mistakes:
      • Assuming hour 15 is morning
      • Ignoring elif and jumping to else
      • Thinking variable is undefined
      4. Identify the error in this dbt snippet:
      {% set total = 0 %}
      {% for i in range(3) %}
        {% set total = total + i %}
      {% endfor %}
      {{ total }}
      medium
      A. The range function is not available in dbt Jinja.
      B. Variables cannot be updated inside a loop.
      C. The loop syntax is incorrect; missing parentheses.
      D. The variable total should be declared with var.

      Solution

      1. Step 1: Understand Jinja in dbt limitations

        dbt uses Jinja templating, which does not support Python's range() function directly.
      2. Step 2: Identify the error cause

        Using range(3) will cause an error because range is undefined in this context.
      3. Final Answer:

        The range function is not available in dbt Jinja. -> Option A
      4. Quick Check:

        No range() in dbt Jinja [OK]
      Hint: Remember: Jinja loops use lists, not Python range() [OK]
      Common Mistakes:
      • Assuming Python functions work in Jinja
      • Trying to update variables inside loops without workarounds
      • Using wrong loop syntax
      5. You want to create a dbt model that uses a variable env to switch between two schemas: dev_schema if env is 'dev', else prod_schema. Which code snippet correctly implements this control flow?
      hard
      A. {% set schema = 'dev_schema' if env == 'dev' else 'prod_schema' %} SELECT * FROM {{ schema }}.my_table
      B. {% if env == 'dev' %} {% set schema = 'dev_schema' %} {% else %} {% set schema = 'prod_schema' %} {% endif %} SELECT * FROM {{ schema }}.my_table
      C. {% set schema = env == 'dev' and 'dev_schema' or 'prod_schema' %} SELECT * FROM {{ schema }}.my_table
      D. {% set schema = 'prod_schema' %} {% if env == 'dev' %} {% set schema = 'dev_schema' %} SELECT * FROM {{ schema }}.my_table

      Solution

      1. Step 1: Understand conditional variable assignment in dbt

        dbt supports control flow with {% if %} and {% else %} blocks to set variables based on conditions.
      2. Step 2: Check each option for correctness

        {% if env == 'dev' %} {% set schema = 'dev_schema' %} {% else %} {% set schema = 'prod_schema' %} {% endif %} SELECT * FROM {{ schema }}.my_table uses proper if-else blocks to set schema correctly before using it in the query. {% set schema = 'dev_schema' if env == 'dev' else 'prod_schema' %} SELECT * FROM {{ schema }}.my_table uses Python-style inline if which is not supported in Jinja. {% set schema = env == 'dev' and 'dev_schema' or 'prod_schema' %} SELECT * FROM {{ schema }}.my_table uses a Python boolean expression which is not valid in Jinja. {% set schema = 'prod_schema' %} {% if env == 'dev' %} {% set schema = 'dev_schema' %} SELECT * FROM {{ schema }}.my_table sets schema first then tries to reset inside if but the query is inside the if block, causing scope issues.
      3. Final Answer:

        Option B correctly uses if-else to set schema and then queries it. -> Option B
      4. Quick Check:

        Use {% if %}...{% else %}...{% endif %} for control flow [OK]
      Hint: Use full if-else blocks to set variables, not inline Python [OK]
      Common Mistakes:
      • Trying Python inline if syntax in Jinja
      • Placing SQL inside if blocks incorrectly
      • Not setting variable before using it
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard