Create a Snowflake Data Source

Follow these steps to connect to a Snowflake and create a Snowflake data source:

  1. Configure User Access Rights

  2. Create a Snowflake Data Source

Refer to Additional Information for additional performance tips and information about Snowflake feature support.

Configure User Access Rights

We recommend that you create a dedicated user and user role for integration with the GoodData platform.


  1. Create a user role and grant the following access rights to it.:

    GRANT USAGE ON WAREHOUSE {warehouse_name} TO ROLE {role_name};
    GRANT USAGE ON DATABASE {database_name} TO ROLE {role_name};
    GRANT USAGE ON SCHEMA {database_name}.{schema_name} TO ROLE {role_name};
    GRANT SELECT ON ALL TABLES IN SCHEMA {database_name}.{schema_name} TO ROLE {role_name};
    GRANT SELECT ON FUTURE TABLES IN SCHEMA {database_name}.{schema_name} TO ROLE {role_name};
    GRANT SELECT ON ALL VIEWS IN SCHEMA {database_name}.{schema_name} TO ROLE {role_name};
    GRANT SELECT ON FUTURE VIEWS IN SCHEMA {database_name}.{schema_name} TO ROLE {role_name};
  2. Create a user and grant it with the user role:

    GRANT ROLE {role_name} TO USER {user_name};
  3. Make the user role default for the user:

    ALTER USER {user_name} SET DEFAULT_ROLE={role_name};

Snowflake Authentication Options

Snowflake supports key pair authentication for enhanced security, as an alternative to basic authentication (username and password).

  • Default Method: Basic authentication, requiring a user password.
  • Key Pair Method: Requires a private key and optional encryption passphrase.

You can switch between these methods when creating or editing your Snowflake data source. Both methods support the same range of queries.

Create a Snowflake Data Source

Once you have configured your Snowflake user’s access rights, you can proceed to create a Snowflake data source that you can then connect to.



  1. On the home page switch to Data sources.

    data sources tab
  2. Click Connect data.

    connect data
  3. Select Snowflake.

    select data source type
  4. Name your data source, fill in your Snowflake credentials and click Connect:

    You can choose between key pair or basic authentication. See the Snowflake Authentication Options section for details.

    db cretentials
    db cretentials
  5. Input your schema name and click Save:

    db cretentials

    Your data source is created!

    db creation complete


  1. Create a Snowflake data source with the following API call:

    curl $HOST_URL/api/v1/entities/dataSources \
      -H "Content-Type: application/vnd.gooddata.api+json" \
      -H "Accept: application/vnd.gooddata.api+json" \
      -H "Authorization: Bearer $API_TOKEN" \
      -X POST \
      -d '{
        "data": {
        "type": "dataSource",
        "id": "<unique_id_for_the_data_source>",
        "attributes": {
          "name": "<data_source_display_name>",
          "url": "jdbc:snowflake://<SNOWFLAKE_ACCOUNT><SNOWFLAKE_WAREHOUSE>&db=<SNOWFLAKE_DBNAME>",
          "schema": "<SNOWFLAKE_SCHEMA>",
          "type": "SNOWFLAKE",
          "username": "<SNOWFLAKE_USER>",
          "password": "<SNOWFLAKE_PASSWORD>" # If you want to use the key pair authentication, this can be swapped for the privateKey and privateKeyPassphrase parameters.
      }' | jq .

    See the API reference guide for further details.

  2. To confirm that the data source has been created, ensure the server returns the following response:

      "data": {
        "type": "dataSource",
        "id": "<unique_id_for_the_data_source>",
        "attributes": {
          "authenticationType": "<type-of-authentication>",
          "name": "<data_source_display_name>",
          "url": "jdbc:snowflake://<SNOWFLAKE_ACCOUNT><SNOWFLAKE_WAREHOUSE>&db=<SNOWFLAKE_DBNAME>",
          "schema": "<SNOWFLAKE_SCHEMA>",
          "type": "SNOWFLAKE",
          "username": "<SNOWFLAKE_USER>"
      "links": {
        "self": "$HOST_URL/api/v1/entities/dataSources/<unique_id_for_the_data_source>"

Create a Snowflake data source with the following API call:

from gooddata_sdk import GoodDataSdk, CatalogWorkspace, BasicCredentials, CatalogDataSourceSnowflake, SnowflakeAttributes

host = "<GOODDATA_URI>"
token = "<API_TOKEN>"
sdk = GoodDataSdk.create(host, token)


Additional Information

Ensure you understand the following limitations and recommended practice.

Data Source Details

  • The JDBC URL must be in the following format:


  • Basic authentication is supported. Specify user and password.

  • If you use native authentication inside your cloud platform (for example, Google Cloud Platform, Amazon Web Services, or Microsoft Azure), you do not have to provide the username and password.

  • GoodData uses up-to-date drivers.

Performance Tips

If your database holds a large amount of data, consider the following practices:

  • GoodData’s connection pool allows for up to 24 connections. Snowflake’s default setting permits only 8 connections. We recommend increasing your Snowflake’s connection pool size to 24.
  • Denormalize the relational data model of your database. This helps avoid large JOIN operations. Because Snowflake is a columnar database, queries read only the required columns and each column is compressed separately.
  • Spin up databases/instances based on user needs.
    • Users with similar needs populate data into caches that are likely reused.
    • Isolate data transformation operations running in your database from the analytics generated by GoodData.
  • Set up proper auto-scaling based on users needs.
  • Utilize materialized views
    • Changes to underlying tables are propagated to related materialized views, they are always consistent
    • Materialize results of JOINs / aggregations which are executed very often as a result of execution of dashboards / visualizations from GoodData
      • Map materialized views and their columns to datasets and LDM and utilize them in metrics / visualizations / dashboards

Query Timeout

The default timeout value for queries is 160 seconds. If a query takes longer than 160 seconds, it is stopped. The user then receives a status code 400 and the message Query timeout occurred.

Query timeout is closely related to the ACK timeout. For proper system configuration, the ACK timeout should be longer than the query timeout. The default ACK timeout value is 170 seconds.

Permitted parameters

  • db
  • loginTimeout
  • networkTimeout
  • ocspFailOpen
  • passcode
  • passcodeInPassword
  • useProxy
  • proxyHost
  • proxyPort
  • proxyUser
  • proxyPassword
  • proxyProtocol
  • queryTimeout
  • role
  • stringsQuotedForColumnDef
  • token
  • warehouse