Skip to main content

Snowflake – Users & Accounts: Enrichment Table Spec, Join Keys & Linking Guide (Draft Rewrite)

Exact table schema, join-key contract, enrichment-vs-feedback distinction, and validation checklist for syncing user and account data from Snowflake into Enterpret.

V
Written by Varun Sharma

This integration syncs user and account records from Snowflake into Enterpret so that feedback can be linked to the right user or account and enriched with attributes like plan, ARR, region, or CSM owner. Use this guide to understand the exact table shape Enterpret expects, how linking (joining) works, and how to validate that your data landed correctly.

Enrichment table vs. feedback table — know which one you are building

This is the single most common point of confusion, so read this first:

  • Feedback tables contain customer language (tickets, surveys, reviews). They are ingested as feedback records and are covered in the separate Snowflake (feedback) article.

  • User/Account enrichment tables (this article) are lookup tables. They do NOT create feedback records. Each row describes one user or one account, and Enterpret uses it to enrich and link your existing feedback — for example, attaching plan tier and ARR from your warehouse to Gong calls or Zendesk tickets you already ingest.

If you send account data through a feedback integration, it will be treated as feedback and pollute your dataset. If you are unsure which you need, ask yourself: "Does each row contain something a customer said?" If no, you want an enrichment table.

Required table shape

Create the table in the ENTERPRET_SHARED_DATA database, PUBLIC schema. All columns beginning with ERC_ are mandatory. Every additional column is ingested as metadata on the user or account and becomes available for filtering and segmentation in Enterpret.

User table

create or replace TABLE ENTERPRET_SHARED_DATA.PUBLIC.USERS (
  ERC_ID VARCHAR(40) NOT NULL,
  ERC_CREATED_AT TIMESTAMP_NTZ(9) NOT NULL,
  ERC_ROW_CREATED_AT TIMESTAMP_NTZ(9) NOT NULL DEFAULT CURRENT_TIMESTAMP(),
  USER_PLAN VARCHAR(40),
  TAGS ARRAY,
  constraint PK1 primary key (ERC_ID)
);

Account table

create or replace TABLE ENTERPRET_SHARED_DATA.PUBLIC.ACCOUNTS (
  ERC_ID VARCHAR(40) NOT NULL,
  ERC_CREATED_AT TIMESTAMP_NTZ(9) NOT NULL,
  ERC_ROW_CREATED_AT TIMESTAMP_NTZ(9) NOT NULL DEFAULT CURRENT_TIMESTAMP(),
  ACCOUNT_PLAN VARCHAR(40),
  ARR NUMBER,
  TAGS ARRAY,
  constraint PK1 primary key (ERC_ID)
);

Column reference

  • ERC_ID — the unique identifier of the user or account (not a feedback record). This is the join key: it must exactly match the user/account identifier that appears on your feedback records from other sources (see "How linking works" below). One row per ERC_ID; rows must be deduped at their native grain before landing in this table.

  • ERC_CREATED_AT — when the user or account was created in your source system (business time).

  • ERC_ROW_CREATED_AT — when the row landed or was last updated in the warehouse (ingestion time). Enterpret reads this column on every sync to determine what changed since the last watermark, so it must be a persisted column on a base table, not a query-time computed expression in a view.

  • All other columns — ingested as metadata (e.g., plan, ARR, region, segment, CSM owner, tags). Include the attributes you want to filter and segment feedback by.

How linking works (the join contract)

Enterpret links a feedback record to a user or account when the identifier on the feedback record matches the ERC_ID of a row in your enrichment table.

  • Value and format must match exactly. Cast IDs as strings consistently on both sides. A numeric ID in one system and a padded/prefixed string in another will not match.

  • Check what identifier your feedback sources carry. For each connected source (Zendesk, Gong, Intercom, etc.), confirm which user/account identifier field is present in that source's metadata. That field's values are what your ERC_ID must match. Your Enterpret contact can help you confirm the identifier available per source.

  • No match, no link — and no error. If a feedback record's identifier has no matching ERC_ID, the feedback still exists in Enterpret; it simply is not linked to that user/account and will not carry the enrichment attributes. Unmatched rows in your table are ingested but link to nothing. Spot-check match rates after setup (see Validation below).

  • Updates are upserts. Re-sending a row with the same ERC_ID and a fresh ERC_ROW_CREATED_AT updates the existing user/account attributes; it does not create duplicates.

