What is the purpose of built-in Jinja context variables in dbt?
Built-in Jinja context variables provide useful information and tools automatically available inside dbt models and macros to help you write dynamic SQL and control logic.
Click to reveal answer
beginner
What does the this variable represent in dbt's Jinja context?
this refers to the current model or resource being compiled, including its database, schema, and identifier. It helps build fully qualified table names.
Click to reveal answer
intermediate
How can the config variable be used in dbt models?
config allows you to set model configurations dynamically inside your SQL or macros, such as materialization type or tags.
Click to reveal answer
intermediate
Explain the use of the var variable in dbt Jinja context.
var lets you access user-defined variables passed from the command line or dbt_project.yml, enabling parameterized models.
Click to reveal answer
intermediate
What information does the target variable provide in dbt?
target contains details about the current environment like database, schema, and type of connection, useful for environment-specific logic.
Click to reveal answer
Which built-in Jinja variable in dbt gives you the current model's full name including database and schema?
Athis
Bvar
Cconfig
Dtarget
✗ Incorrect
The this variable represents the current model or resource with its full database, schema, and identifier.
How do you access user-defined variables passed to dbt models?
Ausing var
Busing target
Cusing this
Dusing config
✗ Incorrect
The var variable allows access to user-defined variables passed from the command line or dbt_project.yml.
Which variable would you use to write environment-specific logic in dbt?
Athis
Btarget
Cvar
Dconfig
✗ Incorrect
The target variable contains information about the current environment, like database and schema.
What is the main use of the config variable in dbt models?
ATo access environment variables
BTo get the current model name
CTo set model configurations dynamically
DTo pass user variables
✗ Incorrect
config is used to set model configurations like materialization inside SQL or macros.
True or False: The this variable can be used to build fully qualified table names.
AOnly in tests
BFalse
COnly in macros
DTrue
✗ Incorrect
True. this includes database, schema, and identifier, so it helps build fully qualified names.
Describe the role of the built-in Jinja context variables this, var, and target in dbt.
Think about how these variables help customize SQL based on model and environment.
You got /3 concepts.
How can the config variable be used to change model behavior in dbt?
Consider how you might want to change how a model runs without changing the whole project.
You got /3 concepts.
Practice
(1/5)
1. What does the built-in Jinja context variable run_started_at provide in dbt?
easy
A. The total number of models in the project
B. The name of the current model being executed
C. The timestamp when the current dbt run started
D. The database connection string
Solution
Step 1: Understand the purpose of run_started_at
This variable holds the timestamp marking the start of the dbt run.
Step 2: Compare with other options
Other options describe unrelated information like model name or connection details.
Final Answer:
The timestamp when the current dbt run started -> Option C
Quick Check:
run_started_at = Timestamp [OK]
Hint: Remember: run_started_at = run start time [OK]
Common Mistakes:
Confusing run_started_at with model name
Thinking it gives database info
Assuming it counts models
2. Which of the following is the correct syntax to access the current model name using a built-in Jinja context variable in dbt?
easy
A. {{ this.name }}
B. {{ model_name }}
C. {{ this.model }}
D. {{ current_model }}
Solution
Step 1: Recall the correct variable for current model
The variable this refers to the current model, and this.name gives its name.
Step 2: Check syntax correctness
Only {{ this.name }} correctly accesses the model name in Jinja syntax.
Final Answer:
{{ this.name }} -> Option A
Quick Check:
Current model name = {{ this.name }} [OK]
Hint: Use this.name for current model name [OK]
Common Mistakes:
Using undefined variables like model_name
Missing dot notation after this
Using incorrect variable names
3. Given the following dbt Jinja code snippet, what will be the output of {{ invocation_id }}?
{% set id = invocation_id %}{{ id }}
medium
A. The number of models executed so far
B. A unique identifier string for the current dbt run
C. The current timestamp
D. An error because invocation_id is undefined
Solution
Step 1: Understand what invocation_id represents
This variable holds a unique string ID for the current dbt run invocation.
Step 2: Analyze the code snippet
The code sets id to invocation_id and then outputs it, so it prints the unique run ID.
Final Answer:
A unique identifier string for the current dbt run -> Option B
Quick Check:
invocation_id = Unique run ID [OK]
Hint: invocation_id = unique run ID string [OK]
Common Mistakes:
Thinking it counts models
Confusing with timestamps
Assuming it causes an error
4. You wrote this dbt Jinja code but get an error:
{{ run_started_at.strftime('%Y-%m-%d') }}
. What is the likely cause?
medium
A. run_started_at is a string, not a datetime object, so strftime fails
B. Missing parentheses after run_started_at
C. strftime is not a valid method in Jinja
D. You must use single curly braces instead of double
Solution
Step 1: Check the type of run_started_at
In dbt, run_started_at is a string timestamp, not a datetime object.
Step 2: Understand why strftime fails
Since it's a string, calling strftime (a datetime method) causes an error.
Final Answer:
run_started_at is a string, not a datetime object, so strftime fails -> Option A
Quick Check:
String type blocks datetime methods [OK]
Hint: run_started_at is string; convert before datetime methods [OK]
Common Mistakes:
Assuming run_started_at is datetime
Using single braces for Jinja variables
Thinking strftime is unsupported in Jinja
5. You want to create a dbt model that adds a column with the current run's unique ID and the run start date in 'YYYY-MM-DD' format. Which Jinja code snippet correctly uses built-in context variables to achieve this?
hard
A. {% set run_date = run_started_at.split('-')[0] %}
SELECT *, '{{ invocation_id }}' AS run_id, '{{ run_date }}' AS run_date FROM {{ this }}
B. {% set run_date = run_started_at.strftime('%Y-%m-%d') %}
SELECT *, '{{ invocation_id }}' AS run_id, '{{ run_date }}' AS run_date FROM {{ this }}
C. SELECT *, '{{ invocation_id }}' AS run_id, '{{ run_started_at }}' AS run_date FROM {{ this }}
D. {% set run_date = run_started_at[:10] %}
SELECT *, '{{ invocation_id }}' AS run_id, '{{ run_date }}' AS run_date FROM {{ this }}
Solution
Step 1: Extract date from run_started_at string
Since run_started_at is a string like 'YYYY-MM-DDTHH:MM:SS', slicing the first 10 characters gets the date.
Step 2: Use invocation_id and run_date in SELECT
The snippet correctly sets run_date and uses both variables in the SELECT statement.
Step 3: Check other options for errors
{% set run_date = run_started_at.strftime('%Y-%m-%d') %}
SELECT *, '{{ invocation_id }}' AS run_id, '{{ run_date }}' AS run_date FROM {{ this }} tries to use strftime on a string (error). SELECT *, '{{ invocation_id }}' AS run_id, '{{ run_started_at }}' AS run_date FROM {{ this }} uses full timestamp, not formatted date. {% set run_date = run_started_at.split('-')[0] %}
SELECT *, '{{ invocation_id }}' AS run_id, '{{ run_date }}' AS run_date FROM {{ this }} extracts only year incorrectly.
Final Answer:
Extracts date with run_started_at[:10] and uses invocation_id -> Option D
Quick Check:
Slice string for date, use invocation_id [OK]
Hint: Slice run_started_at[:10] for date, use invocation_id [OK]
Common Mistakes:
Using strftime on string variable
Not formatting run_started_at to date
Extracting only year instead of full date
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.