snowflakedb / snowflake-jdbc

Snowflake JDBC Driver
Apache License 2.0
178 stars 170 forks source link
database java jdbc sql

Snowflake JDBC Driver


.. image:: https://github.com/snowflakedb/snowflake-jdbc/workflows/Build%20and%20Test/badge.svg?branch=master :target: https://github.com/snowflakedb/snowflake-jdbc/actions?query=workflow%3A%22Build+and+Test%22+branch%3Amaster

.. image:: https://codecov.io/gh/snowflakedb/snowflake-jdbc/branch/master/graph/badge.svg?token=Mj6uPxk0pV :target: https://codecov.io/gh/snowflakedb/snowflake-jdbc

.. image:: http://img.shields.io/:license-Apache%202-brightgreen.svg :target: http://www.apache.org/licenses/LICENSE-2.0.txt

.. image:: https://maven-badges.herokuapp.com/maven-central/net.snowflake/snowflake-jdbc/badge.svg?style=plastic :target: https://repo1.maven.org/maven2/net/snowflake/snowflake-jdbc/

Snowflake provides a JDBC type 4 driver that supports core functionality, allowing Java program to connect to Snowflake.

Prerequisites

The Snowflake JDBC driver requires Java 1.8 or higher. If the minimum required version of Java is not installed on the client machines where the JDBC driver is installed, you must install either Oracle Java or OpenJDK.

Installation

Maven

Add following dependency for fat-jar

.. code-block:: xml

<dependency>
  <groupId>net.snowflake</groupId>
  <artifactId>snowflake-jdbc</artifactId>
  <version>{version}</version>
</dependency>

or for FIPS compliant fat-jar

.. code-block:: xml

<dependency>
  <groupId>net.snowflake</groupId>
  <artifactId>snowflake-jdbc-fips</artifactId>
  <version>{version}</version>
</dependency>

or for experimental thin-jar

.. code-block:: xml

<dependency>
  <groupId>net.snowflake</groupId>
  <artifactId>snowflake-jdbc-thin</artifactId>
  <version>{version}</version>
</dependency>

Build from Source Code

  1. Checkout source code from Github by running:

.. code-block:: bash

git clone https://github.com/snowflakedb/snowflake-jdbc.git
  1. Build the fat-jar and install it in local maven repository by running:

.. code-block:: bash

./mvnw clean verify
./mvnw org.apache.maven.plugins:maven-install-plugin:3.1.1:install-file -Dfile=target/snowflake-jdbc.jar -DpomFile=./public_pom.xml
  1. Build the FIPS compliant fat-jar and install it in local maven repository by running:

.. code-block:: bash

cd FIPS
../mvnw clean verify
../mvnw org.apache.maven.plugins:maven-install-plugin:3.1.1:install-file -Dfile=target/snowflake-jdbc-fips.jar -DpomFile=./public_pom.xml
cd -
  1. Build the experimental thin-jar and install it in local maven repository by running:

.. code-block:: bash

./mvnw clean verify -Dnot-self-contained-jar -Dthin-jar
./mvnw org.apache.maven.plugins:maven-install-plugin:3.1.1:install-file -Dfile=target/snowflake-jdbc-thin.jar -DpomFile=./thin_public_pom.xml -Dnot-self-contained-jar -Dthin-jar
  1. Note that the built dependencies are installed with version 1.0-SNAPSHOT

Usage

Load Driver Class

.. code-block:: java

Class.forName("net.snowflake.client.jdbc.SnowflakeDriver")

Datasource

javax.sql.DataSource interface is implemented by class

.. code-block:: java

net.snowflake.client.jdbc.SnowflakeBasicDataSource

Connection String

US(West) Region:

.. code-block:: bash

jdbc:snowflake://<account>.snowflakecomputing.com/?<connection_params>

EU(Frankfurt) Region:

.. code-block:: bash

jdbc:snowflake://<account>.eu-central-1.snowflakecomputing.com/?<connection_params>

Documentation

For detailed documentation, please refer to https://docs.snowflake.net/manuals/user-guide/jdbc.html

Development

Run the maven command to check the coding style.

.. code-block:: bash

mvn -P check-style validate

Follow the instruction if any error occurs or run this command to fix the formats.

.. code-block:: bash

mvn com.spotify.fmt:fmt-maven-plugin:format

You may import the coding style from IntelliJ so that the coding style can be applied on IDE:

Tests

Run Tests

Set the environment variables to specify the target database.

.. code-block:: bash

export SNOWFLAKE_TEST_HOST=<your_host>
export SNOWFLAKE_TEST_ACCOUNT=<your_account>
export SNOWFLAKE_TEST_USER=<your_user>
export SNOWFLAKE_TEST_PASSWORD=<your_password>
export SNOWFLAKE_TEST_DATABASE=<your_database>
export SNOWFLAKE_TEST_SCHEMA=<your_schema>
export SNOWFLAKE_TEST_WAREHOUSE=<your_warehouse>
export SNOWFLAKE_TEST_ROLE=<your_role>

Run the maven verify goal.

.. code-block:: bash

mvn -DjenkinsIT -DtestCategory=net.snowflake.client.category.<category> verify

where category is the class name under the package net.snowflake.client.category.

Set new version

  1. Run maven command with passing specific version:

.. code-block:: bash

mvn -f parent-pom.xml versions:set -DnewVersion=... -DgenerateBackupPoms=false

  1. Set manually the same version in field implementVersion in src/main/java/net/snowflake/client/jdbc/SnowflakeDriver.java when it's version for release or without -SNAPSHOT suffix between releases
  2. Add entry in CHANGELOG.rst for release versions

Test Class Naming Convention

The test cases are fallen into a couple of criteria:

Aside from the general test criteria, the test case class names ending with LatestIT run only with the latest JDBC driver. The main motivation behind is to skip those tests for the old JDBC driver. See ./TestOnly directory for further information.

Support

Feel free to file an issue or submit a PR here for general cases. For official support, contact Snowflake support at: https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge

Note

This driver currently does not support GCP regional endpoints. Please ensure that any workloads using through this driver do not require support for regional endpoints on GCP. If you have questions about this, please contact Snowflake Support.