Omnata Product Documentation
  • Omnata Sync for Snowflake
    • What is Omnata Sync for Snowflake?
    • How it works
      • Terminology
      • Branching Mode
      • Sync Directions and Strategies
        • Outbound
        • Inbound
      • Rate Limiting
      • Access Control
      • Notifications
      • Security and Privacy
      • Internal tables
      • Internal Stored Procedures
      • FAQ
    • Step-by-step guides
      • 1. Install the Omnata Sync Engine
      • 2. Install the Omnata Plugin
      • 3. Configure the Plugin
      • 4. Create a connection
      • 5. Create a sync
    • Apps
      • Aerobotics
        • 📘Release History
      • Airtable
        • 📘Release History
      • Amazon Ads
        • Privacy Notice
      • ApprovalMax
        • 📘Release History
      • Bamboo HR
        • 📘Release History
      • Clockify
        • 📘Release History
      • Contentful
        • 📘Release History
      • GitHub
        • 📘Release History
      • Github
      • Google Ads
        • 📘Release History
      • Google Sheets
        • 📘Release History
      • HubSpot
        • 📘Release History
      • Hubspot
      • Infor Data Lake
        • 📘Release History
      • Jira
        • 📘Release History
      • LinkedIn Ads
        • 📘Release History
      • Mailgun
        • 📘Release History
      • Marketo
        • 📘Release History
      • Meta Marketing
        • 📘Release History
      • Microsoft Ads
        • 📘Release History
      • Microsoft Dynamics 365 Business Central
        • 📘Release History
        • 📘Release History
        • 📘Release History
        • 📘Release History
        • 📘Release History
        • 📘Release History
      • Microsoft Entra ID
        • 📘Release History
        • 📘Release History
        • 📘Release History
        • 📘Release History
      • Microsoft Excel
      • Microsoft SQL Server
        • 📘Release History
      • Monday.com
        • 📘Release History
      • MRPeasy
        • 📘Release History
      • PayHero
        • 📘Release History
      • Pinterest Ads
        • Privacy Policy
      • PostgreSQL
        • 📘Release History
      • Salesforce
        • Salesforce Permissions needed
        • Formula Fields
        • How we use the Salesforce APIs
        • 📘Release History
      • Salesforce Marketing Cloud
        • OAuth for APIs, SFTP for file transfer with GPG on outbound
        • OAuth for APIs, SFTP for file transfer
        • OAuth for APIs, Cloud Storage for file transfer
        • 📘Release History
      • Shopify
        • Outbound sync data structures
        • 📘Release History
      • Slack
        • 📘Release History
      • Tiktok Ads
        • Privacy Policy
      • Typeform
        • 📘Release History
      • Wise
        • 📘Release History
      • Xero
        • 📘Release History
      • Zendesk Support
        • 📘Release History
        • 📘Release History
        • 📘Release History
    • Plugins
      • Anatomy of a Plugin
      • Example Plugins
        • Example Plugin: Slack
        • Example Plugin: Zoho CRM
      • Creating Plugins
      • Advanced Plugin topics
        • Advanced rate limiting / concurrency
        • Custom Jinja filters
        • Custom Record Transformers
        • Dynamic Configuration Forms
        • Test case generation
    • Branching
      • Inbound Sync branching
      • Outbound Sync branching
    • Integrations
      • dbt
        • Validation Tests (coming soon)
    • 📘Release History
  • Omnata Connect for Salesforce
    • Overview
    • Getting Started
      • Install the Salesforce App
      • Connect to your data warehouse
        • Snowflake
        • BigQuery
        • Rockset
        • Firebolt
        • SingleStore (previously MemSQL)
      • Deciding which mode to use
    • Omnata with Salesforce Connect (External Objects)
      • Object Configuration
      • View your data in a list
      • Link to other objects
      • Use in a Report
      • Database schema changes
      • Writing to External Objects
    • Omnata with Salesforce Lightning Components
      • Object Configuration
      • View your data in a list
      • Link to other objects
      • Using the Lightning Component on a page
      • Assigning Permissions
    • Advanced Features
      • Row Level Filtering
      • Multi-Currency handling
        • About Multi-Currency
        • Support in Omnata Connect
        • Apex Features
    • Integrations
      • Datadog
    • Omnata with Salesforce Apex
    • Security
    • Use cases
      • Linked object drill-downs
      • Global Search
      • ERP and historical data
      • Embedded product metrics
    • Best Practices
      • Global Search
      • Change Management
      • Snowflake table design
      • Salesforce page layout
      • Salesforce Caching
