Introduction to Snowflake Native App

Umesh Patel
CodeX
Published in
4 min readAug 2, 2022

Background

The entire software industry is mainly based on the Application and Platform/framework on which the application is built. ISVs and Developers build applications to solve specific problems, make users productive, and get monetized. Win-Win for all. For example, in 2008, when Apple launched iPhone SDK for developers to build apps on the iOS platform it revolutionize the mobile industry. When developers built a very simple app like turning a screen into a flashlight made their fortune.

Similarly, Snowflake provides a Native App Framework to build the application on Snowflake Data Cloud. The reason why Snowflake has created such a feature is to bring the app to data, rather than moving data to the application provider, and continue with the philosophy of breaking the silos. With such a framework, application providers do not have to manage infrastructure and worry about securing sensitive customer data. At the same time, Application Consumers do not have to worry about sending Sensitive data outside of their data cloud.

Introduction

Snowflake Native Apps is an application built using the Snowflake Native Application Framework which utilizes a set of features such as stored procedures, tasks, streams, UDFs, Snowpark, etc. with a low code UX framework (Streamlit), telemetry, logging, and monetization. Once the application is built, it can be distributed and delivered using Snowflake’s powerful secure data sharing capability through Snowflake Marketplace. Snowflake Marketplace act as an App Store. Consumer/Users of the application can deploy this application from Snowflake Marketplace in their own Snowflake Account. Just like you install the application on iPhone using AppStore. ISVs/Developers, who created the application, can dictate terms to monetize the application whether it is a one-time charge, monthly subscription, or Free!

Snowflake has already built the Data Clean Room app and Capital One has built an app called Slingshot you can find it here. Goldman Sachs has also built an app for their customer here.

Architecture

In the above architecture diagram, left side, the Developer creates their own objects (table, views, etc) and code (UDF, stored proc, task, etc) related to the application. It is exactly the same as you do data sharing today, with the exception of “Installer”. The installer is a stored procedure that is generally used to run a bunch of DDL commands to create objects that are needed by the application. When the consumer created a database from the share (right side in the diagram above) they also get that Installer stored procedure, which they run to create a bunch of objects in another schema (let's call AppDB) that is needed to run the application. This installer process can be customized in a such way that it can create different objects based on the parameters passed in the installer. This helps developers to charge based on the feature that can be enabled by the customer. Please note that the data is stored in a consumer account so consumers are responsible to pay for the storage and warehouses that are used to process data and run the application. By the way, the Developer can also provide a Snowflake read-write account to their customer and charge back to the customer, if their customer does not have a Snowflake account. Developer/Provider cannot log in to consumer account and cannot see their data. The consumer has full control of AppDB and can control how the AppDB can interact with other data in their account.

The developer code (logic and install procedure) has an option to make code invisible to the customer. So they can protect their IP.

Some ideas to build Snowflake Native Apps:

  • Industry Model — Provide dimension model and automation to ingest data into predefined Dimension model schema for a specific industry such as Retail, Healthcare, etc.
  • Consumption Data Mart — Provide schema to feed into consumption data from multiple snowflake accounts to create a dashboard that monitors consumption and operation of the Snowflake.
  • Change Data Capture and SCD Type-2: Provide quick and easy-to-build CDC and Slow Changing Dimension Type 2 through pre-defined code. This could be handy if the customer has a large number of tables that they need to provide historic changes of data.
  • Data Enrichment: Provide data enrichment to the customer data set with some personalized data for customers.

Summary

The Snowflake Native App Framework provides the ability for Developers to develop and publish apps to the Snowflake Marketplace. Customers can get to Snowflake Marketplace, get that app, install the app securely in their Snowflake account, keeping their sensitive data in their account instead of exporting it to SaaS applications. Snowflake makes sure both developer and customer protect their data/code from each other. The developer has a different way to develop applications, with respect to how their code runs, where data finally rests, how data flows, how the app is secured, and how to expose log/app activities to customers. The most important part for developers is to get monetize the innovative work done by developers.

This feature is in Private Preview (as of Aug 2022), but If you want to get started contact your account team and read Brad Culberson has a nice article on how to create a Snowflake native app.

Disclaimer: The opinions expressed in this post are my own and not necessarily those of my employer (Snowflake).

--

--

Umesh Patel
CodeX
Writer for

Principal Sales Engineer @ Snowflake, Trusted Advisor, SnowPro Advanced Architect