This is the implementation of the Snowflake data handler for MindsDB.

Snowflake is a cloud data warehouse that stores and analyzes data. It can automatically scale up/down its compute resources to load, integrate, and analyze data.

Prerequisites

Before proceeding, ensure the following prerequisites are met:

  1. Install MindsDB locally via Docker or use MindsDB Cloud.
  2. To connect Snowflake to MindsDB, install the required dependencies following this instruction.
  3. Install or ensure access to Snowflake.

Implementation

This handler is implemented using the Snowflake connector.

The required arguments to establish a connection are as follows:

  • host is the host name or IP address. The host name comes from the Snowflake link (for example, uvwxyz123.us-west.gcp.snowflakecomputing.com).
  • port is the port used to make TCP/IP connection.
  • database is the database name. You can find it in the Snowflake dashboard under the Databases tab.
  • user is the database user.
  • password is the database password.
  • account is the Snowflake account. The account name comes from the Snowflake link (for example, uvwxyz123.us-west.gcp).
  • schema is the default schema name used to query the database.
  • protocol is the protocol that defaults to https if left blank.
  • warehouse is the warehouse account. You can find it in the Snowflake dashboard under the Warehouses tab.

Usage

In order to make use of this handler and connect to the Snowflake database in MindsDB, the following syntax can be used:

CREATE DATABASE snowflake_datasource
WITH
    ENGINE = 'snowflake',
    PARAMETERS = {
    "host": "uvwxyz123.us-west.gcp.snowflakecomputing.com",
    "port": 443,
    "database": "database_name",
    "user": "user",
    "password": "password",
    "account": "uvwxyz123.us-west.gcp",
    "schema": "schema_name",
    "protocol": "https",
    "warehouse": "warehouse_name"
    };

You can use this established connection to query your table as follows:

SELECT *
FROM snowflake_datasource.example_table;

Please note that the above query uses the provided schema implicitly so it is equivalent to the following:

SELECT *
FROM snowflake_datasource.schema_name.example_table;

If you have access to other schemas available in the connected Snowflake database, then you can query them as below:

SELECT *
FROM snowflake_datasource.other_schema_name.example_table;