Table of Contents

Snowflake Integration - Key Pair

Robert DeLuca Updated by Robert DeLuca

Snowflake Integration

Great Question's Snowflake integration lets you import candidates directly from your Snowflake data warehouse. Once connected, your candidates sync automatically every 24 hours—and you can always trigger a manual sync whenever you need fresh data.

This guide walks you through our keypair authentication wizard, which makes connecting to Snowflake secure and straightforward.

Only users with Admin level permissions can set up the Snowflake integration.

Before You Begin

You'll need a few things in place before starting:

  • Admin permissions in Great Question
  • Access to run SQL commands in Snowflake (typically SECURITYADMIN or ACCOUNTADMIN role)
  • A Snowflake table with at least an email column (this is how we match candidates)

If you're not sure whether you have the right Snowflake permissions, check with your data or IT team first—they can help set up the appropriate role access.

Connecting to Snowflake

Our setup wizard walks you through four simple steps. Here's what to expect:

Step 1: Key Management

First, you'll set up the authentication keys that secure your connection. You've got two options here:

Option A: Let Great Question generate your keys (Recommended)

This is the easiest path. Click "Generate public key" and we'll create a secure RSA keypair for you. We store the private key safely on our end, and you just need to copy the public key for the next steps.

Option B: Use your own keys

If your IT team prefers to manage keys themselves, you can paste in your own private key. We'll validate it to make sure everything looks good (it needs to be RSA, at least 2048-bit, in PEM format).

Either way, once your key is set up, you'll see a fingerprint—that's basically a unique identifier for your keypair.

For more details on how keypair authentication works in Snowflake, check out Snowflake's key-pair authentication documentation.

Step 2: Connection Details

Now you'll tell us where your data lives. Fill in:

  • Account URL: Your full Snowflake URL (like https://abc12345.us-east-1.snowflakecomputing.com)
  • Username: The Snowflake user that Great Question will connect as
  • Role (optional): A specific Snowflake role to use
  • Warehouse: The compute warehouse for running queries
  • Database: Where your candidate table lives
  • Schema (optional): Defaults to "PUBLIC" if you leave it blank
  • Table: The specific table containing your candidates

Pro tip: Not sure what values to use? Run these in Snowflake to find out:

SELECT CURRENT_USER();
          SELECT CURRENT_ROLE();
          SELECT CURRENT_WAREHOUSE();
Step 3: Grant Privileges

This is where you set up permissions in Snowflake. The wizard shows you six SQL commands to run in your Snowflake console. Don't worry—each one has a handy "Copy command" button.

Here's what you'll be running:

1. Allow public key assignment

USE ROLE SECURITYADMIN;
          GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USER your_username TO ROLE your_role;

2. Add the public key to the user

USE ROLE SECURITYADMIN;
          ALTER USER your_username SET RSA_PUBLIC_KEY='your_public_key_here';

3. Grant warehouse usage

USE ROLE SYSADMIN;
          GRANT USAGE ON WAREHOUSE your_warehouse TO USER your_username;

4. Grant database access

GRANT USAGE ON DATABASE your_database TO USER your_username;

5. Grant schema permissions

GRANT USAGE ON ALL SCHEMAS IN DATABASE your_database TO USER your_username;

6. Grant table access

GRANT SELECT ON ALL TABLES IN DATABASE your_database TO USER your_username;

To run these commands, head to your Snowflake console, open a new Worksheet, paste each command, and execute. Make sure you're using a role with sufficient privileges (like SECURITYADMIN or ACCOUNTADMIN).

Step 4: Test & Complete

Almost there! Hit the "Test Connection" button to verify everything's working. We'll check that we can reach your Snowflake account, find your table, and confirm the email column exists.

If the test passes, click "Complete" and you're all set. If something goes wrong, the error message will point you in the right direction—usually it's a permissions issue or a typo in the connection details.

Configuring Your Integration

Once connected, you can customize how the integration works:

Data Location

Your warehouse, database, schema, and table settings from the wizard are saved here. You can update them anytime if your data moves.

Import Filtering

Want to control which records get imported? Add a boolean column called gq_import to your table. Set it to true for candidates you want to sync, and we'll skip the rest.

Push Candidates to Snowflake

Enable this to export candidates from Great Question back to your Snowflake table. When enabled, this creates a CANDIDATES table inside your configured database containing the id and email of all existing candidates.

Make sure your Snowflake user has owner privileges to the warehouse and permissions to create tables and insert data.

This is useful if you want to restrict which candidates sync back to Great Question to only those that already exist in your system.

Handling Deletions

Add a boolean is_deleted column to your table if you want to soft-delete candidates. When this column is true, we'll remove that candidate from Great Question during the next sync.

If a previously imported record is removed from Snowflake without the is_deleted column, the candidate won't be automatically deleted from Great Question. Using the is_deleted column gives you explicit control over deletion behavior.

Synchronization

Your candidates sync automatically every 24 hours at midnight PST. Need data sooner? Hit the "Sync now" button on your integration settings page.

If you've enabled candidate exports, those run daily at 11:30 PM PST. You can also trigger an export manually using the "Export Data" button.

Custom Attributes

Any additional columns in your Snowflake table can map to candidate attributes in Great Question. To set this up:

  1. Go to Account > Candidate attributes > New attribute (or click here)
  2. Create an attribute with a name that exactly matches the column name from Snowflake

For example, if you have a department column in Snowflake, create a "department" custom attribute in Great Question, and the values will map automatically on each sync.

The name of the attribute must match the column name from Snowflake exactly.

Troubleshooting

"Permission denied" errors when running SQL commands

Make sure you're using a role with sufficient privileges. The SECURITYADMIN role is required for the first two commands, and SYSADMIN typically handles the resource grants.

"User not found" errors

Double-check that the username you entered in the wizard matches exactly what's in Snowflake. Usernames are case-sensitive.

"Warehouse not found" errors

Verify the warehouse name and make sure it's running (not suspended). You can check this in Snowflake's Admin > Warehouses section.

Connection test fails

Walk back through your connection details and make sure there are no typos. Also confirm that all six SQL commands from Step 3 ran successfully.

Need Help?

If you run into any issues or have questions about the Snowflake integration, reach out to us at [email protected]. We're happy to help!

How did we do?

Databricks Integration

Contact