Skip to main content

dbt Integration

Connect Qarion to your dbt project to import model metadata and lineage automatically.

Prerequisites

Before connecting, ensure you have a dbt project with defined models, access to the generated artifacts (manifest.json and catalog.json), and for dbt Cloud users, an API token with appropriate read permissions.

Integration Methods

Option A: dbt Cloud

You can connect directly to dbt Cloud to enable automatic synchronization of your metadata and lineage.

Option B: dbt Core (Self-Hosted)

For self-hosted setups, you can upload the artifacts generated by running dbt compile and dbt docs generate to import your data.

dbt Cloud Setup

Step 1: Add Source System

Navigate to Source Systems, click Add Source System, and select dbt Cloud as the platform type.

Step 2: API Configuration

Enter your details: the Account ID, the Project ID you wish to sync, and the Environment (e.g., Production) to read from.

Step 3: Authentication

Generate an API token in dbt Cloud (under Account Settings → API Tokens) with read-only access to the project. Copy this token into the Qarion configuration.

Step 4: Test Connection

Click Test Connection to verify that the API token works, the project is visible, and the necessary artifacts are available.

dbt Core Setup

Step 1: Generate Artifacts

Run dbt compile and dbt docs generate in your project. This creates target/manifest.json (model definitions) and target/catalog.json (schema info).

Step 2: Upload Artifacts

In Source Systems, create a dbt Core source system and upload the generated manifest.json and catalog.json files.

Step 3: Schedule Updates

For ongoing synchronization, integrate the artifact upload into your CI/CD pipeline, using the Qarion API to push updated artifacts after each build.

What Gets Synced

From manifest.json

Qarion imports Models (names, descriptions, materialization), Sources, Seeds, Snapshots, Dependencies (refs), and Tests.

From catalog.json

Qarion imports Columns (names, types, descriptions), Statistics (row counts, sizes), and Database info (schema/table names).

Lineage Mapping

How Lineage Works

dbt lineage is derived from ref() and source() calls within your models, as well as explicit model dependencies.

Automatic Product Matching

Qarion automatically matches dbt models to products by database/schema/table name or by the model's unique_id. Complex cases can be mapped manually.

Manual Mapping

For custom mappings, open the source system triggers Mappings tab to manually link specific dbt models to Qarion products.

Quality Check Integration

dbt Tests → Qarion Checks

You can import dbt tests—including schema tests (unique, not_null), data tests, and generic tests—as quality checks in Qarion.

Test Results Sync

When configured, test results from your dbt runs are synced to Qarion. Failures in dbt will trigger corresponding alerts in the platform.

Configuration

Add tags (e.g., qarion-sync) to your dbt models in dbt_project.yml to control which models are synchronized.

Advanced Configuration

Multi-Project Setup

For monorepos, create separate source systems for each project, configure project-specific credentials, and use tags to control the scope of each sync.

Environment Filtering

You can choose to filter syncs by environment: syncing only Production is default, but you can include Staging or exclude Development as needed.

Incremental Sync

For large projects, consider a weekly full sync combined with incremental syncs on each dbt run, or use delta detection to upload only changed manifests.

CI/CD Integration

GitHub Actions Example

Use a workflow to install dbt, generate artifacts, and upload them to Qarion via the API:

name: Sync dbt to Qarion

on:
push:
branches: [main]

jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'

- name: Install dbt
run: pip install dbt-core dbt-snowflake

- name: Generate artifacts
run: |
dbt deps
dbt compile
dbt docs generate

- name: Upload to Qarion
run: |
curl -X POST "$QARION_API/source-systems/$SOURCE_ID/sync" \
-H "Authorization: Bearer $QARION_TOKEN" \
-F "manifest=@target/manifest.json" \
-F "catalog=@target/catalog.json"
env:
QARION_API: ${{ secrets.QARION_API }}
QARION_TOKEN: ${{ secrets.QARION_TOKEN }}
SOURCE_ID: ${{ secrets.DBT_SOURCE_ID }}

Troubleshooting

Connection Errors

"API token invalid" suggests you need to regenerate the token or check its permissions. "Project not found" often means an incorrect Project ID or missing environment.

Sync Issues

Missing models can happen if the model is disabled or filtered out by tags. regenerate the manifest to fix. Stale lineage usually requires an artifact regeneration or manual sync.

Mapping Issues

If models not matching products, verify that naming conventions align or use manual mapping to resolve discrepancies.

Best Practices

Artifact Management

Version control your dbt project and generate artifacts within your CI/CD pipeline, archiving them for audit trails.

Sync Frequency

Sync on every production deployment, perform a weekly full refresh, or use webhooks for real-time updates.

Documentation Quality

Maintain high documentation quality by populating descriptions in dbt models and keeping column descriptions updated in your schema files.