ThoughtSpot acquires Mode to define the next generation of collaborative BI >>Learn More

Supported databases

Connectivity policy

Mode currently supports connectivity to customer data using Java Database Connectivity (JDBC) drivers. Mode does not write JDBC drivers. We contract the use of proprietary JDBC drivers or use established & well-supported open source JDBC drivers.

For Preferred & Supported databases, Mode ensures functionality for all versions of the database server currently actively maintained by the database vendor. Mode does not ensure continued functionality for database server versions that have reached end of life or for database types that are not explicitly supported.

Mode will usually support or recommend only one driver per database type. However, to enable customers flexibility during their update process, we will enable customers to use either the recommended or the most recent version until the next update (either 6 or 12 months). Mode will usually provide 6 months’ notice to customers before driver removal, although we reserve the right to remove drivers with known security issues on less notice.

Driver deprecation

Mode will mark for deprecation and set removal dates for older versions of drivers. We generally set removal dates for the oldest drivers 6 months out, when adding new versions of drivers.

Drivers that are past their removal date cannot be used to connect to Mode. The removed driver will no longer be available in the Preferred JDBC driver dropdown of the connection’s details.

On the removal date, any connections still using that driver will be updated by Mode to use the latest recommended driver. This may cause connectivity issues. Mode encourages customers to update their preferred drivers shortly following announced updates.

Support levels

For the listed database types below, Mode aims to support all versions of the database actively supported by the database vendor or appropriate open source community.

Tier 1: Preferred

These database and integration types are fully supported by Mode and drivers are upgraded at least semi-annually. We are committed to improving the experience of users connecting Mode to datasources of these types, and will fix issues based on severity and demand. As part of our release process, Mode runs exhaustive integration tests against all types in this tier to ensure quality.

Database / Integration TypeDatabase Version SupportBridge
Amazon RedshiftOptional
PostgreSQL9.5, 9.6, 10, 11, 12, 13, 14, 15Optional
MySQL5.6, 5.7, 8.0Optional
Google BigQueryNot Supported
SnowflakeOptional
Amazon AthenaNot Supported
Microsoft SQL Server2012, 2014, 2016, 2017, 2019Optional
Starburstversions up to 413Optional
Trino (formerly PrestoSQL)versions up to 413Optional
Hive1.0.0 - 3.1Optional
Google AlloyDBOptional
Azure SQL DatabaseOptional
Azure Synapse SQLOptional
dbt Semantic Layer12.0.1Not Supported
Looker SQLNot Supported

Tier 2: Supported

These database types are fully supported by Mode and drivers are upgraded annually. We are committed to improving the experience of users connecting Mode to datasources of these types, and will fix issues based on severity and demand. As part of our release process, Mode runs integration tests against all types in this tier to ensure quality.

Database TypeDatabase Version SupportBridge
Oracle11.2, 12.1, 12.2, 18c, 19c, 21cRequired
Oracle Autonomous DatabaseOptional
ClickHouseOptional
Impala2.8 - 3.2Required
Amazon Aurora MySQLOptional
Vertica7.2 - 10.1.1Required
DatabricksOptional
SingleStoreOptional
TeradataOptional
Amazon Aurora PostgreSQLOptional
Treasure DataOptional
Apache Druid0.20.1Required
Denodo8.0Optional
Arrow Flight SQLNot Supported

Tier 3: Works, not Supported

These database types are partially supported by Mode, but the database vendor’s recommended driver is not used. Mode is able to connect to these database types because of similarities of SQL dialects or shared database servers. Mode makes no commitment to improve implementation, fix issues, or regularly run tests against these database types.

Database TypeDatabase Version SupportBridge
MariaDBOptional
TenjinOptional
MemSQLNot Supported
CitusNot Supported
TimescaleNot Supported
mParticleOptional
Spark1.6, 2.1 - 3.0Optional
PrestoDBup to version 0.240Optional

Databases

NOTE: If the database supports multiple Drivers, use the Manage Connections page to update to your prefered driver.

Amazon Athena

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
Amazon v 3.2.27/22/2024
(Recommended) Simba v 2.1.1.10017/31/2023
Simba v 2.0.35.100112/22/2022
Simba v 2.0.33.100110/4/2022
Simba v 2.0.31.10015/30/2022
Simba v 2.0.27.10011/13/2022
Simba v 2.0.23.10006/10/2021
Simba v 2.0.18.10001/29/2021
Simba v 2.0.13.10006/9/2020

Mode recommends connecting via the Simba Athena driver because it is the official driver endorsed by Amazon.

The following are known issues with the current supported drivers. Mode continues to advocate on our customers’ behalf for vendors & open source communities to resolve these issues.

DriverKnown IssueFurther Details
Simba v 2.0.27.1001Queries with special characters failingQueries with special characters (e.g. ‘√ß’ and ‘√Ö,) are failing with String index out of range error. As a workaround, use the previous version of the driver (2.0.23.1000).
Simba v 2.0.13.1000Requires additional IAM Permissions for QueriesThis version of the driver requires that the Mode user’s IAM permissions include the athena:ListDataCatalogs permission. This permission is required for query execution via Mode (not just the Schema Browser).

Customers whose Mode user is managed via the AmazonAthenaFullAccess Managed Policy will not experience issues.
Simba v 2.0.13.1000Schema refreshes fail with Null Pointer Exception for external data sourcesAttempts to get or update schemas when Athena is connected to non-Hive (PostgreSQL confirmed) external data sources results in a Null Pointer Exception. For customers whose Athena instance includes external data sources, automatic refresh of the database’s schema data should be disabled and the Mode Schema Browser will be unable to display data.

