Bird
Raised Fist0
dbtdata~10 mins

dbt project structure - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to specify the main directory where dbt models are stored.

dbt
models_dir = "[1]"
Drag options to blanks, or click blank then click option'
Aconfigs
Bdata
Cscripts
Dmodels
Attempts:
3 left
šŸ’” Hint
Common Mistakes
Using 'data' or 'scripts' instead of 'models' for model files.
2fill in blank
medium

Complete the code to define the file that contains project metadata in dbt.

dbt
project_file = "[1]"
Drag options to blanks, or click blank then click option'
Adbt_project.yml
Bmanifest.json
Cprofiles.yml
Dschema.yml
Attempts:
3 left
šŸ’” Hint
Common Mistakes
Confusing profiles.yml with dbt_project.yml.
3fill in blank
hard

Fix the error in the code to correctly specify the directory for tests in a dbt project.

dbt
tests_path = "[1]"
Drag options to blanks, or click blank then click option'
Atest
Btests
Ctesting
Dmodel_tests
Attempts:
3 left
šŸ’” Hint
Common Mistakes
Using singular 'test' instead of 'tests'.
4fill in blank
hard

Fill both blanks to create a dictionary that maps dbt project folders to their purpose.

dbt
folders = {"models": "[1]", "tests": "[2]"}
Drag options to blanks, or click blank then click option'
ASQL transformations
BYAML configurations
CTest definitions
DRaw data files
Attempts:
3 left
šŸ’” Hint
Common Mistakes
Mixing up tests with configurations or raw data.
5fill in blank
hard

Fill all three blanks to complete the dictionary comprehension that lists model names with their file extensions if they are SQL files.

dbt
model_files = {file_name: file_name[1] for file_name in files if file_name.[2]('.sql') and 'test' [3] file_name}
Drag options to blanks, or click blank then click option'
A[-4:]
Bendswith
Cnot in
Dstartswith
Attempts:
3 left
šŸ’” Hint
Common Mistakes
Using 'startswith' instead of 'endswith' for file extensions.
Incorrect slicing for file extension.
Wrong operator for excluding test files.

Practice

(1/5)
1. Which folder in a dbt project typically contains SQL files that define your data transformations?
easy
A. snapshots/
B. models/
C. macros/
D. tests/

Solution

  1. Step 1: Understand folder purposes

    The models/ folder is where SQL files for data transformations live.
  2. Step 2: Identify correct folder for SQL models

    Other folders like macros/ hold reusable code, snapshots/ hold snapshot definitions, and tests/ hold test files.
  3. Final Answer:

    models/ -> Option B
  4. Quick Check:

    Data transformations = models/ folder [OK]
Hint: Models folder holds SQL transformations [OK]
Common Mistakes:
  • Confusing macros/ with models/
  • Thinking snapshots/ holds models
  • Assuming tests/ contains SQL models
2. Which of the following is the correct name for the main configuration file in a dbt project?
easy
A. dbt_project.yml
B. dbt_config.yml
C. project.yaml
D. dbt_settings.yml

Solution

  1. Step 1: Recall main config file name

    The main configuration file for dbt projects is named dbt_project.yml.
  2. Step 2: Verify other options

    Other options like dbt_config.yml or dbt_settings.yml are incorrect names.
  3. Final Answer:

    dbt_project.yml -> Option A
  4. Quick Check:

    Main config file = dbt_project.yml [OK]
Hint: Main config file always named dbt_project.yml [OK]
Common Mistakes:
  • Using dbt_config.yml instead
  • Confusing with generic project.yaml
  • Assuming settings file controls project
3. Given this dbt project structure snippet:
my_dbt_project/
ā”œā”€ā”€ models/
│   ā”œā”€ā”€ customers.sql
│   └── orders.sql
ā”œā”€ā”€ macros/
│   └── date_utils.sql
└── dbt_project.yml

Which file would you edit to add a reusable SQL function?
medium
A. models/customers.sql
B. dbt_project.yml
C. macros/date_utils.sql
D. models/orders.sql

Solution

  1. Step 1: Identify purpose of macros/ folder

    The macros/ folder holds reusable SQL functions and macros.
  2. Step 2: Locate reusable function file

    The file macros/date_utils.sql is the right place to add reusable SQL functions.
  3. Final Answer:

    macros/date_utils.sql -> Option C
  4. Quick Check:

    Reusable SQL functions = macros/ folder [OK]
Hint: Reusable SQL code goes in macros/ folder [OK]
Common Mistakes:
  • Adding functions inside models/ files
  • Editing dbt_project.yml for SQL code
  • Confusing macros/ with models/
4. You see this error when running dbt: Compilation Error: Could not find model 'sales_summary'. Which is the most likely cause related to project structure?
medium
A. The 'sales_summary.sql' file is missing from the models/ folder.
B. The 'sales_summary.sql' file is inside the macros/ folder.
C. The dbt_project.yml file is missing.
D. The snapshots/ folder contains 'sales_summary.sql'.

Solution

  1. Step 1: Understand error meaning

    The error means dbt cannot find the model named 'sales_summary'.
  2. Step 2: Check model file location

    Models must be in the models/ folder. If the file is missing there, dbt can't compile it.
  3. Final Answer:

    The 'sales_summary.sql' file is missing from the models/ folder. -> Option A
  4. Quick Check:

    Missing model file in models/ causes compilation error [OK]
Hint: Models must be in models/ folder to compile [OK]
Common Mistakes:
  • Placing model files in macros/ folder
  • Assuming missing dbt_project.yml causes this error
  • Confusing snapshots/ with models/
5. You want to organize your dbt project so that models related to customers and orders are in separate folders inside models/. How should you update your dbt_project.yml to reflect this structure?
hard
A. Add models: my_dbt_project: +materialized: view only
B. No changes needed; dbt auto-detects subfolders without config
C. Add macros: my_dbt_project: customers: +materialized: table
D. Add models: my_dbt_project: customers: +materialized: table orders: +materialized: table

Solution

  1. Step 1: Understand folder-specific config in dbt_project.yml

    You can specify configs per subfolder inside models/ by nesting them under your project name.
  2. Step 2: Define separate configs for customers and orders folders

    Adding customers: and orders: keys with materialization settings applies configs to those subfolders.
  3. Final Answer:

    Add models: my_dbt_project: customers: +materialized: table orders: +materialized: table -> Option D
  4. Quick Check:

    Use nested keys in dbt_project.yml for subfolder configs [OK]
Hint: Use nested keys in dbt_project.yml for subfolder configs [OK]
Common Mistakes:
  • Not nesting configs under project name
  • Configuring macros instead of models
  • Assuming no config needed for subfolders