Powered by GitBook
On this page
  • Overall process
  • Inbound sync strategies
  • Custom sync strategies
  • Inbound storage location
  1. Omnata Sync for Snowflake
  2. How it works
  3. Sync Directions and Strategies

Inbound

Overall process

Inbound syncing involves less configuration complexity than outbound, since you don't need to define exactly how the data is received by the app. Instead it's pretty simple - you get a Snowflake table per object from the app. For this reason, and to avoid you needing to configure lots of syncs, each sync can support any syncing number of inbound objects from the app.

In keeping with established industry naming conventions, each object within an inbound sync is called a "stream", and each one will have a table per branch of the sync (and the "main" branch).

Inbound sync strategies

By default, Omnata will automatically fetch data incrementally when possible, reverting to full-refresh if not supported by the source. You can choose the storage behaviour; whether to merge changes or keep history (append).

The configuration wizard presents three options:

  • Auto / Merge changes

  • Auto / Keep history

  • Custom - choose sync behaviours for each object

Custom sync strategies

For more complex use cases, you can set the sync strategy for each object in a sync:

Full - All data is reloaded every sync

Incremental - Using a watermark, only new changes are pulled

Storage behaviours determine how the fetched data is stored in Snowflake, considering existing synced data.

The Full strategy has two behaviours:

  • Replace - The latest copy of the full set of records replaces the existing records

  • Append - The latest copy of the full set of records is added to the existing set of records. Note that this will create duplicates of existing records.

The Incremental strategy has two behaviours:

  • Merge - The new records are matched up to existing records with the same primary key, or inserted if there is no match.

  • Append - The new records are added to the existing set of records. Note that this will result in multiple records with the same primary key.

Inbound storage location

A local table is nominated and created automatically, with all of the available fields for the selected app object.

By default, Omnata lands the data in the Omnata Sync Engine app database. Raw data is landed in the INBOUND_RAW schema and a normalized view is automatically created for most sources in the INBOUND_NORMALIZED schema.

You can also customize the default location under "Data Management" in the Settings menu. This will not modify existing syncs, only set the default location for new syncs.

When customizing the storage locations, you are defining templates using the Jinja language. This ensures that as tables and views need creating for different branches, streams and even columns, that they are all written to a unique location.

When creating templates for database, schema and table/view names, the following Jinja variables are available:

  • sync_slug: The slug of the sync, visible on the sync home page. As this is a unique identifier, it makes the name unique across different syncs.

  • branch_name: The name of the branch, this makes the name unique across different branches within a sync. If branching mode is not enabled, this will resolve to 'main'

  • stream_name: The name of the stream, as provided by the plugin.

When creating templates for column names, the following Jinja variables are available:

  • column_name: The name of the column as provided by the plugin (usually the field name as represented in the source app). Note that these can change over time as the source data changes, and sometimes these may represent drill-down into nested objects.

Column name templates only ever apply to normalized views. Raw tables always have a single object per inbound record, stored in an object column named RECORD_DATA.

You can use any of the standard Jinja2 filters to modify values. E.g. {{stream_name|upper}} would convert the stream name to uppercase.

In addition to these, we provide the following custom filters:

  • multiple_underscores_to_single: Replaces two or more consecutive underscores with a single underscore

  • prepend_starting_number_with_underscore: If the text starts with a number, prepend it with an underscore

These can be changed together, e.g. {{column_name|upper|multiple_underscores_to_single}}

Do not include double quotes in these templates - these are added automatically by the sync engine as needed.

PreviousOutboundNextRate Limiting

Last updated 9 days ago

You can customize the inbound storage location for a sync, under the "Storage Location" section. This will modify the storage location for that sync, and will move the existing tables to the nominated location. You will need to grant the Omnata application privileges to operate on the custom location. Go to:

fivetran_word_division: Divides alphanumeric strings containing letters and numbers into multiple words and numbers joined with underscores, as described in the . We include this for naming compatibility for customers migrating from Fivetran.

Fivetran docs
Modifying the inbound storage location to a database and schema outside of the app