Database configuration instructions

The Mode user’s IAM permissions must include athena:ListDatabases & athena:ListDataCatalogs. In addition, ensure that port 444 is open to outbound traffic.

Connecting to Mode via Access keys

  1. Follow the steps to connect a database with Direct Connect.

  2. Select Amazon Athena from the list of databases.

  3. Fill out your AWS region to be formatted like us-west-2.

  4. Select Authentication method: Access keys in the Mode connection form.

  5. The AWS Access Key and Access Secret should be for the AWS user you want to connect through. When creating an Athena connection, we recommend creating a user in AWS that only has access to the data you want to query through Athena. For data you want to query, the AWS user only needs read access.

  6. The S3 Results Directory should be a bucket where Athena can write query results. For this bucket, the AWS user specified above needs read and write access. The bucket should be a full S3 url (e.g., s3://acme/my/athena/bucket)

  7. Click Connect. You will land on a page that displays your database schema.

Connecting to Mode via IAM role

  1. Follow the steps to connect a database with Direct Connect.

  2. Select Amazon Athena from the list of databases.

  3. Fill out your AWS region to be formatted like us-west-2.

  4. Select Authentication method: IAM role in the Mode connection form.

  5. Navigate to IAM Roles in your AWS Console.

Athena

  1. Create a new role or choose an existing role and select Custom trust policy under Trusted entity type.

Athena

  1. Alternatively, you can choose an existing role and select the Trust relationships tab.

Athena

  1. Copy and paste the trust relationship from the Mode connection form into your AWS IAM Role.

Athena

  1. Add in the necessary IAM permissions to access your Athena resource (must include athena:ListDatabases & athena:ListDataCatalogs)

  2. Click Create Role in AWS and paste in the IAM Role ARN into the Mode connection form.

  3. The S3 Results Directory should be a bucket where Athena can write query results. For this bucket, the AWS user specified above needs read and write access. The bucket should be a full S3 url (e.g., s3://acme/my/athena/bucket)

  4. Click Connect. You will land on a page that displays your database schema.

Amazon Redshift

Additionally supports: mParticle Redshift, Tenjin Redshift

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Amazon Redshift v 2.1.0.296/6/2024
Amazon Redshift v 2.1.0.133/30/2023
Amazon Redshift v 2.1.0.312/3/2021
Amazon Redshift v 2.0.0.77/23/2021
Amazon Redshift v 2.0.0.32/25/2021

The following are known issues with the current supported drivers. Mode continues to advocate on our customers’ behalf for vendors & open source communities to resolve these issues.

DriverKnown IssueFurther Details
AllDate functions not displaying correctlyDate functions like DATE_TRUNC do not work as expected due to Mode's results formatter. Workaround is to use a function to convert the date to string.
AllSchema access privilegesRedshift shows all schemas to users even if they don't have permissions to them. The Redshift team confirmed there is a feature request to restrict access, but currently no ETA.

Database configuration instructions

Amazon Redshift

Depending on your Amazon settings, you may need to grant Mode access to your Redshift security group:

  1. Navigate to the Redshift Management Console.

  2. Select Clusters from the left navigation bar.

  3. Click on the cluster you want to connect.

    Redshift

  4. Find Cluster Security Groups under Cluster Properties and click on the cluster's security group.

    Redshift

    Note: If you are using VPC Security Groups, you must also grant Mode access to that security group. Please click on your VPC Security Group name and follow this section of our Amazon RDS guide, starting with step 2.

  5. Click on the name of the security group.

    Redshift

  6. You'll see a list of authorized connections. Click the blue "Add Connection Type" button in the upper left.

  7. Select "CIDR/IP" from the "Connection Type" dropdown, and paste the address 54.68.30.98/32 in the "CIDR/IP to Authorize" field.

    Redshift

  8. Click the blue "Authorize" button

  9. Repeat steps 5 through 7 for each of the addresses listed below:

    • 54.68.45.3/32
    • 34.209.23.118/32
    • 54.188.241.100/32
    • 52.43.195.103/32
    • 3.224.146.111/32
    • 54.221.238.89/32
    • 52.20.173.236/32

Connecting to Mode via IAM role

  1. Follow the steps to connect a database with Direct Connect.

  2. Select Amazon Redshift from the list of databases.

  3. Select Authentication method: IAM role in the Mode connection form.

  4. Navigate to IAM Roles in your AWS Console.

Athena

  1. Create a new role or choose an existing role and select Custom trust policy under Trusted entity type.

Athena

  1. Alternatively, you can choose an existing role and select the Trust relationships tab.

Athena

  1. Copy and paste the trust relationship from the Mode connection form into your AWS IAM Role.

  2. Add in the necessary IAM permissions to access your Redshift resource.

  3. Click Create Role in AWS and paste in the IAM Role ARN into the Mode connection form.

  4. Click Connect. You will land on a page that displays your database schema.

mParticle Redshift

mParticle supports both mParticle-hosted and client-hosted Redshift clusters. If you’re using an mParticle hosted Redshift cluster, log in to the mParticle platform and navigate to the Redshift Configuration tab. There, you’ll find your connection string and user credentials.

mParticle Redshift

You can also allowlist Mode's servers by editing the list of allowed IP addresses on mParticle UI, which will update the AWS security group settings associated with your Redshift cluster. Once you have your credentials, follow the steps below to connect Mode:

  1. Log in to Mode and follow to steps to connect a database to Mode.
  2. Select mParticle Redshift from the list of databases.
  3. Enter your mParticle credentials and click Connect. You'll land on a page that displays your database schema.
  4. Click “New Query” in the top navigation to start writing queries!

Tenjin Redshift

Once you’ve activated the DataVault feature on your Tenjin account, you can access your DataVault credentials by logging in to the dashboard and navigating to Menu -> DataVault Credentials.

For additional questions about getting your DataVault credentials, please free to contact support@tenjin.io.

Apache Druid

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Apache Avatica 1.25.04/5/2024
Apache Avatica 1.23.01/19/2023
Apache Avatica 1.18.05/18/2021
Apache Avatica 1.17.06/21/2020

The following are known issues with the current supported drivers. Mode continues to advocate on our customers’ behalf for vendors & open source communities to resolve these issues.

DriverKnown IssueFurther Details
Avatica 1.17.0Druid fetch size limited to 100Druid JDBC driver only returns 100 rows per batch resulting in longer-than-expected query response times. There is a server side fix that can be applied.
Avatica 1.17.0Druid Basic Authentication is unsupportedMode currently requires Druid connections over Bridge.
Avatica 1.17.0Connection context properties are unsupportedMode currently does not support changing the Druid broker’s setting for the connection via JDBC properties.
Avatica 1.17.0Only Druid SQL supportWhen connecting to Druid via JDBC, only Druid SQL syntax is supported. Native (json-type) query syntax will result in errors.
Avatica 1.17.0Druid SQL limitationsNot all Druid features are supported via Druid SQL and JDBC connectivity. Please see the Druid docs.
Avatica 1.17.0Single Schema SupportMode’s Schema Browser will surface only tables found in the default druid schema
Avatica 1.17.0Query cancellation is unsupportedDruid supports cancellation for native (json-type) queries, but not for Druid SQL queries. If users attempt to cancel a query in the Mode UI, the query run will not be interrupted. The driver does not return an error, so Mode is unable to surface anything to the user.

Connecting to Mode

When connecting Druid to Mode, fill out the connection form as follows:

  1. Display name: the name of the connection used in the Schema Browser.
  2. Description: optional additional context viewable in Connection Management.
  3. Host: the route of the Druid cluster Broker, as specified in the broker/runtime.properties file.
  4. Port: the port of the Broker. The default port is 8082. If your cluster is secured by SSL, the default port is 8182.
  5. Preferred JDBC Driver: the Avatica 1.17.0 driver is the only current driver.
  6. Disable transport encryption: Mode strongly recommends that transport encryption be enabled and that Druid be configured to use TLS v.1.2. If disable, connections between the Bridge connector and your database will not be encrypted.

Please note the following limitation of broker connection stickiness over JDBC:

“Druid's JDBC server does not share connection state between Brokers. This means that if you're using JDBC and have multiple Druid Brokers, you should either connect to a specific Broker, or use a load balancer with sticky sessions enabled. The Druid Router process provides connection stickiness when balancing JDBC requests, and can be used to achieve the necessary stickiness even with a normal non-sticky load balancer.”

Arrow Flight SQL

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Arrow Flight SQL version 12.0.16/13/2023

There are no known issues with this driver.

ClickHouse

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Clickhouse version 0.6.16/10/2024
(Experimental) Clickhouse-jdbc v0.3.2-patch117/28/2022

There are no known issues with this driver.

Databricks

Additionally supports: Spark

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Simba Spark v 2.6.38.10685/4/2024
Simba Spark v 2.6.33.10555/22/2023
Simba Spark v 2.6.21.103912/24/2021
Simba Spark v 2.6.17.10236/17/2021

Mode recommends connecting via the Simba Spark driver because it is the official driver endorsed by Databricks.

The following are known issues with the current supported drivers. Mode continues to advocate on our customers’ behalf for vendors & open source communities to resolve these issues.

DriverKnown IssueFurther Details
Simba v 2.6.17.1021Does not support Unity CatalogPlease use v 2.6.21.1039 or newer to utilize Untiy Catalog.
Simba v 2.6.17.1021Dates return incorrectly prior to 10/15/1582When using Spark 2.4.4 to Spark 3.0, DATE and TIMESTAMP data before October 15, 1582 may be returned incorrectly if serializing query results using Apache Arrow.

As a workaround, add EnableArrow=0 in your connection URL to disable the Arrow result set serialization feature.
Simba v 2.6.17.1021Does not support Spark version 2.1The driver no longer supports servers that run Spark version 2.1.
Simba v 2.6.17.1021Strings in Binary ColumnsQueries return binary results (not strings) for binary datatype columns.

For example, if I insert "hi" in a binary column, where I previously would see "hi" returned by the driver, I now see "6869".
Simba v 2.6.17.1021Deprecated VersionsSupport for Spark 1.6, 2.1, and 2.2 is deprecated, and will be removed in a future release of this driver. The driver only supports connections to Spark Thrift Server instances. It does not support connections to Shark Server instances.

Gather JDBC connection parameters

Connecting to Databricks requires a running Spark cluster configured with SSL enabled and using HTTPS as the underlying thrift protocol (this is the default configuration for new clusters).

Connecting to Mode

  1. Follow these steps to connect a Databricks database. Change the display name to something that helps you recognize the database behind the connection.
  2. Fill in the host, token, and HTTP path fields with the information you gathered above.
  3. Click "Connect" to save the new connection.

Supported SQL Dialect

Mode supports connecting to Databricks clusters via their embedded Hive server using Hive's open source JDBC driver. This restricts the supported SQL dialect to HiveQL; we currently do not support querying in Spark SQL, though we may add support for it at a later date.

Automatic cluster termination

Databricks "Standard" Spark clusters are configured by default to automatically terminate after 120 minutes of inactivity. The Hive JDBC driver cannot trigger the cluster to automatically restart, so you may want to adjust the timeout or disable automatic termination per Databricks' documentation. If the driver attempts to connect to the server after it's been shut down, the connection attempt will fail until the cluster is restarted manually.

Unity Catalog

Mode has added three level namespace support (catalog.schema.table) for Databricks to support Unity Catalog. The catalog and schema are now concatenated at the top level in the Schema Browser.

dbt Semantic Layer

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Arrow Flight SQL version 12.0.16/13/2023

Connecting to Mode

You will also need the following to set up the connection in Mode:

  • dbt Cloud Hostname: The hostname for the instance of dbt cloud.
  • Environment Id: The unique identifier for a dbt environment in the dbt Cloud URL, when you navigate to that environment under Deployments.
  • Service Token: Service Tokens for dbt Cloud can be created in dbt account settings, and must have at least "Semantic Layer Only" permissions.

Start by connecting a database.

From the dropdown, select dbt Semantic Layer.

Writing metrics queries in Mode

To write a new metrics query, navigate to the SQL editor and select your dbt Semantic Layer connection from the database dropdown.

By default, this connection will surface all available schemas and tables. To reference a metric within your query, use the following syntax:

Note all queries need to be wrapped in {%raw %} {% endraw %} tags.

For example:

{% raw %}
select * from {{ 
	semantic_layer.metrics() 
}}
{% endraw %}

Denodo

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Denodo Platform version 8.0.202102092/9/2021

Important: do not use this driver to connect to a Virtual DataPort server with an update previous to 20210209.

Google AlloyDB

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) PostgreSQL v 42.7.48/23/2024
PostgreSQL v 42.6.03/18/2023
PostgreSQL v 42.3.22/15/2022
PostgreSQL v 42.2.237/6/2021
PostgreSQL v 42.2.192/18/2021
PostgreSQL v 42.2.146/4/2020

There are no known issues with this driver.

Database configuration instructions

  1. Log into Mode and select connect a Database in the dropdown menu under your profile in the left panel.
  2. Select Google AlloyDB from the list of databases.
  3. You can utilize Bridge connector if you have a private IP address.
  4. Enter your Google AlloyDB credentials and click connect.
    a. Host / Port: Host name or IP address and Port of the server hosting AlloyDB
    b. Database name: The database to connect to for AlloyDB
    c. Username / Password: The username and passowrd to authenticate with AlloyDB

Google BigQuery

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Simba v 1.6.1.10027/23/2024
Simba v 1.3.3.10045/25/2023
Simba v 1.2.23.10274/28/2022
Simba v 1.2.21.102510/28/2021
Simba v 1.2.16.10205/7/2021
Simba v 1.2.12.101511/30/2020
Simba v 1.2.11.10148/28/2020

Mode recommends connecting via the Simba Big Query driver because it is the official driver endorsed by Google.

The following are known issues with the current supported drivers. Mode continues to advocate on our customers’ behalf for vendors & open source communities to resolve these issues.

DriverKnown IssueFurther Details
Simba v 1.3.2.1003 and olderNullpointer exceptionsThis driver is known to cause null pointer exceptions (e.g. when a table has unicode column names) so will be removed and replaced with the newest version where this issue is fixed
Simba v 1.2.23.1027 and olderDoes not support JSON formatPlease utilize 1.3.0.1001 or newer versions to work with JSON data
Simba v 1.2.21.1020Read timed out errorQueries occasionally encounter a read timed out error.
The driver introduced this error after changing how timeouts work, but fixed in the subsequent version.
Mode is still confirming the fix, and suggests using an older version if issue still persists.
Simba v 1.2.16.1020DDL/DML commands in commentsNull pointer exception when using DDL/DML commands (e.g. create, update) in single line comments (e.g. -- services created and deleted by month). As a workaround, use the /* */ format.
Simba v 1.2.16.1020Large queries need the 'bigquery.readsessions.create' permissionLarge queries trigger the Google Storage API which is free to use for anonymous tables,but requires admins to add the 'bigquery.readsessions.create' to their Google Big Query role associated with the Mode DB connection.
java.sql.SQLException: [Simba] BigQueryJDBCDriver 100210 Error initializing the Storage API.
Message : io.grpc.StatusRuntimeException: PERMISSION_DENIED: request failed:the user does not have 'bigquery.readsessions.create' permission
Simba v 1.2.11.1014Nested rows return as objects vs. arrays using Mode driverUtilize UNNEST and ARRAY_AGG to view nested rows as arrays.
select author, ARRAY_AGG(title) as title,
ARRAY_AGG(year) as year from testdb,
UNNEST(works) group by author
Simba v 1.2.11.1014Batch priority is unsupportedThe specification of job priority is unsupported. All queries are executed as "interactive" priority, never "batch" priority.

Google Big Query batch priority is described here: https://cloud.google.com/bigquery/docs/running-queries#batch
Simba v 1.2.11.1014Necessary permissionsTo connect via this driver, the service account should have the roles BigQuery Data Viewer and BigQuery Job User.

In addition, the Mode GBQ service account must have the bigquery.jobs.list permission. This permission can be added via several roles. Mode recommends either BigQuery Resource Viewer or BigQuery User, although broader access will also function.

The Mode user would additionally need BigQuery Data Editor role if the queries users execute from Mode are expected to be able to write to the database (e.g. DROP, CREATE, UPDATE). Temporary functions use and temporary table creation & deletion do not require this permission.

Database configuration instructions

To connect Mode to your BigQuery project, you will need to create a service account for Mode to use.

  1. Navigate to the Google Developers Console. Before proceeding, click on the drop down to the right of Google Cloud and select the project to which you want to connect.

    BigQuery

    NOTE: If you do not see the project you would like to connect to listed in the drop down, click on the account switcher in the upper right corner of the window and ensure you are logged in to a Google account that is a member of the project.

  2. Click on the hamburger menu in the upper left and select IAM & Admin and then Service accounts. Click the Create service account button.

    BigQuery

  3. Give your new service account a name, pick a unique ID, and add a description. Click Create and continue.

    BigQuery

  4. Grant required roles, e.g. BigQuery Job User and BigQuery Data Viewer.

    BigQuery

  5. Finally, click Done to create your service account. Now we create the JSON key file. Navigate to Manage keys under the Actions menu for the service account.

    BigQuery

  6. Navigate to ADD KEY > Create new key.

    BigQuery

  7. Click CREATE to create and download the JSON key file. Save the private key file to a secure place where you can easily retrieve it when setting up the connection in Mode.

    BigQuery

  8. Return to Mode, and begin the process to connect a BigQuery database. When you see the form to enter your BigQuery credentials, first enter a name (internal to Mode) for the new database connection.

  9. In the Project ID field, enter the BigQuery project ID. It can be found in the URL of your Google Developers Console. The URL should be structured like this:

    https://console.developers.google.com/apis/library?project=MY_PROJECT_ID
    
  10. In the Service Account Email Address field, add your service account's email address that you noted in step 3.

  11. Under the Key field, click Choose File and select the private key file you downloaded in step 6.

  12. Click Connect to complete the connection.

Standard vs. legacy SQL

When connecting to BigQuery, you will choose either legacy SQL or standard SQL as the default SQL dialect for that connection. Most users choose standard SQL, which is similar to industry standard SQL dialects used by other databases.

Regardless of your choice as the connection's default, users can specify which dialect they would like to use on a query-by-query basis by including either #standardSQL or #legacySQL in the Query Editor.

a Workspace admin can change the default SQL preference a BigQuery connection at any time by following these steps:

  1. Navigate to the Mode home page
  2. Click on your name in the upper left corner of the window.
  3. Click Workspace Settings.
  4. Under the Data section, click Connections.
  5. Click on the BigQuery connection you want to update.
  6. In the upper right corner of the page click on Settings
  7. Toggle standard SQL on or off.
  8. Before your settings are updated, you will need to re-upload your service account's P12 key. Learn more about BigQuery service accounts and P12 keys.
  9. Click Save Changes.

IMPORTANT: Take care when changing the default SQL dialect for an existing connection, as any queries written using that connection that are written in the previous default SQL dialect may no longer work.

Connecting to Mode

  1. Return to Mode, and begin the process to connect a BigQuery database. When you see the form to enter your BigQuery credentials, first enter a name for the new database connection.
  2. In the Project ID field, enter the BigQuery project ID. It can be found in the URL of your Google Developers Console. The URL should be structured like this: https://console.developers.google.com/apis/library?project=MY_PROJECT_ID
  3. In the Service Account Email Address field, add your service account's email address that you noted in step 4.
  4. Under the Key field, click Choose File and select the private key file you downloaded in step 3.
  5. Click Connect to complete the connection.

Use BigQuery to query Google Sheets

You can use Mode to query Google Sheets in BigQuery. The first step, enabling your Google Drive API, only needs to be done once.

  1. Enable Google Drive API

    Navigate to the Google Developer Console and select your project from the project dropdown menu. From the left menu, click on Library. Under Google Apps API, click on Drive API to enable the API from that page.

  2. Create a table in BigQuery from your Google Sheet

    Go to the BigQuery Web UI. In the navigation, hover over a schema name and click the down arrow icon next to the name. Choose Create new table.

    GoogleSheets

    Select Google Drive for the new table's location and paste the Google Sheet URL (not the shared link but the actual URL you use to view the Sheet) into this field. Choose Google Sheets as the Format. Then add all the column names and types from your Google Sheet under Schema. Click Create Table when ready.

    GoogleSheets

  3. Enable Google Sheets for Mode Use

    • For Mode to query your new table, share your Google Sheet with the service account email address you used to connect Mode to BigQuery. You can also share folders in your drive with this email address, which will allow Mode to query every sheet in that folder.
    • To get your service account email address, go to your Google Cloud Console, switch to your Project, and click on Service Accounts. Copy the service account email address you used to connect Mode to BigQuery.
    • To share a sheet or folder, click Share on the Google Sheet or in the folder, and paste the service account email address into the Share email field.
    • Note that BigQuery schemas don't refresh automatically in Mode. To see this table appear in your schema browser, go to Workspace Settings and click Connections under the Data section. Choose your Big Query connection, and click the green Refresh button in the upper right corner to update the schema browser in Mode.

Hive

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
Apache Hive version 3.1.34/10/2022

There are no known issues with this driver.

Impala

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
Apache Hive version 3.1.34/10/2022

There are no known issues with this driver.

Looker SQL

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Avatica Looker version 1.24.18/6/2024
Avatica Looker version 1.23.49/20/2023

For known limitations, see Looker's documentation.

Connecting to Mode

You will also need the following to set up the connection in Mode:

  • Host: The url of your Looker instance (e.g. test123.looker.com).
  • Username: The Client ID portion of the Looker API key.
  • Password: The Client Secret portion of the Looker API key.

Start by connecting a database.

From the dropdown, select Looker SQL.

Writing Looker SQL queries in Mode

To write a new Looker SQL query, navigate to the SQL editor and select your Looker Open SQL connection from the database dropdown.

By default, this connection will surface all available schemas (LookML Models) and tables (Explores) . To reference a field within your query, use the following syntax:

Note to use backticks around schema, table, and column identifiers. Wrap any LookML measures in the special function AGGREGATE() whether it is in a SELECT clause, a HAVING clause, or an ORDER BY clause. You cannot use LookML measures in a GROUP BY clause.

SELECT `view.field`
  FROM `model`.`explore`
  LIMIT 10;
SELECT `customers.state`, `customers.city`,
  AGGREGATE(`orders.total_amount`)
FROM `ecommerce`.`orders`
GROUP BY `customers.state`, `customers.city`
HAVING AGGREGATE(`orders.count`) > 10
ORDER BY 3 DESC LIMIT 5;

Microsoft SQL Server

Additionally supports: Azure SQL Database, Azure Synapse SQL

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
Microsoft v 12.8.18/22/2024
(Recommended) Microsoft v 9.4.112/7/2021
Microsoft v 9.2.13/2/2021
Microsoft v 8.2.23/24/2020

There are no known issues for this driver.

Database configuration instructions

Azure SQL Database

To connect your Microsoft Azure SQL instance you must grant Mode access to your database.

  1. Log into your Azure account and select SQL Databases from the left navigation.

  2. Select the SQL database you would like to connect. Azure SQL

  3. Click the Dashboard link at the top of the page and click Manage Allowed IP Addresses. Azure SQL

  4. Add a new rule for Mode's IP address using the following information:

    • Rule Name: Mode 1
    • Start IP Address: 54.68.30.98
    • End IP Address: 54.68.30.98

    Azure SQL

  5. Add a rule for the remaining seven Mode IP addresses:

    • 54.68.45.3
    • 34.209.23.118
    • 54.188.241.100
    • 52.43.195.103
    • 3.224.146.111
    • 54.221.238.89
    • 52.20.173.236

    Azure SQL

  6. Click Save at the bottom of the screen.

    Azure SQL

MySQL

Additionally supports: Amazon Aurora MySQL, MariaDB, SingleStore

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) MySQL Connector/J 9.0.07/1/2024
MySQL Connector/J 8.0.334/18/2023
MySQL Connector/J 8.0.281/18/2022
MySQL Connector/J 8.0.267/20/2021
MySQL Connector/J 8.0.231/18/2021
MySQL Connector/J 8.0.204/27/2020

