> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# atoti_directquery_snowflake.ConnectionConfig

### *final class* atoti\_directquery\_snowflake.ConnectionConfig

Config to connect to a Snowflake database.

### Example

```pycon theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
>>> import os
>>> from atoti_directquery_snowflake import ConnectionConfig
>>> connection_config = ConnectionConfig(
...     url="jdbc:snowflake://"
...     + os.environ["SNOWFLAKE_ACCOUNT_IDENTIFIER"]
...     + ".snowflakecomputing.com/?user="
...     + os.environ["SNOWFLAKE_USERNAME"],
...     password=os.environ["SNOWFLAKE_PASSWORD"],
... )
>>> external_database = session.connect_to_external_database(connection_config)
```

#### array\_agg\_wrapper\_function\_name *: [str](https://docs.python.org/3/library/stdtypes.html#str) | [None](https://docs.python.org/3/library/constants.html#None)* *= None*

The name of the User Defined Function to use to wrap the aggregations on arrays to improve performance.

This function must be defined in Snowflake and accessible to the role running the queries.

#### auto\_multi\_column\_array\_conversion *: [AutoMultiColumnArrayConversion](./atoti.directquery.array_conversion.auto_multi_column_array_conversion#atoti.AutoMultiColumnArrayConversion) | [None](https://docs.python.org/3/library/constants.html#None)* *= None*

When not `None`, multi-column array conversion will be performed automatically.

#### cache *: [bool](https://docs.python.org/3/library/functions.html#bool)* *= True*

Whether to look for query results in the external database query cache.

#### column\_clustered\_queries *: 'all' | 'feeding'* *= 'feeding'*

Control which queries will use clustering columns.

#### feeding\_query\_timeout *: Duration* *= datetime.timedelta(seconds=3600)*

Timeout for queries performed on the external database during feeding phases.

The feeding phases are:

* the initial load to feed [`aggregate_providers`](./atoti.Cube.aggregate_providers#atoti.Cube.aggregate_providers) and [`hierarchies`](./atoti.Cube.hierarchies#atoti.Cube.hierarchies);
* the refresh operations.

#### feeding\_warehouse\_name *: [str](https://docs.python.org/3/library/stdtypes.html#str) | [None](https://docs.python.org/3/library/constants.html#None)* *= None*

The name of the warehouse to use for the initial feeding.

If `None`, the main warehouse will be used.

#### lookup\_mode *: 'allow' | 'warn' | 'deny'* *= 'warn'*

Whether lookup queries on the external database are allowed.

Lookup can be very slow and expensive as the database may not enforce primary keys.

#### main\_warehouse\_name *: [str](https://docs.python.org/3/library/stdtypes.html#str) | [None](https://docs.python.org/3/library/constants.html#None)* *= None*

The name of the warehouse to use for all other queries than the ones handled by the [`feeding warehouse`](#atoti_directquery_snowflake.ConnectionConfig.feeding_warehouse_name).

If `None`, the warehouse defined in :attr: url will be used.
If :attr: url does not specify a warehouse, the user’s default warehouse will be used.

#### max\_sub\_queries *: Annotated\[[int](https://docs.python.org/3/library/functions.html#int), Field(gt=0)]* *= 500*

Maximum number of sub queries performed when splitting a query into multi-step queries.

#### password *: [str](https://docs.python.org/3/library/stdtypes.html#str) | [None](https://docs.python.org/3/library/constants.html#None)* *= None*

The password to connect to the database.

Passing it in this separate attribute prevents it from being logged alongside the connection string.

If `None`, a password is expected to be present in [`url`](#atoti_directquery_snowflake.ConnectionConfig.url).

#### query\_timeout *: Duration* *= datetime.timedelta(seconds=300)*

Timeout for queries performed on the external database outside feeding phases.

#### time\_travel *: [bool](https://docs.python.org/3/library/functions.html#bool)* *= True*

Whether to use time travel in queries.

#### url *: [str](https://docs.python.org/3/library/stdtypes.html#str)*

The JDBC connection string.

If [`feeding_warehouse_name`](#atoti_directquery_snowflake.ConnectionConfig.feeding_warehouse_name) is not `None`, the warehouse cannot be specified in the URL.

See [https://docs.snowflake.com/en/user-guide/jdbc-configure.html#jdbc-driver-connection-string](https://docs.snowflake.com/en/user-guide/jdbc-configure.html#jdbc-driver-connection-string) for more information.
