How to Set Up a DBT Project and Workflow

Are you ready to take your data analysis to the next level? If you're not already using a Data Build Tool (DBT), you're missing out! DBT is a powerful open source tool that simplifies and streamlines the process of building data pipelines and models. But if you're new to DBT, you might be wondering how to set it up for your project. Don't worry, we've got you covered! In this article, we'll guide you through the process step by step, from installing DBT on your computer to creating your first DBT project.


Before we dive into the setup process, let's make sure you have everything you need. In order to follow along with this tutorial, you will need:

If you're missing any of these prerequisites, take a moment to set them up before continuing. Don't worry, we'll wait!

Install DBT

The first step in setting up a DBT project is to install the DBT command line tool on your computer. The easiest way to do this is using pip, the Python package manager. Open up your terminal or command prompt and run the following command:

pip install dbt

This will install the latest version of DBT and all of its dependencies. If you encounter any errors during the installation process, make sure you have the latest version of pip installed and try again. Once DBT is installed, you can test it out by running the following command:

dbt --version

This should print the version number of your installed DBT tool. Congratulations, you're now ready to start using DBT!

Create a DBT Project

Now that you have DBT installed, it's time to create your first DBT project. Navigate to the directory where you want to create your project (e.g. ~/code/dbt/my_project) and run the following command:

dbt init my_project

This will create a new directory called my_project with the following structure:

├── dbt_project.yml
└── models
    └── schema.yml

Let's go over what each of these files and folders does.


This file is the main configuration file for your DBT project. It contains settings such as your database connection information, target environment, and project name. You can edit this file to customize your DBT project as needed.

models folder

This folder is where you'll define your DBT models. A model is a SQL file that defines a specific transformation or calculation that you want to perform on your data. We'll go more in depth on how to create models later in this tutorial.


This file is used to define the structure and relationships of your database tables. It helps DBT understand the structure of your data and how it should be transformed by your models. We'll discuss this file more in the next section.

Define Your Data Schema

In order to start building your DBT models, you'll need to define the structure of your data in a schema.yml file. This file uses YAML syntax to define tables and their columns, as well as their relationships to other tables. Here's an example schema file for a simple e-commerce database:

version: 2

  - name: orders
    description: "Table to store all orders"
      - name: order_id
        description: "Unique identifier for each order"
          - unique
      - name: customer_id
        description: "Customer who placed the order"
          - not_null
      - name: order_date
        description: "Date the order was placed"
          - not_null
      - name: total_amount
        description: "Total amount of the order"
          - not_null
        schema: my_schema
        table: orders
    unique_key: [order_id]

  - name: customers
    description: "Table to store customer information"
      - name: customer_id
        description: "Unique identifier for each customer"
          - unique
      - name: name
        description: "Name of the customer"
          - not_null
      - name: email
        description: "Email address of the customer"
          - not_null
        type: varchar(255)
        schema: my_schema
        table: customers
    unique_key: [customer_id]

Let's break down what's happening in this file.


The first line of the file specifies the version of the schema format. We're using version 2, which is the latest at the time of writing.


This section is where you define your database tables and their columns. In this example, we have two tables: orders and customers. Each table has a name, description, and a list of columns. The meta section specifies the database schema and table name that each model corresponds to.

For each column, you can specify its name, description, and tests. The tests section specifies a list of tests to run on the column to ensure its data quality. In this example, we're using the unique test to ensure that each order ID and customer ID is unique, and the not_null test to ensure that required columns are not empty.

Finally, the unique_key section specifies the primary key for each table.

Create Your First DBT Model

Now that you have your schema defined, it's time to create your first DBT model. Models are SQL files that define transformations or calculations that you want to perform on your data. Let's create a simple model to calculate the total revenue for each order.

Create a new SQL file in your models folder called orders.sql. In this file, define your DBT model like so:

-- This is a DBT model to calculate the total revenue for each order.

SELECT o.order_id,
       SUM(quantity * unit_price) AS total_revenue
FROM my_schema.orders o
JOIN my_schema.order_items oi
  ON oi.order_id = o.order_id
GROUP BY o.order_id

This model uses a SQL query to join the orders and order_items tables together, calculate the total revenue for each order, and group the results by order ID. By defining this transformation as a DBT model, you can easily reuse it across multiple queries and reports.

Run Your First DBT Build

Now that you have your first model defined, it's time to test it out by running a DBT build. A build is the process of building, testing, and compiling your DBT models into a deployable package.

To run a DBT build, open up your terminal and navigate to your DBT project folder (e.g. ~/code/dbt/my_project). Then, run the following command:

dbt run

This will tell DBT to build and test all of your defined models. You should see a series of status messages indicating which models are being built, tested, and compiled. If you encounter any errors during this process, make sure to check your SQL syntax, schema file, and database connection settings.


Congratulations, you've now successfully set up a DBT project and workflow! While this tutorial only scratches the surface of DBT's capabilities, it should give you a good foundation to start building your own data pipelines and models. We encourage you to explore the DBT documentation and community to learn more about this powerful tool. Happy building!

Editor Recommended Sites

AI and Tech News
Best Online AI Courses
Classic Writing Analysis
Tears of the Kingdom Roleplay
Local Dev Community: Meetup alternative, local dev communities
Docker Education: Education on OCI containers, docker, docker compose, docker swarm, podman
Rust Community: Community discussion board for Rust enthusiasts
Now Trending App:
Learn to Code Videos: Video tutorials and courses on learning to code