The following are known issues with the current supported drivers. Mode continues to advocate on our customers’ behalf for vendors & open source communities to resolve these issues.

DriverKnown IssueFurther Details
MySQL Connector/J 8.0.28Removal of TLS v1 and v1.1 supportConnections should be made using the TLSv1.2 and TLSv1.3 protocols which are more secure
MySQL Connector/J 8.0.20Server Timezone Specification is RequredCustomers without a specified serverTimezone for their databases will see queries fail if any of the time zones (application/database servers) are not in the format UTC+xx or GMT+xx.

Queries will fail with the following error: java.sql.SQLException: The server time zone value 'PDT' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.

Note that the error is directly from the JDBC driver. At this time Mode does not support customers setting additional configuration properties (such as the suggested 'serverTimezone' property) via the JDBC driver.

More details in this StackOverflow thread.

Oracle

Additionally supports: Oracle Autonomous Database

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
Oracle v 23.57/26/2024
(Recommended) Oracle v 21.11/14/2021
Oracle v 19.116/4/2021
Oracle v 19.74/1/2019

There are no known issues for these drivers.

Database configuration instructions

Oracle Autonomous Database (Public Endpoint)

  1. Navigate to your Oracle Cloud Autonomous Databases page and click on your instance

Oracle Autonomous Main 2. Click on DB Connection Oracle Autonomous DB Connection 3. Click on Download Wallet to retrieve the zip file to upload to Mode (instance wallet contains credentials for single DB and regional contains all DBs in that region) Oracle Autonomous Wallet 4. Scroll down to see the Database Service (TNS) Names to copy into Mode. It is usually the database name + “_” + low, medium or high. These predefined names indicate the amount of resources to each SQL statement; high results in the highest performance, but supports only a few concurrent queries. To restrict access to certain database service names, you can delete the entries from the tnsnames.ora file in the wallet. Oracle Autonomous TNS Name

