Setting up tables

Data in Snowflake typically resides in tables. When sharing data with Toplyne, the best practice is to create separate tables for event data and profile data partitioned on a time column.

How does Toplyne sync work?

We prefer to ingest your data from Snowflake in an incremental fashion. You need to add a monotonically increasing timestamp column in your tables. We will use this column to identify all the new data that has been added to the tables and will only read-only that much data for syncing.

You can add a column called UPDATED_AT with timestamp data type to your table, and this column will highlight when the row in question was added to the table.

If you don't share such a timestamp column, we'll do a daily full scan of your table and sync it entirely.

Event data table

This table will capture a user's action; it will help answer the question, “what has a user done on your product, and when.”


Each row in this table represents an event triggered by a user.


  • USER_ID (Required): Key to identify which user has performed the event
  • ACCOUNT_ID (required for account-level analytics): Key to identify which account the particular user belongs to
  • EVENT_NAME (Required): Name of the event
  • TIMESTAMP (Required): Timestamp at which the event has occurred
  • UPDATED_AT (Required): UTC timestamp when the row has been updated or added (not the event timestamp)
  • EVENT_PROPERTIES (Optional): Event properties, typically shared as a JSON
    with key/value pairs


Partition this table on TIMESTAMP column.

Sample Event Table

129823Payment_Initiated2022-10-26 07:08:342023-01-09 17:08:34{
"paymentid": 123,
"amount" : 200,
156777Trial_Ended2022-11-01 20:01:142023-01-09 17:08:34{
"accountid" : 77

Profile data table

This table will capture any profile information a user or an account has; it will help answer the question, “who is this user or account?”.


Each row in this table is a unique entity.


  • USER_ID/ACCOUNT_ID (Required): Key to identify which entities' properties are listed in the row.
  • USER_CREATION_TIME/ ACCOUNT_CREATION_TIME (Optional): To identify since when the user or account has been active.
  • UPDATED_AT: UTC timestamp when the row has been updated or added (not the event timestamp)
  • USER_PROPERTIES/ACCOUNT_PROPERTIES: Each subsequent column is a profile key; against it, you will have its value. For example, you may choose to include the email address, geographical location, account name, current billing plan they are on, etc.


Partition this table on UPDATED_AT column.

Sample User Table

12962022-10-26 07:08:342022-11-26 07:08:34[email protected]UKAnnual Plan
26762022-11-01 20:01:142022-12-01 20:01:14[email protected]UKMonthly Plan

Sample Account Table

232022-10-26 07:08:342022-11-26 07:08:34QueenUKAnnual Plan
562022-11-01 20:01:142022-11-26 07:08:34BeetlesUKMonthly Plan

Step-by-step guide

  1. Login to your Snowflake account.

  2. On the upper right corner, click on your email account and switch the role to
    ACCOUNTADMIN. Reach out to your admin if you can't see the option.

  3. On the upper left side, click on the Shares icon.

  4. Select the Outbound tab.

  5. Click on the Create icon next to the Outbound tab button.

  6. Fill in the Secure Share Name field (this is a text field, so any name should work) and then select the database you would like to share.

  7. After this, click on Select Tables & Secure Views.

  8. Secure view to the select tables you want to share and hit Apply.

  9. Click on Create at the bottom right.

  10. Click On Next: Add Consumers on the bottom right to add the account you’d like to share the data with.

  11. Under Account Type, select Full (don’t worry - this will grant read-only access!) and enter the appropriate account based on your region. If you cannot see your region here, please reach out to your Toplyne POC or on [email protected].

RegionSnowflake Account Locator
  1. Click on Add on the bottom right - and we’re good to go!