Table of Contents
Snowflake Integration - Key Pair
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.
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
emailcolumn (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.
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.
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:
- Go to Account > Candidate attributes > New attribute (or click here)
- 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.
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!