Skip to main content
Datafold supports composite primary keys, meaning that you can assign multiple columns that make up the primary key together.

Primary key inference

Datafold looks for the primary key of each dbt model in this order and uses the first match:
  1. Model-level meta with the primary key tag
  2. Column-level meta with the primary key tag
  3. Column-level tags
  4. dbt uniqueness tests
  5. The unique_key config (for incremental models and snapshots)
  6. Column-name guesses: id, pk, pkey, or <model_name>_id
  7. dbt primary_key constraints
The primary key tag defaults to primary-key. You can change it with the Primary key tag setting in your dbt CI integration.

Metadata

The first option is setting the primary-key key in the dbt metadata. There are several ways to configure this in your dbt project using either the meta key in a yaml file or a model-specific config block. You can list the primary key columns at the model level:
Or mark each column:

Tags

If the primary key is not found in the metadata, it will go through the tags.

Inferred

If the primary key isn’t provided explicitly, Datafold will try to infer a primary key from dbt’s uniqueness tests. If you have a single column uniqueness test defined, it will use this column as the PK.
Also, model-level uniqueness tests can be used for inferring the PK.
Keep in mind that this is a failover mechanism. If you change the uniqueness test, this will also impact the way Datafold performs the diff. If no uniqueness test is found, Datafold uses the unique_key config of incremental models and snapshots, then columns named id, pk, pkey, or <model_name>_id.