Oracle Autonomous Database (Private Endpoint)

Note: mTLS requirement must be relaxed to allow for TLS (default for ADB is to require mTLS)

  1. Navigate to your Oracle Cloud Autonomous Databases page and click on your instance

Oracle Autonomous Main 2. Click on DB Connection Oracle Autonomous DB Connection 3. Scroll down to select the Connection string to the desired TNS name to copy into Mode. Oracle Autonomous TNS Name

PostgreSQL

Additionally supports: Amazon Aurora PostgreSQL, HeapSQL, Timescale, Citus

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) PostgreSQL v 42.7.48/23/2024
PostgreSQL v 42.6.03/18/2023
PostgreSQL v 42.3.12/15/2022
PostgreSQL v 42.2.237/6/2021
PostgreSQL v 42.2.192/18/2021
PostgreSQL v 42.2.146/4/2020

There are no known issues with this driver.

Database configuration instructions

HeapSQL

Once you’ve signed up for Heap and enabled Heap SQL, your Customer Success Manager will provide you with your Heap credentials for connecting to your database. If you need your Heap credentials, please email support@heapanalytics.com for help.

Once you have your credentials, follow the steps below to connect Mode:

  1. Log in to Mode and follow to steps to connect a database to Mode.
  2. Select Heap from the list of databases.
  3. Enter your Heap credentials and click Connect. You'll land on a page that displays your database schema.
  4. Click “New Query” in the top navigation to start writing queries!

