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
      • 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
    • 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
  • Supported environment patterns
  • Different Connection
  • Same Connection, different location
  • Same Connection, same location, specific records
  1. Omnata Sync for Snowflake
  2. Branching

Outbound Sync branching

Outbound syncs have more complex branching needs than inbound syncs. This is because:

  1. There are a lot of different environment patterns to support

  2. Changing the configuration of a sync can result in complex downstream changes in the behaviour of an app, so there's typically more risk involved

Let's look at the first point in more detail.

Supported environment patterns

Keeping in mind that the main branch is always production, there are a number of ways you can configure a branch.

Different Connection

This is the ideal situation, where you have pristine environment separation. Your branch is pushing data to an entirely different instance of the application, so naturally it has its own Connection.

For most applications, this means that the sync state can be re-initialised.

Choosing Start Empty as the branch record state behaviour means that all records will be resynced from the beginning.

Alternatively if you don't want to fully repopulate the environment, you can choose Fork and ignore current records as the branch record state behaviour. The sync will continue where it left off in production and handle all new records, but updates/deletes to existing records will be ignored.

Finally, some Apps do provide a copy of production data in a non-production environment. If that's the case, So choosing Fork as the branch record state behaviour will cause the branch sync to pick up where the main sync left off and minimise the amount of changes to process.

Shouldn't this be the only pattern?

Ideally yes, but not every App offers non-production environments. So in many real-world cases, the production environment is the only environment you have. We could have just blamed those vendors for not giving you development environments, but we'd rather be pragmatic and help you move the needle on change management with what you've been given. Managing your risks with the best guardrails available is better than not doing anything at all.

Same Connection, different location

Sometimes changes are tested in some other corner of the same environment. For example, you might have a separate Slack channel for testing messages to a limited audience, but it's part of the same Slack Organization. Similarly in Salesforce Marketing Cloud, it's common to use alternate Data Extensions for test data.

To support this pattern, we allow sync parameter changes to be marked as "Branch-only" - in other words, they only exist to divert traffic and aren't part of the change.

Branch-only sync parameters will be remembered for future branches with the same name. This allows for this type of testing to occur in a repeatable way.

With the branch record state behaviour, you have the same options as above.

Same Connection, same location, specific records

This is known commonly as "testing in production" or "yolo", where your branch is applying records to exactly the same location as main.

The challenge here is that you have two sync configurations with a difference in opinion about how the same records in the app should look. For example, say you add a new field in the branch, and a source record is updated. Both the main sync and the branch will want to update the record next time they run, so it'll depend on the run order as to which change survives.

We resolve this with the only trick left in the bag, which is the Share branch record state behaviour. When you choose this option, you have to also nominate a branch record filter to determine which records are handled exclusively by the branch sync.

For example, an app might have a Customer object named Dummy Customer, which by convention is not a real customer. We add its identifier (e.g. "00000001") to the list of branch-owned records when creating the branch, and we modify the record in Snowflake.

When the main sync runs, it will ignore the change and do nothing, because the record is owned by a branch.

When the branch sync runs, it will pick up the change (and ignore all other records) and apply it to the app, using the new branch configuration.

When the branch is merged, the updated record state will be merged into the main sync so that it knows about the change, and won't attempt to apply it again.

PreviousInbound Sync branchingNextIntegrations

Last updated 1 year ago