Repository: TobikoData/sqlmesh
Pull request #2913 (2024-07-17 14:48:57)

Docs: clean up model properties in concepts overview and model config reference
- Add project, audits, depends_on, session_properties to model concepts overview
- Add project and session_properties to model config reference
- Add incremental by partition, custom, and managed model kinds to Python model concepts



Patch:
diff --git a/docs/concepts/models/overview.md b/docs/concepts/models/overview.md
index f29f7fda..d658e0dc 100644
--- a/docs/concepts/models/overview.md
+++ b/docs/concepts/models/overview.md
@@ -197,13 +197,19 @@ The `MODEL` DDL statement takes various properties, which are used for both meta
 Learn more about these properties and their default values in the [model configuration reference](../../reference/model_configuration.md#general-model-properties).
 
 ### name
-- `name` specifies the name of the model. This name represents the production view name that the model outputs, so it generally takes the form of `"schema"."view_name"`. The name of a model must be unique in a SQLMesh project.<br /><br />
+- Name specifies the name of the model. This name represents the production view name that the model outputs, so it generally takes the form of `"schema"."view_name"`. The name of a model must be unique in a SQLMesh project.<br /><br />
 When models are used in non-production environments, SQLMesh automatically prefixes the names. For example, consider a model named `"sushi"."customers"`. In production its view is named `"sushi"."customers"`, and in dev its view is named `"sushi__dev"."customers"`.<br /><br />
 Name is ***required*** and must be ***unique***, unless [name inference](../../reference/model_configuration.md#model-naming) is enabled.
 
+### project
+- Project specifies the name of the project the model belongs to. Used in multi-repo SQLMesh deployments.
+
 ### kind
 - Kind specifies what [kind](model_kinds.md) a model is. A model's kind determines how it is computed and stored. The default kind is `VIEW`, which means a view is created and your query is run each time that view is accessed. See [below](#incremental-model-properties) for properties that apply to incremental model kinds.
 
+### audits
+- Audits specifies which [audits](../audits.md) should run after the model is evaluated.
+
 ### dialect
 - Dialect defines the SQL dialect of the model. By default, this uses the dialect in the [configuration file `model_defaults` `dialect` key](../../reference/configuration.md#model-configuration). All SQL dialects [supported by the SQLGlot library](https://github.com/tobymao/sqlglot/blob/main/sqlglot/dialects/__init__.py) are allowed.
 
@@ -211,13 +217,10 @@ Name is ***required*** and must be ***unique***, unless [name inference](../../r
 - Owner specifies who the main point of contact is for the model. It is an important field for organizations that have many data collaborators.
 
 ### stamp
-- An optional arbitrary string sequence used to create new model versions without making changes to any of the functional components of the definition.
-
-### start
-- Start is used to determine the earliest time needed to process the model. It can be an absolute date/time (`2022-01-01`), or a relative one (`1 year ago`).
+- An optional arbitrary string sequence used to create a new model version without changing the functional components of the definition.
 
-### end
-- End is used to determine the latest time needed to process the model. It can be an absolute date/time (`2022-01-01`), or a relative one (`1 year ago`).
+### tags
+- Tags are one or more labels used to organize your models.
 
 ### cron
 - Cron is used to schedule your model to process or refresh at a certain interval. It accepts a [cron expression](https://en.wikipedia.org/wiki/Cron) or any of `@hourly`, `@daily`, `@weekly`, or `@monthly`.
@@ -225,8 +228,17 @@ Name is ***required*** and must be ***unique***, unless [name inference](../../r
 ### interval_unit
 - Interval unit determines the granularity of data intervals for this model. By default the interval unit is automatically derived from the `cron` expression. Supported values are: `year`, `month`, `day`, `hour`, `half_hour`, `quarter_hour`, and `five_minute`.
 
-### tags
-- Tags are one or more labels used to organize your models.
+### start
+- Start is used to determine the earliest time needed to process the model. It can be an absolute date/time (`2022-01-01`), or a relative one (`1 year ago`).
+
+### end
+- End is used to determine the latest time needed to process the model. It can be an absolute date/time (`2022-01-01`), or a relative one (`1 year ago`).
+
+### description
+- Optional description of the model. Automatically registered as a table description/comment with the underlying SQL engine (if supported by the engine).
+
+### column_descriptions
+- Optional dictionary of [key/value pairs](#explicit-column-comments). Automatically registered as column descriptions/comments with the underlying SQL engine (if supported by the engine). If not present, [inline comments](#inline-column-comments) will automatically be registered.
 
 ### grain
 - A model's grain is the column or combination of columns that uniquely identify a row in the results returned by the model's query. If the grain is set, SQLMesh tools like `table_diff` are simpler to run because they automatically use the model grain for parameters that would otherwise need to be specified manually.
@@ -235,13 +247,20 @@ Name is ***required*** and must be ***unique***, unless [name inference](../../r
 - A model can define multiple grains if it has more than one unique key or combination of keys.
 
 ### references
-- References are non-unique columns or combinations of columns that identify a join relationship to an entity. For example, a model could define a reference `account_id`, which would indicate that it can now automatically join to any model with an `account_id` grain. It cannot safely join to a table with an `account_id` reference because references are not unique and doing so would constitute a many-to-many join. Sometimes columns are named differently, in that case you can alias column names to a common entity name. For example `guest_id AS account_id` would allow a model with the column guest\_id to join to a model with the grain account\_id.
+- References are non-unique columns or combinations of columns that identify a join relationship to another model.
+- For example, a model could define a reference `account_id`, which would indicate that it can now automatically join to any model with an `account_id` grain. It cannot safely join to a table with an `account_id` reference because references are not unique and doing so would constitute a many-to-many join.
+- Sometimes columns are named differently, in that case you can alias column names to a common entity name. For example `guest_id AS account_id` would allow a model with the column guest\_id to join to a model with the grain account\_id.
+
+### depends_on
+- Depends on explicitly specifies the models on which the model depends, in addition to the ones automatically inferred by from the model code.
 
 ### storage_format
 - Storage format is a property for engines such as Spark or Hive that support storage formats such as  `parquet` and `orc`.
 
 ### partitioned_by
-- Partitioned by plays two roles. For most model kinds, it is an optional property for engines that support table partitioning such as Spark or BigQuery. For the [`INCREMENTAL_BY_PARTITION` model kind](./model_kinds.md#incremental_by_partition), it defines the partition key used to incrementally load data. It can specify a multi-column partition key or modify a date column for partitioning. For example, in BigQuery you could partition by day by extracting the day component of a timestamp column `event_ts` with `partitioned_by TIMESTAMP_TRUNC(event_ts, DAY)`.
+- Partitioned by plays two roles. For most model kinds, it is an optional property for engines that support table partitioning such as Spark or BigQuery.
+- For the [`INCREMENTAL_BY_PARTITION` model kind](./model_kinds.md#incremental_by_partition), it defines the partition key used to incrementally load data.
+- It can specify a multi-column partition key or modify a date column for partitioning. For example, in BigQuery you could partition by day by extracting the day component of a timestamp column `event_ts` with `partitioned_by TIMESTAMP_TRUNC(event_ts, DAY)`.
 
 ### clustered_by
 - Clustered by is an optional property for engines such as Bigquery that support clustering.
@@ -266,14 +285,9 @@ MODEL (
 );
 ```
 
-### description
-- Optional description of the model. Automatically registered as a table description/comment with the underlying SQL engine (if supported by the engine).
-
-### column_descriptions
-- Optional dictionary of [key/value pairs](#explicit-column-comments). Automatically registered as column descriptions/comments with the underlying SQL engine (if supported by the engine). If not present, [inline comments](#inline-column-comments) will automatically be registered.
-
-### physical_properties (previously table_properties)
-- A key-value mapping of arbitrary properties specific to the target engine that are applied to the model table / view in the physical layer. For example:
+### physical_properties
+- Previously named `table_properties`
+- Physical properties is a key-value mapping of arbitrary properties specific to the target engine that are applied to the model table / view in the physical layer. For example:
 
 ```sql linenums="1"
 MODEL (
@@ -287,7 +301,7 @@ MODEL (
 ```
 
 ### virtual_properties
-- A key-value mapping of arbitrary properties specific to the target engine that are applied to the model view in the virtual layer. For example:
+- Virtual properties is a key-value mapping of arbitrary properties specific to the target engine that are applied to the model view in the virtual layer. For example:
 
 ```sql linenums="1"
 MODEL (
@@ -299,35 +313,47 @@ MODEL (
 
 ```
 
+### session_properties
+- Session properties is a key-value mapping of arbitrary properties specific to the target engine that are applied to the engine session.
+
 ### allow_partials
-- Indicates that this model can be executed for partial (incomplete) data intervals. By default, each model processes only complete intervals to prevent common mistakes caused by partial data. The size of the interval is determined by the model's [interval_unit](#interval_unit). Setting `allow_partials` to `true` overrides this behavior, indicating that the model may process a segment of input data that is missing some of the data points. Please note that setting this attribute to `true` results in the disregard of the [cron](#cron) attribute.
+- Indicates that this model can be executed for partial (incomplete) data intervals.
+- By default, each model processes only complete intervals to prevent common errors caused by partial data. The size of the interval is determined by the model's [interval_unit](#interval_unit).
+- Setting `allow_partials` to `true` overrides this behavior, indicating that the model may process a segment of input data that is missing some of the data points.
+- NOTE: setting this attribute to `true` disregards the [cron](#cron) property.
 
 ### enabled
 - Whether the model is enabled. This attribute is `true` by default. Setting it to `false` causes SQLMesh to ignore this model when loading the project.
 
 ## Incremental Model Properties
 
-For models that are incremental, the following parameters can be specified in the `kind`'s definition.
+These properties can be specified in an incremental model's `kind` definition.
+
+Some properties are only available in specific model kinds - see the [model configuration reference](../../reference/model_configuration.md#incremental-models) for more information and a complete list of each `kind`'s properties.
 
 ### time_column
 - Time column is a required property for incremental models. It is used to determine which records to overwrite when doing an incremental insert. Time column can have an optional format string specified in the SQL dialect of the model.
 - Engines that support partitioning, such as Spark and BigQuery, use the time column as the model's partition key. Multi-column partitions or modifications to columns can be specified with the [`partitioned_by` property](#partitioned_by).
 
-### lookback
-- Lookback is used with [incremental by time range](model_kinds.md#incremental_by_time_range) models to capture late-arriving data. It must be a positive integer and specifies the number of interval time units prior to the current interval the model should include. For example, a model with cron `@daily` and `lookback` of 7 would include the previous 7 days each time it ran, while a model with cron `@weekly` and `lookback` of 7 would include the previous 7 weeks each time it ran.
-
-### on_destructive_change
-- What should happen when a change to a [forward-only model](../../guides/incremental_time.md#forward-only-models) or incremental model in a [forward-only plan](../plans.md#forward-only-plans) causes a destructive modification to the table schema (i.e., requires dropping an existing column). SQLMesh checks for destructive changes at plan time based on the model definition and run time based on the model's underlying physical tables. Must be one of the following values: `allow`, `warn`, or `error` (default).
-
 ### batch_size
-- Batch size is used to optimize backfilling incremental data. It determines the maximum number of intervals to run in a single job. For example, if a model specifies a cron of `@hourly` and a batch_size of `12`, when backfilling 3 days of data, the scheduler will spawn 6 jobs. (3 days * 24 hours/day = 72 hour intervals to fill. 72 intervals / 12 intervals per job = 6 jobs.)
+- Batch size is used to optimize backfilling incremental data. It determines the maximum number of intervals to run in a single job.
+- For example, if a model specifies a cron of `@hourly` and a batch_size of `12`, when backfilling 3 days of data, the scheduler will spawn 6 jobs. (3 days * 24 hours/day = 72 hour intervals to fill. 72 intervals / 12 intervals per job = 6 jobs.)
 
 ### batch_concurrency
 - The maximum number of [batches](#batch_size) that can run concurrently for this model. If not specified, the concurrency is only constrained by the number of concurrent tasks set in the connection settings.
 
+### lookback
+- Lookback is used with [incremental by time range](model_kinds.md#incremental_by_time_range) models to capture late-arriving data. It must be a positive integer and specifies the number of interval time units prior to the current interval the model should include.
+- For example, a model with cron `@daily` and `lookback` of 7 would include the previous 7 days each time it ran, while a model with cron `@weekly` and `lookback` of 7 would include the previous 7 weeks each time it ran.
+
 ### forward_only
 - Set this to true to indicate that all changes to this model should be [forward-only](../plans.md#forward-only-plans).
 
+### on_destructive_change
+- What should happen when a change to a [forward-only model](../../guides/incremental_time.md#forward-only-models) or incremental model in a [forward-only plan](../plans.md#forward-only-plans) causes a destructive modification to the table schema (i.e., requires dropping an existing column).
+- SQLMesh checks for destructive changes at plan time based on the model definition and run time based on the model's underlying physical tables.
+- Must be one of the following values: `allow`, `warn`, or `error` (default).
+
 ### disable_restatement
 - Set this to true to indicate that [data restatement](../plans.md#restatement-plans) is disabled for this model.
 
@@ -371,7 +397,9 @@ DROP TABLE temp_table;
 ## Time column
 Models that are loaded incrementally require a time column to partition data.
 
-A time column is a column in a model with an optional format string in the dialect of the model; for example, `'%Y-%m-%d'` for DuckDB or `'yyyy-mm-dd'` for Snowflake. For more information, refer to [time column](./model_kinds.md#time-column).
+A time column is a column in a model with an optional format string in the dialect of the model; for example, `'%Y-%m-%d'` for DuckDB or `'yyyy-mm-dd'` for Snowflake.
+
+For more information, refer to [time column](./model_kinds.md#time-column).
 
 ### Advanced usage
 The column used as your model's time column is not limited to a text or date type. In the following example, the time column, `di`, is an integer:
diff --git a/docs/concepts/models/python_models.md b/docs/concepts/models/python_models.md
index c1e5b39c..f343f022 100644
--- a/docs/concepts/models/python_models.md
+++ b/docs/concepts/models/python_models.md
@@ -52,9 +52,12 @@ Supported `kind` dictionary `name` values are:
 - `ModelKindName.SEED`
 - `ModelKindName.INCREMENTAL_BY_TIME_RANGE`
 - `ModelKindName.INCREMENTAL_BY_UNIQUE_KEY`
+- `ModelKindName.INCREMENTAL_BY_PARTITION`
 - `ModelKindName.SCD_TYPE_2_BY_TIME`
 - `ModelKindName.SCD_TYPE_2_BY_COLUMN`
 - `ModelKindName.EMBEDDED`
+- `ModelKindName.CUSTOM`
+- `ModelKindName.MANAGED`
 - `ModelKindName.EXTERNAL`
 
 This example demonstrates how to specify an incremental by time range model kind in Python:
diff --git a/docs/integrations/engines/snowflake.md b/docs/integrations/engines/snowflake.md
index 4aed0dd3..a0a44655 100644
--- a/docs/integrations/engines/snowflake.md
+++ b/docs/integrations/engines/snowflake.md
@@ -24,6 +24,7 @@ pip install "sqlmesh[snowflake]"
 | `private_key`            | The optional private key to use for authentication. Key can be Base64-encoded DER format (representing the key bytes), a plain-text PEM format, or bytes (Python config only). | string |    N     |
 | `private_key_path`       | The optional path to the private key to use for authentication. This would be used instead of `private_key`.                                                                   | string |    N     |
 | `private_key_passphrase` | The optional passphrase to use to decrypt `private_key` (if in PEM format) or `private_key_path`. Keys can be created without encryption so only provide this if needed.       | string |    N     |
+| `session_parameters`     | The optional session parameters to set for the connection.                                                                                                                     | dict   |    N     |
 
 
 #### Lowercase object names
diff --git a/docs/reference/model_configuration.md b/docs/reference/model_configuration.md
index 48f9e624..820f9f2b 100644
--- a/docs/reference/model_configuration.md
+++ b/docs/reference/model_configuration.md
@@ -11,6 +11,7 @@ Configuration options for SQLMesh model properties. Supported by all model kinds
 | Option                | Description                                                                                                                                                                                                                                                                                                                                                 | Type              | Required |
 |-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-----------------:|:--------:|
 | `name`                | The model name. Must include at least a qualifying schema (`<schema>.<model>`) and may include a catalog (`<catalog>.<schema>.<model>`). Can be omitted if [infer_names](#model-naming) is set to true.                                                                                                                                                     | str               | N        |
+| `project`                | The name of the project the model belongs to - used in multi-repo deployments                                                                                                                                                                                                                                                                        | str               | N        |
 | `kind`                | The model kind ([Additional Details](#model-kind-properties)). (Default: `VIEW`)                                                                                                                                                                                                                                                                            | str \| dict       | N        |
 | `audits`              | SQLMesh [audits](../concepts/audits.md) that should run against the model's output                                                                                                                                                                                                                                                                          | array[str]        | N        |
 | `dialect`             | The SQL dialect in which the model's query is written. All SQL dialects [supported by the SQLGlot library](https://github.com/tobymao/sqlglot/blob/main/sqlglot/dialects/dialect.py) are allowed.                                                                                                                                                           | str               | N        |
@@ -21,18 +22,19 @@ Configuration options for SQLMesh model properties. Supported by all model kinds
 | `interval_unit`       | The temporal granularity of the model's data intervals. Supported values: `year`, `month`, `day`, `hour`, `half_hour`, `quarter_hour`, `five_minute`. (Default: inferred from `cron`)                                                                                                                                                                       | str               | N        |
 | `start`               | The date/time that determines the earliest date interval that should be processed by a model. Can be a datetime string, epoch time in milliseconds, or a relative datetime such as `1 year ago`. (Default: `yesterday`)                                                                                                                                     | str \| int        | N        |
 | `end`                 | The date/time that determines the latest date interval that should be processed by a model. Can be a datetime string, epoch time in milliseconds, or a relative datetime such as `1 year ago`.                                                                                                                                                              | str \| int        | N        |
+| `description`         | Description of the model. Automatically registered in the SQL engine's table COMMENT field or equivalent (if supported by the engine).                                                                                                                                                                                                                      | str               | N        |
+| `column_descriptions` | A key-value mapping of column names to column comments that will be registered in the SQL engine's table COMMENT field (if supported by the engine). Specified as key-value pairs (`column_name = 'column comment'`). If present, [inline column comments](../concepts/models/overview.md#inline-column-comments) will not be registered in the SQL engine. | dict              | N        |
 | `grains`              | The column(s) whose combination uniquely identifies each row in the model                                                                                                                                                                                                                                                                                   | str \| array[str] | N        |
 | `references`          | The model column(s) used to join to other models' grains                                                                                                                                                                                                                                                                                                    | str \| array[str] | N        |
-| `depends_on`          | Models on which this model depends in addition to the ones inferred from the model's query. (Default: dependencies inferred from model code)                                                                                                                                                                                                                | array[str]        | N        |
+| `depends_on`          | Models on which this model depends, in addition to the ones inferred from the model's query. (Default: dependencies inferred from model code)                                                                                                                                                                                                                | array[str]        | N        |
 | `storage_format`      | The storage format that should be used to store physical tables; only applicable to engines such as Spark                                                                                                                                                                                                                                                   | str               | N        |
 | `partitioned_by`      | The column(s) and/or column expressions used define a model's partitioning key. Required for the `INCREMENTAL_BY_PARTITION` model kind. Optional for all other model kinds; used to partition the model's physical table in engines that support partitioning.                                                                                              | str \| array[str] | N        |
 | `clustered_by`        | The column(s) used to cluster the model's physical table; only applicable to engines that support clustering                                                                                                                                                                                                                                                | str               | N        |
 | `columns`             | The column names and data types returned by the model. Disables [automatic inference of column names and types](../concepts/models/overview.md#conventions) from the SQL query.                                                                                                                                                                             | array[str]        | N        |
 | `physical_properties` | A key-value mapping of arbitrary properties specific to the target engine that are applied to the model table / view in the physical layer. Specified as key-value pairs (`key = value`).                                                                                                                                                                   | dict              | N        |
 | `virtual_properties`  | A key-value mapping of arbitrary properties specific to the target engine that are applied to the model view in the virtual layer. Specified as key-value pairs (`key = value`).                                                                                                                                                                            | dict              | N        |
+| `session_properties`  | A key-value mapping of arbitrary properties specific to the target engine that are applied to the engine session. Specified as key-value pairs (`key = value`).                                                                                                                                                                            | dict              | N        |
 | `allow_partials`      | Whether this model can process partial (incomplete) data intervals                                                                                                                                                                                                                                                                                          | bool              | N        |
-| `description`         | Description of the model. Automatically registered in the SQL engine's table COMMENT field or equivalent (if supported by the engine).                                                                                                                                                                                                                      | str               | N        |
-| `column_descriptions` | A key-value mapping of column names to column comments that will be registered in the SQL engine's table COMMENT field (if supported by the engine). Specified as key-value pairs (`column_name = 'column comment'`). If present, [inline column comments](../concepts/models/overview.md#inline-column-comments) will not be registered in the SQL engine. | dict              | N        |
 | `enabled`             | Whether the model is enabled. This attribute is `true` by default. Setting it to `false` causes SQLMesh to ignore this model when loading the project.                                                                                                                                                                                                      | bool              | N        |
 
 ### Model defaults
@@ -88,8 +90,8 @@ Configuration options for all incremental models (in addition to [general model
 
 | Option                  | Description                                                                                                                                                                                                                                                                                                            | Type | Required |
 |-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----:|:--------:|
-| `on_destructive_change` | What should happen when a change to a [forward-only model](../guides/incremental_time.md#forward-only-models) or incremental model in a [forward-only plan](../concepts/plans.md#forward-only-plans) causes a destructive modification to the model schema. Valid values: `allow`, `warn`, `error`. (Default: `error`) | str  | N        |
 | `forward_only`          | Whether the model's changes should always be classified as [forward-only](../concepts/plans.md#forward-only-change). (Default: `False`)                                                                                                                                                                                | bool | N        |
+| `on_destructive_change` | What should happen when a change to a [forward-only model](../guides/incremental_time.md#forward-only-models) or incremental model in a [forward-only plan](../concepts/plans.md#forward-only-plans) causes a destructive modification to the model schema. Valid values: `allow`, `warn`, `error`. (Default: `error`) | str  | N        |
 | `disable_restatement`   | Whether [restatements](../concepts/plans.md#restatement-plans) should be disabled for the model. (Default: `False`)                                                                                                                                                                                                    | bool | N        |
 
 #### Incremental by time range
diff --git a/setup.py b/setup.py
index 14f53ec1..9cb888d6 100644
--- a/setup.py
+++ b/setup.py
@@ -47,7 +47,7 @@ setup(
         "requests",
         "rich[jupyter]",
         "ruamel.yaml",
-        "sqlglot[rs]~=25.5.1",
+        "sqlglot[rs]~=25.6.0",
     ],
     extras_require={
         "bigquery": [
diff --git a/sqlmesh/core/config/connection.py b/sqlmesh/core/config/connection.py
index 343bfbb8..38d20f51 100644
--- a/sqlmesh/core/config/connection.py
+++ b/sqlmesh/core/config/connection.py
@@ -333,6 +333,7 @@ class SnowflakeConnectionConfig(ConnectionConfig):
         private_key_passphrase: The optional passphrase to use to decrypt `private_key` or `private_key_path`. Keys can be created without encryption so only provide this if needed.
         register_comments: Whether or not to register model comments with the SQL engine.
         pre_ping: Whether or not to pre-ping the connection before starting a new transaction to ensure it is still alive.
+        session_parameters: The optional session parameters to set for the connection.
     """
 
     account: str
@@ -353,6 +354,8 @@ class SnowflakeConnectionConfig(ConnectionConfig):
     register_comments: bool = True
     pre_ping: bool = False
 
+    session_parameters: t.Optional[dict] = None
+
     type_: Literal["snowflake"] = Field(alias="type", default="snowflake")
 
     _concurrent_tasks_validator = concurrent_tasks_validator
@@ -471,6 +474,7 @@ class SnowflakeConnectionConfig(ConnectionConfig):
             "authenticator",
             "token",
             "private_key",
+            "session_parameters",
         }
 
     @property


Test patch:
diff --git a/tests/core/test_connection_config.py b/tests/core/test_connection_config.py
index 10171fa9..6fb158ce 100644
--- a/tests/core/test_connection_config.py
+++ b/tests/core/test_connection_config.py
@@ -183,6 +183,17 @@ def test_snowflake(make_config, snowflake_key_passphrase_bytes, snowflake_oauth_
             authenticator="oauth",
         )
 
+    # Can pass in session parameters
+    config = make_config(
+        type="snowflake",
+        account="test",
+        user="test",
+        password="test",
+        authenticator="externalbrowser",
+        session_parameters={"query_tag": "test", "timezone": "UTC"},
+    )
+    assert isinstance(config, SnowflakeConnectionConfig)
+
 
 @pytest.mark.parametrize(
     "key_path_fixture, key_pem_fixture, key_b64_fixture, key_bytes_fixture, key_passphrase",