Presto

Additionally supports: PrestoDB

Mode has seperated out Trino and Starburst as two new connectors.

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
PrestoDB v 0.2875/19/2024
(Experimental) PrestoDB v 0.273.36/14/2022
Trino v 36411/1/2021
Trino v 3565/1/2021
Trino v 35012/18/2021
(Recommended) PrestoSQL v 3388/31/2020

There are no known issues for these drivers.

Snowflake

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
Snowflake v 3.20.010/30/2024
(Recommended) Snowflake v 3.16.04/29/2024
Snowflake v 3.13.293/17/2023
Snowflake v 3.13.271/30/2023
Snowflake v 3.13.141/21/2022
Snowflake v 3.13.67/19/2021
Snowflake v 3.13.13/1/2021

The following are known issues with the current supported drivers. Mode continues to advocate on our customers’ behalf for vendors & open source communities to resolve these issues.

DriverKnown IssueFurther Details
AllDate functions not displaying correctlyDate functions like DATE_TRUNC do not work as expected due to Mode's results formatter. Workaround is to use a function to convert the date to string.
Snowflake v 3.13.1Timestamps with timezone are not supportedMode does not display timestamp values with the timezone. Instead, convert all timestamps to one timezone for simplicity.
SELECT current_timestamp()  AS Date,
cast(convert_timezone('US/Eastern', Date) AS datetime) EST_date;

