Bird
Raised Fist0
dbtdata~5 mins

dbt project structure - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is the main purpose of the models directory in a dbt project?
The models directory holds SQL files that define transformations and create tables or views in your data warehouse.
Click to reveal answer
beginner
What file in a dbt project defines project-level configurations like name and version?
The dbt_project.yml file defines project-level settings such as the project name, version, and model configurations.
Click to reveal answer
intermediate
What is the role of the macros folder in a dbt project?
The macros folder contains reusable SQL snippets or functions that can be called inside models to avoid repetition.
Click to reveal answer
intermediate
Why do dbt projects include a tests directory?
The tests directory stores custom tests to check data quality and ensure models produce correct results.
Click to reveal answer
beginner
What is the purpose of the seeds directory in a dbt project?
The seeds directory holds CSV files that dbt can load as tables into the data warehouse for static or reference data.
Click to reveal answer
Which file in a dbt project controls the project name and version?
Adbt_project.yml
Bprofiles.yml
Cpackages.yml
Dmodels.sql
Where do you put SQL files that define data transformations in dbt?
Amodels directory
Bmacros directory
Ctests directory
Dseeds directory
What is stored in the seeds directory of a dbt project?
AProject configuration
BSQL macros
CTest scripts
DCSV files for static data
Which folder contains reusable SQL functions in dbt?
Amodels
Bmacros
Ctests
Dseeds
Why do dbt projects have a tests directory?
ATo store CSV files
BTo store project settings
CTo store data quality checks
DTo store SQL macros
Describe the main folders in a dbt project and their purposes.
Think about where you put SQL code, reusable parts, tests, static data, and settings.
You got /5 concepts.
    Explain how the dbt_project.yml file fits into the dbt project structure.
    It is the main settings file for the whole project.
    You got /3 concepts.

      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