For the complete documentation index, see llms.txt. This page is also available as Markdown.

Snowflake

Overview

Birdie integrates with Snowflake using read-only access. Two integration models are supported:

  • Reader Account (Snowflake Data Sharing) — recommended for shared-data environments

  • Direct OAuth Connection — recommended when Birdie connects directly to your main Snowflake account

Birdie can import data from Snowflake into Birdie for analytics, enrichment and reporting purposes, including:

  • Customers and accounts

  • Operational and reference tables

  • Feedback-related datasets exposed by the client

  • Lookup tables for Field Lookups, which are read in full on every run and don't need a partition column

Because each Snowflake installation is unique, Birdie's team will work with your IT administrators to finalize details. This article explains how your Snowflake admin can generate and provide the credentials needed to enable the integration.


Schema requirements

All Birdie database connectors (Snowflake, Databricks, BigQuery, etc.) require one table or view per feedback type, following the Birdie schema definition.

Examples of feedback types:

  • nps

  • csat

  • review

  • social_media_post

  • support_ticket

Each feedback type must exist as a table or a view.

Birdie provides the detailed schema reference in the Data Schema Definitions for Birdie Ingestion page.


Incremental Partition Column

Birdie uses a partition column to determine which rows to ingest on each run. Typical queries look like:

Requirements

The partition column must reflect when a row was added or last modified in the table, not when the original event occurred. For example:

  • LOAD_TIMESTAMP or UPDATED_AT (ETL/pipeline timestamp) — recommended

  • INSERTED_AT (row creation timestamp) — acceptable if the table is append-only

Why POSTED_AT is not sufficient

Using a business event timestamp like POSTED_AT can cause data gaps:

  1. Historical updates missed: If a past row is updated (e.g., a ticket status changes), its POSTED_AT remains in the past and Birdie will not re-ingest it.

  2. Pipeline timing gaps: If your ETL runs at specific times (e.g., every 6 hours), rows loaded between Birdie's query window and the ETL run may not appear until the next cycle. An UPDATED_AT or LOAD_TIMESTAMP column tied to the ETL timestamp ensures these rows are captured.

Recommendation

Add a LOAD_TIMESTAMP or UPDATED_AT column to your table that is set to CURRENT_TIMESTAMP() whenever a row is inserted or modified. Use this column as the partition_column when configuring the Birdie integration.

If your table is append-only and never updated, POSTED_AT is acceptable as the partition column.


Reader Account method

Overview

Birdie connects to a Snowflake Reader Account created via Snowflake Data Sharing. Birdie runs SELECT queries against databases instantiated from shared objects in that reader account.

This model is common when:

  • Your organization already uses provider-to-consumer data sharing

  • You want strict isolation between your production Snowflake account and external consumers such as Birdie

Requirements

Before starting:

  • Your account supports provider data sharing

  • You have ACCOUNTADMIN (or equivalent) access on the reader account

  • The provider account already exposes the necessary shares with the data Birdie will use

Setup in Snowflake

1

Log into the Reader Account

Use SnowSQL, the Snowflake Web UI, or another supported client:

2

(Optional) Create a dedicated role for Birdie

3

Create the Birdie user inside the reader account

4

(Optional) Create a resource monitor

You can adapt the name and quota as needed.

5

Create a virtual warehouse in the reader account

6

Instantiate databases from provider shares

7

Grant privileges to the Birdie role

Warehouse usage:

Imported privileges on shared databases

Depending on how the share was configured, you may instead need to grant a shared database role to BIRDIE_READ. See: Snowflake GRANT ROLE

Integration via Direct OAuth Connection

Overview

In this model, Birdie connects directly to your main Snowflake account using OAuth instead of static passwords. This is recommended when:

  • You prefer SSO or OAuth-based access

  • You do not use Snowflake Data Sharing

  • You want Birdie to access native production schemas directly

