Snowflake

  • Verified Versions: 10.8
  • Maintainer: Redgate

Supported Versions and Support Levels

Driver

Item Details
URL format jdbc:snowflake://account.snowflakecomputing.com/?db=database&warehouse=warehouse&role=role
(optionally &schema=schema to specify current schema)
Ships with Flyway Command-line Yes
Maven Central coordinates net.snowflake:snowflake-jdbc
Supported versions 4.0.2 and later
Default Java class net.snowflake.client.api.driver.SnowflakeDriver

Note: The default schema is PUBLIC - if it does not exist or you want to use a different schema ensure you set it in Flyway

Note: When Flyway creates the connection from a JDBC URL, it always sets JDBC_QUERY_RESULT_FORMAT=JSON, because the driver's default Arrow result format fails on Java 16 and later unless the JVM is started with --add-opens=java.base/java.nio=ALL-UNNAMED. Any other value you set is ignored. Flyway also sets application=Redgate_Flyway unless you set application yourself. If you give Flyway your own DataSource, for example with Spring Boot, set JDBC_QUERY_RESULT_FORMAT=JSON on it yourself.

Java Usage

Snowflake support is a separate dependency for Flyway and will need to be added to your Java project to access these features. Snowflake is found within the flyway-database-snowflake plugin module.

Maven

Redgate

<dependency>
    <groupId>com.redgate.flyway</groupId>
    <artifactId>flyway-database-snowflake</artifactId>
</dependency>

Open Source

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-database-snowflake</artifactId>
</dependency>

Gradle

Redgate

buildscript {
    dependencies {
        implementation "com.redgate.flyway:flyway-database-snowflake"
    }
}

Open Source

buildscript {
    dependencies {
        implementation "org.flywaydb:flyway-database-snowflake"
    }
}

SQL Script Syntax

  • Standard SQL syntax with statement delimiter ;

Compatibility

  • DDL exported by the Snowflake web GUI can be used unchanged in a Flyway migration
  • Any SQL script executed by Flyway, can be executed by the Snowflake web GUI (after the placeholders have been replaced)
  • The Snowflake driver requires Java 8+. There is no support from Snowflake for Java 7 users.

Example

/* Single line comment */
CREATE TABLE test_data (
  value VARCHAR(25) NOT NULL PRIMARY KEY
);

/*
Multi-line
comment
*/

-- Sql-style comment

-- Placeholder
INSERT INTO ${tableName} (name) VALUES ('Mr. T');

Key-based Authentication

Snowflake JDBC supports key-based authentication. To use this, you will need to:

  • ensure you are using at least v3.11 of the Snowflake JDBC driver (Flyway ships with a more recent version)
  • generate a public/private key pair
  • assign the public key to the relevant Snowflake user account using ALTER USER - for complete instructions on these steps, refer to Snowflake's documentation
  • If you are using an encrypted key pair then you may need to set a JVM flag for the Snowflake JDBC driver to be able to decrypt it:
    • For example in linux you would do it this way export JAVA_OPTS='-Dnet.snowflake.jdbc.useBundledBouncyCastleForPrivateKeyDecryption=true'

Finally, amend your JDBC connection string with the extra parameters to enable key-based auth and to refer to the location of the private key: authenticator=snowflake_jwt&private_key_file=<absolute-location-of-pem-file>.

Limitations

  • Parallel migrations as described here are unavailable in Snowflake. You can track the status of this feature in our GitHub issues here.

This documentation contains proprietary information and is protected by copyright law.
Copyright © 2026 Red Gate Software Limited. All rights reserved


Didn't find what you were looking for?