Setting up tables

Data typically resides in tables. When sharing data with Toplyne via S3, the best practice is creating separate tables for event data and partitioning profile data on a time column.

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 to share


To connect your AWS S3 bucket to Toplyne, you need:

  1. An S3 bucket containing files with supported file types and encodings.
  2. For private or encrypted buckets, an AWS account with the ability to grant Toplyne permission and to read from the bucket.

To authorize Toplyne to connect to your S3 bucket, follow these instructions:

We recommend disabling Access Control Lists (ACLs) on each S3 bucket so that the bucket contents are controlled by the bucket's access control settings and not the original file owner's settings. For more information about disabling ACLs for your bucket, see AWS S3 documentation.

Create a bucket for Toplyne

  1. We recommend creating a bucket exclusively for toplyne data as it makes it very very easy for you to share data with us.
  2. Open your S3 console and navigate to the permissions tab.
    1. <><bucket_name>?tab=permissions
  3. We want you to grant toplyne read-only permissions to this bucket.
    1. Navigate to the Bucket policy and Edit it.
    2. Paste this JSON and update the bucket policy field - your-bucket-name there.
        "Version": "2012-10-17",
        "Statement": [
                "Sid": "1",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::388856629077:role/ToplyneServiceRoleForCustomerDataAccess"
                "Action": [
                "Resource": [

Share your S3 bucket name with the Toplyne team.