What does the 'One model per source table' rule mean in dbt?
It means creating one dbt model for each source table to keep transformations simple and organized.
Click to reveal answer
beginner
Why is it helpful to have one model per source table?
It makes debugging easier, improves clarity, and helps track data lineage clearly.
Click to reveal answer
intermediate
How does the 'One model per source table' rule affect complex transformations?
Complex transformations are built by layering simple models, each based on one source table, making the process easier to manage.
Click to reveal answer
beginner
What is a common mistake when not following the 'One model per source table' rule?
Combining multiple source tables in one model can make the code hard to read and maintain.
Click to reveal answer
intermediate
How does this rule help with testing in dbt?
Testing is simpler because each model corresponds to one source table, so tests can focus on one data set at a time.
Click to reveal answer
What is the main benefit of having one model per source table in dbt?
AReduces the number of models needed
BSimplifies debugging and improves clarity
CCombines all data into one place
DAvoids writing SQL code
✗ Incorrect
Having one model per source table keeps transformations simple and makes debugging easier.
What happens if you combine multiple source tables in one dbt model?
AThe code can become complex and hard to read
BIt automatically improves performance
CThe model becomes easier to maintain
DIt reduces the need for testing
✗ Incorrect
Combining multiple source tables in one model can make the code complex and harder to maintain.
How does the 'One model per source table' rule help with data lineage?
AIt hides the source tables
BIt makes data lineage unclear
CIt clearly shows how data flows from source to model
DIt removes the need for documentation
✗ Incorrect
Each model corresponds to one source table, making it easy to track data lineage.
Which of these is a good practice when following the 'One model per source table' rule?
ACreate one model that joins all source tables
BWrite all transformations in one SQL file
CAvoid creating models for source tables
DCreate separate models for each source table
✗ Incorrect
Creating separate models for each source table keeps the project organized and easier to manage.
How does this rule affect testing in dbt?
ATesting can focus on one source table at a time
BTesting becomes more complicated
CTesting is not needed
DTesting must cover all tables together
✗ Incorrect
Testing is simpler because each model corresponds to one source table, allowing focused tests.
Explain the 'One model per source table' rule and why it is important in dbt projects.
Think about how this rule helps keep your project clean and easy to understand.
You got /4 concepts.
Describe how following the 'One model per source table' rule impacts testing and maintenance.
Consider how simple models help you find and fix problems faster.
You got /4 concepts.
Practice
(1/5)
1. What is the main reason for following the one model per source table rule in dbt?
easy
A. To avoid using source tables in models
B. To combine multiple source tables into one model
C. To write fewer SQL queries
D. To keep models simple and easy to understand
Solution
Step 1: Understand the rule and its benefits
The rule encourages creating one dbt model for each source table to keep things simple and clear. This approach helps with clarity, debugging, and teamwork by avoiding complex combined models.
Final Answer:
To keep models simple and easy to understand -> Option D
Quick Check:
One model per source table = simplicity [OK]
Hint: One model per source table means simpler, clearer models [OK]
Common Mistakes:
Thinking it means combining tables into one model
Believing it reduces the number of models
Assuming it avoids using source tables
2. Which of the following is the correct way to define a dbt model for a source table named customers?
easy
A. Create a model file named all_data.sql combining all source tables
B. Create a model file named customers.sql with a SELECT from the source table
C. Create a model file named customers.sql but do not select from the source table
D. Create a model file named source_customers.sql without referencing the source
Solution
Step 1: Match model name to source table and reference it
Following the rule, the model file should be named after the source table, here customers.sql. The model should select data from the source table to represent it clearly.
Final Answer:
Create a model file named customers.sql with a SELECT from the source table -> Option B
Quick Check:
Model name = source table name + SELECT from source [OK]
Hint: Model file name matches source table name and selects from it [OK]
Common Mistakes:
Naming model file unrelated to source table
Not selecting from the source table
Combining multiple tables in one model
3. Given this dbt model SQL for source table orders:
select * from {{ source('sales_db', 'orders') }}
What will be the output if the source table has 100 rows?
medium
A. The model will return 100 rows identical to the source table
B. The model will return zero rows
C. The model will return 1 row with aggregated data
D. The model will cause a syntax error
Solution
Step 1: Understand the SQL query and predict output
The query selects all columns and rows from the source table orders. Since it selects all rows without filtering, the output will have the same 100 rows as the source.
Final Answer:
The model will return 100 rows identical to the source table -> Option A
Quick Check:
Select * from source = same rows [OK]
Hint: Select * from source returns all rows unchanged [OK]
Common Mistakes:
Thinking it returns zero rows
Assuming aggregation happens automatically
Expecting syntax errors from correct source() usage
4. You wrote this dbt model for source table products:
select * from source('inventory', 'products')
But dbt throws an error. What is the problem?
medium
A. Model file name does not match source table
B. Wrong source table name
C. Missing double curly braces around the source function
D. Using select * is not allowed
Solution
Step 1: Check dbt source function syntax and identify issue
The source function must be wrapped in double curly braces: {{ source(...) }}. The model uses source(...) without {{ }}, causing a syntax error.
Final Answer:
Missing double curly braces around the source function -> Option C
Quick Check:
dbt functions need {{ }} [OK]
Hint: Always wrap dbt functions in {{ }} [OK]
Common Mistakes:
Forgetting {{ }} around source()
Assuming select * is disallowed
Ignoring model file naming conventions
5. You have two source tables: customers and orders. According to the one model per source table rule, how should you organize your dbt models if you want to create a report showing total orders per customer?
hard
A. Create separate base models for customers and orders, then create a third model joining them for the report
B. Create one model combining both source tables directly without base models
C. Create a single model selecting from both source tables with UNION
D. Create only one model for orders and ignore customers
Solution
Step 1: Follow one model per source table for base models and build report model
Create one model for customers and one for orders separately to keep base models simple. Create a third model that joins these base models to calculate total orders per customer, keeping transformations clear and modular.
Final Answer:
Create separate base models for customers and orders, then create a third model joining them for the report -> Option A
Quick Check:
Base models per source + separate report model [OK]
Hint: Base models per source, then join in separate model [OK]
Common Mistakes:
Combining sources in one base model
Skipping base models and joining sources directly
Ignoring one source table
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.