Skip to main content

Model synchronization from dbt to Metabase.

Project description

Model synchronization from dbt to Metabase.

If dbt is your source of truth for database schemas and you use Metabase as your analytics tool, dbt-metabase can propagate table relationships, model and column descriptions and special types (e.g. currency, category, URL) to your Metabase data model.

Requirements

Requires Python 3.6 or above.

Usage

You can install dbt-metabase from PyPI:

pip install dbt-metabase

To install the dbt package in your project, add the following to your packages.yml:

packages:
  - git: https://github.com/gouline/dbt-metabase.git
    revision: vX.Y.Z

Where vX.Y.Z corresponds to the latest release. Now run dbt deps and you’re ready to go.

Basic Example

Let’s start by defining a short sample schema.yml as below.

models:
  - name: stg_users
    description: User records.
    columns:
      - name: id
        description: Primary key.
        tests:
          - not_null
          - unique
      - name: email
        description: User's email address.
      - name: group_id
        description: Foreign key to user group.
        tests:
          - not_null
          - relationships:
              to: ref('groups')
              field: id
  - name: stg_groups
    description: User groups.
    columns:
      - name: id
        description: Primary key.
        tests:
          - not_null
          - unique
      - name: name
        description: Group name.

That’s already enough to propagate the primary keys, foreign keys and descriptions to Metabase by executing the below command.

dbt-metabase export \
    --dbt_path . \
    --mb_host metabase.example.com \
    --mb_user user@example.com \
    --mb_password Password123 \
    --database business \
    --schema public

Check your Metabase instance by going into Settings > Admin > Data Model, you will notice that ID in STG_USERS is now marked as “Entity Key” and GROUP_ID is marked as “Foreign Key” pointing to ID in STG_GROUPS.

Special Types

Now that we have primary and foreign keys, let’s tell Metabase that email column contains email addresses.

Change the email column as follows:

- name: email
  description: User's email address.
  tests:
    - metabase.field:
        special_type: type/Email

Once you run dbt-metabase export again, you will notice that EMAIL is now marked as “Email”.

Here is the list of special types currently accepted by Metabase:

  • type/AvatarURL

  • type/Category

  • type/City

  • type/Country

  • type/Currency

  • type/Description

  • type/Email

  • type/Enum

  • type/ImageURL

  • type/SerializedJSON

  • type/Latitude

  • type/Longitude

  • type/Number

  • type/State

  • type/URL

  • type/ZipCode

  • type/Quantity

  • type/Income

  • type/Discount

  • type/CreationTimestamp

  • type/CreationTime

  • type/CreationDate

  • type/CancelationTimestamp

  • type/CancelationTime

  • type/CancelationDate

  • type/DeletionTimestamp

  • type/DeletionTime

  • type/DeletionDate

  • type/Product

  • type/User

  • type/Source

  • type/Price

  • type/JoinTimestamp

  • type/JoinTime

  • type/JoinDate

  • type/Share

  • type/Owner

  • type/Company

  • type/Subscription

  • type/Score

  • type/Title

  • type/Comment

  • type/Cost

  • type/GrossMargin

  • type/Birthdate

If you notice new ones, please submit a PR to update this readme and macros/tests.sql.

Visibility Types

In addition to special types, you can optionally specify visibility for each field. This affects whether or not they are displayed in the Metabase UI.

Here is how you would hide that same email:

- name: email
  description: User's email address.
  tests:
    - metabase.field:
        special_type: type/Email
        visibility_type: sensitive

Here are the visibility types supported by Metabase:

  • normal (default)

  • details-only

  • sensitive

  • hidden (supported but not reflected in the UI)

  • retired (supported but not reflected in the UI)

If you notice new ones, please submit a PR to update this readme and macros/tests.sql.

Database Sync

By default, dbt-metabase will tell Metabase to synchronize database fields and wait for the data model to contain all the tables and columns in your dbt project.

You can control this behavior with two arguments:

  • --sync - boolean to enable or disable pre-synchronization

  • --sync_timeout - number of seconds to wait and re-check data model before giving up

Programmatic Invocation

As you have already seen, you can invoke dbt-metabase from the command line. But if you prefer to call it from your code, here’s how to do it:

import dbtmetabase

dbtmetabase.export(dbt_path, mb_host, mb_user, mb_password, database, schema)

Code of Conduct

All contributors are expected to follow the PyPA Code of Conduct.

Project details


Release history Release notifications | RSS feed

This version

0.3.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dbt-metabase-0.3.0.tar.gz (8.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dbt_metabase-0.3.0-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file dbt-metabase-0.3.0.tar.gz.

File metadata

  • Download URL: dbt-metabase-0.3.0.tar.gz
  • Upload date:
  • Size: 8.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.7

File hashes

Hashes for dbt-metabase-0.3.0.tar.gz
Algorithm Hash digest
SHA256 4174f82ebf6438b7a0b9e2c33c9a8364362e8fe488d10f35ab58a5265835635f
MD5 f9a94cf134044f9f28b551ff4df55f0e
BLAKE2b-256 34d28993286ffb1a28f66b3a054352061673d009698a92ab8873d6ed4f0d9ad7

See more details on using hashes here.

File details

Details for the file dbt_metabase-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: dbt_metabase-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 9.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.7

File hashes

Hashes for dbt_metabase-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bd41e8c2098d6c0ab552921beee03bdc1032334dfbef46fc9fea763b7e98d324
MD5 fcc97df9990203c0e28193d32ccbdb16
BLAKE2b-256 17882c544ef740d7b40279b675ef0e14b350ddd379e80e6d4657edf128188303

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page