Connecting to Mode via key pair authentication

Please follow the Snowflake documentation for configuring key pair authentication.

  1. Generate the private key. There is the option to generate encrypted or unencrypted private keys. Snowflake recommends encrypting with a passphrase to protect the private key.

  2. Generate the public key by referencing the private key and assign the public key to the Snowflake user that will be used to access Mode.

  3. Log in to Mode and follow to steps to connect a database to Mode.

  4. Select Snowflake from the list of databases.

  5. Select Authentication method: Key pair in the Mode connection form.

  6. Enter the username of the assigned Snowflake user, upload the private key with a p8 file extension, and include the passphrase if the private key was encrypted.

  7. Click Connect. You will land on a page that displays your database schema.

Starburst

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Trino v 4423/14/2024
Trino v 4134/12/2023
Trino v 36411/1/2021

There are no known issues for these drivers.

Teradata

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Teradata version 20.00.00.348/26/2024

There are no known issues for these drivers.

Trino

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Trino v 4423/14/2024
Trino v 4134/12/2023
Trino v 36411/1/2021

There are no known issues for these drivers.

Treasure Data

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
PrestoDB v 0.2088/8/2018

There are no known issues with this driver.

Database configuration instructions

Please follow the steps outlined in the Treasure Data documentation to connect Treasure Data to Mode.

