### Capabilities

Use the **Important Capabilities** table above as the source of truth for supported features and whether additional configuration is required.

#### Collection

The connector uses Metabase collection APIs to discover collection hierarchy and list dashboards within each collection:

- [`/api/collection`](https://www.metabase.com/docs/latest/api/collection)
- [`/api/collection/{id}/items?models=dashboard`](https://www.metabase.com/docs/latest/api/collection#get-apicollectioniditems)

#### Dashboard

Dashboard details are extracted from:

- [`/api/dashboard/{id}`](https://www.metabase.com/docs/latest/api/dashboard)

This includes titles, descriptions, ownership context, and dashboard URL metadata.

#### Chart

Chart metadata is extracted from:

- [`/api/card/{id}`](https://www.metabase.com/docs/latest/api-documentation.html#card)

This captures chart definitions, query relationships, and chart-level attributes used for DataHub Chart entities.

#### Database Mapping

Metabase databases will be mapped to a DataHub platform based on the engine listed in the
[api/database](https://www.metabase.com/docs/latest/api-documentation.html#database) response. This mapping can be
customized by using the `engine_platform_map` config option. For example, to map databases using the `athena` engine to
the underlying datasets in the `glue` platform, the following snippet can be used:

```yml
engine_platform_map:
  athena: glue
```

DataHub will try to determine database name from Metabase [api/database](https://www.metabase.com/docs/latest/api-documentation.html#database)
payload. However, the name can be overridden from `database_alias_map` for a given database connected to Metabase.

If several platform instances with the same platform (e.g. from several distinct clickhouse clusters) are present in DataHub,
the mapping between database id in Metabase and platform instance in DataHub may be configured with the following map:

```yml
database_id_to_instance_map:
  "42": platform_instance_in_datahub
```

The key in this map must be string, not integer although Metabase API provides `id` as number.
If `database_id_to_instance_map` is not specified, `platform_instance_map` is used for platform instance mapping. If none of the above are specified, platform instance is not used when constructing `urn` when searching for dataset relations.

If needed it is possible to exclude collections from other users by setting the following configuration:

```yaml
exclude_other_user_collections: true
```

### Limitations

Module behavior is constrained by source APIs, permissions, and metadata exposed by the platform. Refer to capability notes for unsupported or conditional features.

### Troubleshooting

If ingestion fails, validate credentials, permissions, connectivity, and scope filters first. Then review ingestion logs for source-specific errors and adjust configuration accordingly.
