Data Source
The data_source property connects cubes to specific data warehouse connections. Use it when your semantic layer spans multiple databases like PostgreSQL, Snowflake, or BigQuery.
Overview
The data_source property specifies which configured data source a cube should use. This enables multi-database architectures where different cubes query different warehouses.
Example
cubes:
- name: orders
sql_table: public.orders
data_source: default
- name: analytics_events
sql_table: events
data_source: clickhouse_analyticsSyntax
Single Data Source
cubes:
- name: users
sql_table: users
data_source: postgres_mainDefault Behavior
If data_source is omitted, the cube uses the default data source:
cubes:
- name: orders
sql_table: orders
# Uses "default" data sourceMulti-Database Architecture
Different cubes can query different databases:
cubes:
# Transactional data from Postgres
- name: orders
sql_table: public.orders
data_source: postgres
# Analytics events from ClickHouse
- name: events
sql_table: analytics.events
data_source: clickhouse
# ML features from Snowflake
- name: predictions
sql_table: ml.predictions
data_source: snowflakeData Source Configuration
Data sources are configured in your Bonnard project:
# .bon/datasources.yaml
datasources:
- name: default
type: postgres
host: localhost
database: mydb
- name: analytics
type: snowflake
account: myaccount
database: ANALYTICSSSL Configuration
Cloud-hosted databases (Neon, Supabase, Amazon RDS, Google Cloud SQL, Azure) typically require SSL connections. Bonnard supports SSL for Postgres and Redshift data sources via the sslmode config field.
Supported Modes
| Mode | Description |
|---|---|
require | Encrypt the connection (default for bon datasource add) |
disable | No encryption |
Setting SSL via CLI
# Interactive — defaults to "require", press Enter to accept
bon datasource add
# Non-interactive
bon datasource add --name my_db --type postgres \
--host ep-cool-rain-123456.us-east-2.aws.neon.tech \
--database mydb --user myuser --password-env DB_PASSWORD \
--ssl require
# Disable SSL (e.g. localhost)
bon datasource add --name local_dev --type postgres \
--host localhost --database devdb --user dev --password dev \
--ssl disableSetting SSL in datasources.yaml
# .bon/datasources.yaml
datasources:
- name: production
type: postgres
config:
host: ep-cool-rain-123456.us-east-2.aws.neon.tech
port: "5432"
database: mydb
schema: public
sslmode: require
credentials:
username: myuser
password: "{{ env_var('DB_PASSWORD') }}"dbt Import
When importing from dbt profiles via bon datasource add --from-dbt, the sslmode field is automatically carried over from your dbt configuration.
Cross-Database Joins
Cubes from different data sources cannot be directly joined. Use views or pre-aggregations to combine data from multiple sources.
See Also
Cubes
Cubes are the core building blocks of a Bonnard semantic layer. Each cube maps to a database table and defines the measures, dimensions, and joins available for querying.
Extends
Extends lets you inherit measures, dimensions, and joins from other cubes to reduce duplication. Build base cubes with shared logic and extend them for specific use cases.