If you need help finding your database credentials, please contact your Treasure Data account manager at info@treasure-data.com.

Vertica

Supported JDBC drivers and known issues

DriverDriver Release DateMode Removal Date
(Recommended) Vertica v 10.1.1-07/13/2021
Vertica v 10.0.0-08/19/2020
Vertica v 9.3.0-010/14/2019

There are no known issues with this driver.

Cloud environments

Amazon Web Services

Overview

We have two ways of connecting to your RDS instance depending on your AWS settings. If your instance is publicly accessible then Mode can connect directly to it. For databases that are not accessible you can use the Bridge connector. We'll start by determining if your database is accessible to us.

Accessibility

  1. Navigate to your RDS Instance Console.

  2. Click the arrow and then magnifying glass view the details of the instance that you want to connect

    Amazon RDS Console

  3. Look under "Security and Network". Your instance is in a VPC if there's a entry labeled VPC. It is typically found below Availability Zone and above Security Groups. If you don't have an entry here then your instance is not in a VPC and you can jump to the "Security Groups" section below.

    RDS with a VPC

  4. Instances in VPCs can be public or private. We can find out by looking under "Security and Network" again. This time for an entry labeled Publicly Accessible. If it is followed by a Yes then you can jump to the "Security Groups" section below.

    RDS on a public VPC

  5. To connect to instances in a private VPC you'll need to install our Bridge connector.

Security Groups

