# Connecting to multiple data sources

Cube supports connecting to multiple data sources, so that different
[cubes](/product/data-modeling/reference/cube) reference data from different
databases.

Usually, data sources are configured **statically** (see below). However, Cube
can also lookup data sources **dynamically** which is useful in complex
scenarios involving [multitenancy][ref-config-multitenancy].

## Environment variables

Declare the list of data sources using the <EnvVar>CUBEJS_DATASOURCES</EnvVar> environment
variable, then use
[decorated environment variables](#decorated-environment-variables) to configure
each data source:

```dotenv
CUBEJS_DATASOURCES=default,datasource1
CUBEJS_DB_TYPE=postgres
CUBEJS_DB_NAME=ecom
CUBEJS_DB_HOST=localhost
CUBEJS_DS_DATASOURCE1_DB_TYPE=postgres
CUBEJS_DS_DATASOURCE1_DB_NAME=ecom
CUBEJS_DS_DATASOURCE1_DB_HOST=remotehost
```

<InfoBox>

Cube expects that the `default` data source is **always** defined. Ensure that
`CUBEJS_DB_*` environment variables are set **or** that the `default` data
source is defined using [`driverFactory`][ref-config-ref-driverfactory] in your
`cube.js` file.

</InfoBox>

### Decorated environment variables

Cube allows database-specific environment variables to be decorated with a data
source name:

```dotenv
CUBEJS_[DS_<DATASOURCE>_]<ENV_VAR>
```

For example, using the `datasource1` data source, <EnvVar>CUBEJS_DB_TYPE</EnvVar> could be
decorated as:

```dotenv
CUBEJS_DS_DATASOURCE1_DB_TYPE=postgres
```

For more information on environment variables that support decoration, check the
[environment variables reference][ref-config-ref-env] or [database-specific
pages][ref-config-db].

## Data model

Use the [`data_source`](/product/data-modeling/reference/cube#data_source)
property to set a data source for each cube:

<CodeTabs>

```yaml
cubes:
  - name: orders
    # ...

    data_source: default

  - name: orders_from_other_data_source
    # ...

    data_source: other_data_source
```

```javascript
cube(`orders`, {
  // ...

  data_source: `default`
})

cube(`orders_from_other_data_source`, {
  // ...

  data_source: `other_data_source`
})
```

</CodeTabs>

[ref-config-ref-env]: /product/configuration/reference/environment-variables
[ref-config-ref-driverfactory]: /product/configuration/reference/config#driverfactory
[ref-config-db]: /product/configuration/data-sources
[ref-config-multitenancy]:
  /product/configuration/multitenancy#multitenancy-multitenancy-vs-multiple-data-sources

## Cube Cloud

Follow these steps to connect to multiple data sources in Cube Cloud:

- Set up the `default` database connection when creating a new deployment.
- Ensure you have the correct
  [multitenancy](/product/configuration/multitenancy) configuration in
  your `cube.js` file.
- Configure the corresponding environment variables in <Btn>Settings →
  Environment variables</Btn>.