Requirements

  • ACCOUNTADMIN (or equivalent) privileges in the main Snowflake account

  • Access to the Snowflake web console or CLI

  • The Snowflake connector has been enabled on the Birdie side

Setup in Snowflake

1

Create the OAuth Security Integration

Set OAUTH_REDIRECT_URI to https://api.birdie.ai/oauth/callback if Birdie will manage the token (Option B), or to a URL you control (e.g. http://localhost:8080/callback) if you'll manage it yourself (Option A).

2

Create the warehouse, role, and user for Birdie

Choose your own names for the warehouse, role, and user (the ones below are placeholders).

3

Choose how the refresh token is managed

Birdie authenticates at query time with a short-lived OAuth access token derived from a refresh token. Snowflake expires refresh tokens (OAUTH_REFRESH_TOKEN_VALIDITY, ~90 days), so the token must be renewed. Choose one of the options below and share the matching credentials (see Share Connection Details). You don't need SnowSQL for either.

Option A — You manage the refresh token (no password shared)

You generate the refresh token yourself and share it with Birdie together with the OAuth client ID and secret. Use a OAUTH_REDIRECT_URI you control (from step 1).

Open this URL in a browser (with client_id URL-encoded) and log in / grant consent. Snowflake then redirects to your redirect_uri with a ?code=... parameter appended to the URL — copy that code value (it is single-use and expires in a few minutes, so exchange it right away):

Exchange the code for tokens (the values contain +, /, and =, so use --data-urlencode); the response includes the refresh_token:

See Snowflake's Configure OAuth for custom clients.

Option B — Birdie manages the refresh token (recommended)

You share the Birdie user's username and password (together with the OAuth client ID and secret). Birdie generates the refresh token and renews it automatically before it expires, with no recurring action on your side. The password is used only to generate and renew the token — never to read data.


Share Connection Details with Birdie

To configure the integration, securely provide Birdie with the following information.

For Reader Account (Password auth):

For Direct OAuth — Option A (you manage the refresh token):

For Direct OAuth — Option B (Birdie manages the refresh token):

Section
Field
Required
Description

connection_details

account

Yes

Snowflake account identifier, e.g. abc12345.us-east-1.

connection_details

warehouse

Yes

Snowflake warehouse name, e.g. BIRDIE_WH.

connection_details

role

Yes

Snowflake role, e.g. BIRDIE_READ.

connection_details.auth

method

Yes

Authentication mode: password (default) or oauth.

connection_details.auth

username

Yes

Snowflake username, e.g. BIRDIE_USER.

connection_details.auth

password

Password / OAuth (B)

Password for the Birdie user. Required for password auth, and for OAuth Option B, where Birdie uses it only to generate and renew the refresh token.

connection_details.auth

oauth_client_id

OAuth

OAuth client ID from the security integration.

connection_details.auth

oauth_client_secret

OAuth

OAuth client secret from the security integration.

connection_details.auth

refresh_token

OAuth (A)

OAuth refresh token, for Option A where you manage it. Re-send a new token before it expires (~90 days).

data_source

database

Yes

Snowflake database name.

data_source

schema

Yes

Snowflake schema name.

data_source

table

Yes

Table or view name.

data_source

partition_column

No

Column for date filtering. Defaults to posted_at.

metadata

data_kind

Yes

The type(s) of data in the table, e.g. Support Ticket, NPS, CSAT, Review, Account.

Share credentials securely with the Birdie team. Never send credentials via email or unencrypted channels.


Security notes

  • Birdie never requires admin privileges for day-to-day operations

  • Access granted to Birdie is read-only, unless a specific export pipeline is explicitly configured

  • All credentials must be shared via a secure channel

  • OAuth is preferred over static passwords whenever possible

Data in scope

Once enabled, the Snowflake connector can import data from Snowflake into Birdie (for example, customer, account, or operational tables you expose to the Birdie role) and export Birdie data such as feedback records, areas, opportunities, and metrics back into Snowflake.

References

Last updated