Skip to main content

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 parameterEnvironment variable
usernameDATACONTRACT_SNOWFLAKE_USERNAME
passwordDATACONTRACT_SNOWFLAKE_PASSWORD
warehouseDATACONTRACT_SNOWFLAKE_WAREHOUSE
roleDATACONTRACT_SNOWFLAKE_ROLE
connection_timeoutDATACONTRACT_SNOWFLAKE_CONNECTION_TIMEOUT
authenticatorDATACONTRACT_SNOWFLAKE_AUTHENTICATOR
private_keyDATACONTRACT_SNOWFLAKE_PRIVATE_KEY
private_key_passphraseDATACONTRACT_SNOWFLAKE_PRIVATE_KEY_PASSPHRASE
private_key_pathDATACONTRACT_SNOWFLAKE_PRIVATE_KEY_PATH

account, database, and schema come from the contract's servers block.

Import-specific options

datacontract import snowflake additionally supports:

VariableDescription
DATACONTRACT_SNOWFLAKE_PRIVATE_KEY_FILEPath to a private key file (key-pair auth)
DATACONTRACT_SNOWFLAKE_PRIVATE_KEY_FILE_PWDPassphrase for the private key file
DATACONTRACT_SNOWFLAKE_HOMEDirectory containing a connections.toml
DATACONTRACT_SNOWFLAKE_CONNECTIONS_FILEPath to a connections.toml file
DATACONTRACT_SNOWFLAKE_DEFAULT_CONNECTION_NAMEConnection 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 typelogicalTypeNotes
TEXT, VARCHARstringmaxLength from CHARACTER_MAXIMUM_LENGTH
NUMBER (incl. INT/BIGINT aliases)numberprecision/scale as custom properties
FLOAT, DOUBLEnumber
BOOLEANboolean
DATEdate
TIMESTAMP_NTZ / _LTZ / _TZtimestamp
TIMEtime
BINARYstring (format binary)
ARRAYarray
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:

logicalTypeSnowflake type
stringSTRING
integerNUMBER
numberNUMBER
booleanBOOLEAN
dateDATE
timestampTIMESTAMP_TZ
timeTIME
objectOBJECT
arrayARRAY