All connections from Mode will come from one of the eight IP addresses below. In most cases you'll need to add these addresses to your RDS instance's Security Group. We've broken the steps down into two sections: VPC and No VPC. Security Groups in a VPC are managed the same between EC2 and RDS. RDS instances outside of a VPC have a different process.

  • 54.68.30.98/32
  • 54.68.45.3/32
  • 34.209.23.118/32
  • 54.188.241.100/32
  • 52.43.195.103/32
  • 3.224.146.111/32
  • 54.221.238.89/32
  • 52.20.173.236/32

VPC

  1. Under "Security and Network" click the security group name.

    Amazon RDS

  2. A new tab will be opened. Click on the "Inbound" tab and then "Edit".

    Amazon RDS

  3. Find the RDS type that matches your instance (e.g. PostgreSQL), enter each of our addresses and then click "Save".

    Amazon RDS

No VPC

  1. Under "Security and Network" click the security group to which that database belongs.

    Amazon RDS

  2. At the bottom of the page, highlight the "Connection Type" selector and choose "CIDR/IP"

    Amazon RDS

  3. In the "CIDR/IP to Authorize" field paste address: 54.68.30.98/32

    Amazon RDS

  4. Click the blue "Authorize" button

  5. Repeat steps 1-4 for each of the addresses listed above.

FAQs

Q: How to import Mode results into a Google Sheet

While we currently do not support the ability to natively export or import data to and from a Google Sheet, we do have a step-by-step guide on how to query Google Sheets using BigQuery in Mode. You can also follow the instructions below for a custom way to import data from a Mode report to a Google Sheet programmatically.

To enable this feature in a Google sheet, you can begin by following these steps:

  1. Go to the Mode report and click View Details.
  2. Click on the query on the left to access the query token in the URL
  3. Copy the query token from the URL /queries/[QUERY_TOKEN]
  4. Save the formula below somewhere safe because we will need to use it on our final step.

=importModeResult("https://app.mode.com/[WORKSPACE]/reports/[REPORT_TOKEN]/queries/[QUERY_TOKEN]")

In the formula above, please be sure to replace "WORKSPACE" with your workspace name as shown in any report URL, "REPORT_TOKEN" with the report token available in the URL, and "QUERY_TOKEN" with the query token that you just copied.

This formula will import the data from the Mode query into the Google sheet once the following steps are completed. It will automatically use the last successful run of the query.

Setup

  • From a Google Sheet, click Extensions -> Apps Script from the top menu bar.
  • In the code editor, overwrite the existing code and paste the importModeResults function below ⬇️ into the code editor. Then, save it via the disk file icon.
function importModeResult(url) {
  
  var USERNAME = PropertiesService.getScriptProperties().getProperty('username');
  var PASSWORD = PropertiesService.getScriptProperties().getProperty('password');
  
  var token = getTokenFromUrl(url);
  var account = getAccountFromUrl(url);
  var query = getQueryFromUrl(url);
  
  var options = {
    headers: { 'Authorization': 'Basic ' + Utilities.base64Encode(USERNAME + ':' + PASSWORD, Utilities.Charset.UTF_8) }
  };
    
  var reportUrl = 'https://app.mode.com/api/' + account + '/reports/' + token;
  var reportResponse = UrlFetchApp.fetch(reportUrl, options);
  var reportJSON = JSON.parse(reportResponse);
  
  var lastRunPath = reportJSON['_links']['last_successful_run']['href'];
  var queryRunUrl = 'https://app.mode.com' + lastRunPath + '/query_runs'
  var queryRunResponse = UrlFetchApp.fetch(queryRunUrl, options);
  var queryRunJSON = JSON.parse(queryRunResponse);
  
  var queryRuns = queryRunJSON['_embedded']['query_runs']
  
  queryRuns.forEach(function(q) {
    if (q['query_token'] == query) {
      resultPath = q['_links']['result']['href']
    }
  })
  
  if (resultPath) {
    var csvPath = 'https://app.mode.com' + resultPath + '/content.csv'
    var csvResponse = UrlFetchApp.fetch(csvPath, options);
    var csvTextRaw = csvResponse.getContentText();
    var csvText = csvTextRaw.replace(/(["'])(?:(?=(\\?))\2[\s\S])*?\1/g, function(e){return e.replace(/\r?|\r/g, '') });
    
    return Utilities.parseCsv(csvText)
    
  } else {
    return 'Invalid URL!'
  }
  
  
  function getTokenFromUrl(url) {
    return url.split('/reports/')[1].slice(0,12)
  }
  
  function getAccountFromUrl(url) {
    return url.split('.com/')[1].split('/')[0]
  }
  
  function getQueryFromUrl(url) {
    return url.split('/queries/')[1].slice(0,12)
  }
}
  • In the code editor, click the gear icon -> Project Settings in the left-side menu, scroll down to the bottom and click the Add Script Property tab.
  • Add a separate username and password property. The value of the username property should be a Mode API token. The value of the password property should be a Mode API secret. You can create a token and secret in the API Tokens tab of your Mode settings page. Here’s our documentation on how to generate API tokens.
  • Once you save these properties, navigate back to your Google Sheet and add the importModeResult formula into a cell in your Google Sheet. This will populate the query results.

Q: How to upload data via CSV

Currently we do not offer CSV uploads to private connections. Mode only supports uploading CSVs to our public data warehouse, but please note that this data will be publicly accessible. You can learn more about uploading CSV to the public warehouse here.

Was this article helpful?

Get more from your data

Your team can be up and running in 30 minutes or less.