Snowflake Reference
Authentication options and data type handling for Snowflake connections.
Authentication
Any DATACONTRACT_SNOWFLAKE_-prefixed variable is passed (lowercased, prefix stripped) as a connection parameter to the snowflake-connector-python driver. Set the variables required by your workspace's authenticator mode.
| Connection parameter | Environment variable |
|---|---|
username | DATACONTRACT_SNOWFLAKE_USERNAME |
password | DATACONTRACT_SNOWFLAKE_PASSWORD |
warehouse | DATACONTRACT_SNOWFLAKE_WAREHOUSE |
role | DATACONTRACT_SNOWFLAKE_ROLE |
connection_timeout | DATACONTRACT_SNOWFLAKE_CONNECTION_TIMEOUT |
authenticator | DATACONTRACT_SNOWFLAKE_AUTHENTICATOR |
private_key | DATACONTRACT_SNOWFLAKE_PRIVATE_KEY |
private_key_passphrase | DATACONTRACT_SNOWFLAKE_PRIVATE_KEY_PASSPHRASE |
private_key_path | DATACONTRACT_SNOWFLAKE_PRIVATE_KEY_PATH |
account, database, and schema come from the contract's servers block.
Import-specific options
datacontract import snowflake additionally supports:
| Variable | Description |
|---|---|
DATACONTRACT_SNOWFLAKE_PRIVATE_KEY_FILE | Path to a private key file (key-pair auth) |
DATACONTRACT_SNOWFLAKE_PRIVATE_KEY_FILE_PWD | Passphrase for the private key file |
DATACONTRACT_SNOWFLAKE_HOME | Directory containing a connections.toml |
DATACONTRACT_SNOWFLAKE_CONNECTIONS_FILE | Path to a connections.toml file |
DATACONTRACT_SNOWFLAKE_DEFAULT_CONNECTION_NAME | Connection name within connections.toml |
The SNOWFLAKE_-prefixed equivalents work as fallbacks. If no password is set, the import falls back to browser-based SSO (externalbrowser).
Data types
Importing
datacontract import snowflake reads INFORMATION_SCHEMA.COLUMNS and maps types as follows. The physicalType keeps the full native type including length/precision (e.g. NUMBER(38, 0), TEXT(16777216)).
| Snowflake type | logicalType | Notes |
|---|---|---|
TEXT, VARCHAR | string | maxLength from CHARACTER_MAXIMUM_LENGTH |
NUMBER (incl. INT/BIGINT aliases) | number | precision/scale as custom properties |
FLOAT, DOUBLE | number | |
BOOLEAN | boolean | |
DATE | date | |
TIMESTAMP_NTZ / _LTZ / _TZ | timestamp | |
TIME | time | |
BINARY | string (format binary) | |
ARRAY | array | |
VARIANT, OBJECT, GEOGRAPHY, GEOMETRY | (unset) | physicalType is still written |
Columns also get required (from IS_NULLABLE), unique (from IS_IDENTITY), and custom properties for ordinalPosition, default, precision, scale, characterSet, and collation.
Testing
Snowflake supports native type introspection: the declared physicalType is checked against the actual catalog type. Snowflake-specific leniency: VARCHAR/TEXT/NVARCHAR are treated as the same family, as are DECIMAL/INT/BIGINT/SMALLINT/TINYINT (Snowflake stores all of them as NUMBER), and DOUBLE/FLOAT. Structured OBJECT(...)/ARRAY(...)/MAP(...) columns are introspected via SHOW COLUMNS and compared including their nesting.
Logical type mapping
When no physicalType is declared, the CLI derives the native type from the logicalType — for example in datacontract export sql and the dbt exports. This table is generated from the converter in the CLI's code:
logicalType | Snowflake type |
|---|---|
string | STRING |
integer | NUMBER |
number | NUMBER |
boolean | BOOLEAN |
date | DATE |
timestamp | TIMESTAMP_TZ |
time | TIME |
object | OBJECT |
array | ARRAY |