Role, user, and permissions

CREATE ROLE ENTERPRET_USER_ROLE;
CREATE USER ENTERPRET_USER password = '<STRONG_PASSWORD>';
GRANT ROLE ENTERPRET_USER_ROLE TO USER ENTERPRET_USER;
GRANT USAGE ON WAREHOUSE <WAREHOUSE_NAME> TO ROLE ENTERPRET_USER_ROLE;
GRANT USAGE ON DATABASE ENTERPRET_SHARED_DATA TO ROLE ENTERPRET_USER_ROLE;
GRANT USAGE ON SCHEMA PUBLIC TO ROLE ENTERPRET_USER_ROLE;
GRANT SELECT ON TABLE ENTERPRET_SHARED_DATA.PUBLIC.USERS TO ROLE ENTERPRET_USER_ROLE;
GRANT SELECT ON TABLE ENTERPRET_SHARED_DATA.PUBLIC.ACCOUNTS TO ROLE ENTERPRET_USER_ROLE;

The password is only required for initial user creation and is not used by Enterpret; authentication uses the RSA key pair below. Also allowlist Enterpret's IP addresses in your Snowflake network policies: 3.140.143.140 and 3.134.21.149.

Authentication

Enterpret generates an RSA key pair and shows the public key in the product. Add it to the user you created:

ALTER USER ENTERPRET_USER SET RSA_PUBLIC_KEY = '<KEY_SHARED_BY_ENTERPRET>';

Add the integration in Enterpret

  1. Go to dashboard.enterpret.com and open Integrations from the left menu.

  2. Click + New Integration and choose Snowflake.

  3. Select the integration kind: User or Account. (Do not choose a feedback type for enrichment tables.)

  4. Fill in Account Name (the account identifier only, not the full URL), Database, Schema, Warehouse, Table, and optionally the User and Role created above, then click Connect.

  5. Copy the public key shown under the integration and run the ALTER USER command above in Snowflake.

Validate your setup

The first sync can take up to 24 hours. Use this checklist instead of waiting to discover a misconfiguration:

  • Use Validate Connection on the integration detail page (available while the integration is in ONBOARDING) to confirm account name, RSA key, database/schema/table names, role privileges, warehouse state, and required ERC columns in one check.

  • After the first sync, pick 5–10 known users/accounts and confirm their attributes appear in Enterpret.

  • Open a few feedback records from a connected source that should belong to those accounts and confirm the account link and enrichment attributes are present.

  • If links are missing, compare the identifier value on the feedback record with the ERC_ID value character-by-character — format mismatches (casing, prefixes, numeric vs. string) are the most common cause.

Frequently asked questions

Will syncing account data create duplicate feedback records?

No. User/Account integrations are enrichment-only. They never create feedback records. Duplicates arise only if account data is mistakenly sent through a feedback integration.

Can I link account data to feedback that is already in Enterpret (e.g., historical Gong calls)?

Yes — linking applies to existing feedback records as long as the identifier on those records matches your ERC_ID values. If your feedback source does not carry a usable account identifier, contact Enterpret Support to discuss linking options for that source.

What fields should I include beyond the required ones?

Include the attributes you want to slice feedback by: plan tier, ARR, region, segment, industry, CSM owner, lifecycle stage, tags. Avoid columns you will never filter on.

Can I use a view instead of a table?

Yes, provided ERC_ROW_CREATED_AT is a persisted column from a base table. A computed CURRENT_TIMESTAMP() in the view breaks watermarking and causes rows to be re-ingested or skipped.

Getting help

If linking is not working, contact Enterpret Support with: the table name, 2–3 example ERC_ID values, the feedback source you expect them to link to, and one example feedback record that should have matched.

Did this answer your question?