Introduction
This guide offers a detailed walkthrough for integrating StreamNative Cloud with Snowflake Open Catalog. It covers essential aspects such as configuring authentication, storage buckets, catalogs, and other key components. Snowflake Open Catalog Integration is available with StreamNative BYOC Ursa clusters, which can be deployed into your AWS, GCP, or Azure cloud account. Specific directions are included for each cloud provider where applicable. By following this guide, you will enable seamless interaction between StreamNative Cloud and Snowflake Open Catalog.Setup Snowflake Open Catalog
Before initiating the integration of Snowflake Open Catalog with StreamNative Cloud, please ensure the following steps are completed. You can also watch this video to learn more about Preparing Snowflake Open Catalog AWS ExampleStep 1: Create Snowflake AI Data Cloud Account:
Create a Snowflake AI Data Cloud account. The homepage of a Snowflake AI Data Cloud account will look as follows.
Step 2: Create Snowflake Open Catalog Account
To access the Snowflake Open Catalog console, a specialized Open Catalog account must be created. This account type is specifically designed for managing Open Catalog features and functionality. Enter Admin → Accounts → Toggle → Create Snowflake Open Catalog Account
- Cloud: cloud provider used to deploy Snowflake Open Catalog, use same cloud provider where StreamNative BYOC Ursa cluster is deployed
- Region: region to place the Snowflake Open Catalog, use same region as StreamNative BYOC Ursa cluster
The Snowflake Open Catalog, storage bucket, and StreamNative BYOC Ursa cluster should be in the same cloud provider and region. Snowflake Open Catalog doesn’t support cross-region buckets. To avoid costs associated with cross-region traffic, we highly recommend your storage bucket and StreamNative BYOC Ursa cluster are in the same region.Edition: any





Step 3. Setup storage bucket with permissions for StreamNative
Choose bucket location and grant access to StreamNative Cloud. You have two choices to setup a storage bucket.The Snowflake Open Catalog, storage bucket, and StreamNative BYOC Ursa cluster should be in the same cloud provider and region.** Snowflake Open Catalog doesn’t support cross-region buckets. To avoid costs associated with cross-region traffic, we highly recommend your storage bucket and StreamNative BYOC Ursa cluster are in the same region.Option 1: Use your own bucket (recommended) You need to create your own storage bucket, with the option to create a bucket path. When using your own bucket, the resulting path you will use for creation of the Snowflake Open Catalog will be as follows. The compaction folder will be created automatically by the StreamNative cluster. AWS
s3://<your-bucket-name>/<your-bucket-path>/compaction
GCP
gs://<your-bucket-name>/<your-bucket-path>/compaction
Azure :
The option to use your own bucket is currently not available on Azure
StreamNative will require access to this storage bucket. To grant access, execute the following Terraform module based on your cloud provider.
Terraform module for AWS
- external_id: StreamNative organization, directions after terraform modules for finding your StreamNative organization
- role: the name of the role that will be created in AWS IAM, arn needed when creating cluster
- buckets: bucket name and path
- account_ids: AWS account id
- streamnative_org_id: StreamNative organization, directions after terraform modules for finding your StreamNative organization
- project: project name in GCP where bucket is located
- cluster_projects: project name in GCP where StreamNative BYOC Ursa cluster is located
- google_service_account_name: the name of the service account the will be created in GCP, service account email needed when creating cluster
- buckets: the bucket name and path

s3://<your-cloud-environement-id>/<your-cluster-id>/compaction
GCP
gs://<your-cloud-environment-id-tiered-storage>/<your-cluster-id>/compaction
Azure
gs://<your-cloud-environment-id-tiered-storage>/<your-cluster-id>/compaction
Step 4: Configure Cloud Provider Account for Snowflake Open Catalog Access
AWS Create IAM policy and role for Snowflake Open Catalog Access. In the AWS console, enter Access management → Policies → Create policy
<your-bucket-name>
and <your-bucket-path>



- Trusted entity type: AWS account
- An AWS account: this account
- Enable External ID
- Set External ID: training_test (will be used when creating catalog)






- storage.buckets.get
- storage.objects.create
- storage.objects.delete
- storage.objects.get
- storage.objects.list



Step 5: Create Snowflake Open Catalog
Create Snowflake Open Catalog
- Name: Supply a catalog name (example : streamnative)
- External: disabled
- Storage provider: S3
- Default base location:
s3://<your-bucket-name>/<your-bucket-path>/compaction
StreamNative provided bucket:
s3://<your-cloud-environement-id>/<your-cluster-id>/compaction
- Additional location: not configured
- S3 role ARN: arn copied from previous step
- External ID: external id created in previous step




- Name: supply a catalog name (e.g. pulsar)
- External: disabled
- Storage provider: GCS
- Default base location:
- User provided bucket:
gs://<your-bucket-name>/<your-bucket-path>/compaction
- StreamNative provided bucket:
gs://<your-cloud-environment-id>/<your-cluster-id>/compaction


- User provided bucket:
<your-bucket-name>
- StreamNative provided bucket (will include your cloud environment id and tiered-storage in the bucket name):
<your-cloud-environment-id-tiered-storage>


- Name: supply a catalog name (e.g. training)
- External: disabled
- Storage provider: AZURE
- Default base location: StreamNative provided bucket from UI ( e.g. abfss://tiered-storage@snpmtscbbad75227e51b50.dfs.core.windows.net/o-mj3r8-c-u6y2cpq-ursa/compaction)
- Additional locations: not configured
- Azure tenant: tenant id of Azure account







Step 6: Provide StreamNative Access to Snowflake Open Catalog
Our engine needs a connection to access the Snowflake Open Catalog, so we need to create one. We will later reuse this connection for Snowflake to access Snowflake Open Catalog.
- Name: streamnativeconnection
- Query Engine: not configured
- Create new principal role: enable
- Principal Role Name: streamnativeprincipal

<CLIENT ID>:<SECRET>
. Our engine needs it to access the Snowflake Open Catalog.

- NAMESPACE_CREATE
- NAMESPACE_LIST
- TABLE_CREATE
- TABLE_LIST
- TABLE_READ_DATA
- TABLE_WRITE_DATA
- TABLE_READ_PROPERTIES
- TABLE_WRITE_PROPERTIES
- NAMESPACE_READ_PROPERTIES
- NAMESPACE_WRITE_PROPERTIES


- Catalog role to grant: streamnative_open_catalog_role
- Principal role to receive grant: streamnativeprincipal

Create StreamNative BYOC Ursa Cluster
To proceed, you will need to first complete the steps for granting vendor access, creating a Cloud Connection, and setting up the Cloud Environment.Then you can begin the process of deploying the StreamNative BYOC Ursa Cluster. You can also watch this video to learn more about deploying the StreamNative BYOC Ursa Cluster (AWS Example).Step 1: Create a StreamNative BYOC Ursa Cluster in StreamNative Cloud Console
In this section we create and set up a cluster in StreamNative Cloud. Login to StreamNative Cloud and click on ‘Create an instance and deploy cluster’



- AWS role arn (created with terraform module)
- Region
- Bucket name
- Bucket path
- Confirm that StreamNative has been granted the necessary permissions to access your S3 bucket. The required permissions were granted by running a Terraform module.

- GCP service account:, use the complete email address which can be found in GCP IAM (service account was created with terraform module)
- Region
- Bucket name
- Bucket path
- Confirm that StreamNative has been granted the necessary permissions to access your GCP storage bucket. The required permissions were granted by running a Terraform module.


s3://<your-cloud-environement-id>/<your-cluster-id>/compaction
e.g.
s3://aws-usw2-test-rni68-tiered-storage-snc/o-naa2l-c-vo06zqe-ursa/compaction
GCP
gs://<your-cloud-environment-id-tiered-storage>/<your-cluster-id>/compaction
AZURE
abfss://tiered-storage@<your-storage-account>.dfs.core.windows.net/<your-organization-and-cluster-id>/compaction
e.g.
gs://gcp-usw2-test-hhein-tiered-storage/o-78m1b-c-9ahma2v-ursa/compaction
Note : If you are using the StreamNative provided bucket, do not close the browser while creating the catalog. This will cause StreamNative to create a new cluster id. Once a catalog is created in Snowflake Open Catalog, the base location and additional locations cannot be changed. If the cluster id changes, you would need to create a new catalog.To integrate with Snowflake Open Catalog, Enable Catalog Integration and select Snowflake Open Catalog.
- Warehouse: catalog created in Snowflake Open Catalog (example : streamnative or pulsar)
- URI: Account URL when creating Snowflake Open Catalog. Append ‘/polaris/api/catalog’ to the URI. Look at the screen shot below.
- Select Authentication Type/OAuth2: create a new secret in StreamNative using Snowflake Open Catalog Service Connection
<CLIENT ID>:<SECRET>





Step 2: Produce Kafka messages to topic
Follow the creating and running a producer section to produce Kafka messages to a topic.Step 3: Review storage bucket
AWS Navigate to the user provided or StreamNative provided s3 bucket. In this example the user provided bucket is s3://streamnativeopencatalog/test. A storage folder and compaction folder have been created by the cluster.






Step 4: Verify Tables and Schema are Visible in Snowflake Open Catalog
Once we have published messages to a topic and the compaction folder has been created in the s3 bucket, we can verify the tables and schemas are visible in Snowflake Open Catalog. We can see the resulting topics created in streamnative/public/default with a registered schema.
Configure Snowflake to View Data from Snowflake Open Catalog
Querying a table in Snowflake Open Catalog using Snowflake requires completing the following from the Snowflake documentation. This video shows detailed queries for the above example (AWS Example).Step 1: Create an external volume in Snowflake
Please refer to the Snowflake documentation here for the complete code samples for creating an external volume for each cloud provider. The video includes the following details from our AWS example:- When creating the new policy for Snowflake to access the s3 bucket, use root of the s3 bucket to avoid a list error when verifying storage access.
- When creating an external volume in Snowflake, for STORAGE_BASE_URL use the complete bucket path with
s3://<>/<>/compaction
.
Step 2: Create a catalog integration for Open Catalog
Please refer to the Snowflake documentation here for the complete code samples. The video includes the following details from our AWS example:- The CATALOG_NAMESPACE refers to the tenant.namespace in our StreamNative Cluster. Since we published messages to public.default, use public.default as the CATALOG_NAMESPACE.
- We can resuse the
<CLIENT ID>:<SECRET>
for Snowflake Open Catalog to allow access for Snowflake. The<CLIENT ID>
refers to OAUTH_CLIENT_ID and<SECRET>
refers to OAUTH_CLIENT_SECRET.
Step 3: Create an externally managed table
Please refer to the Snowflake documentation here for the complete code samples. The video includes the following details from our AWS example:- A Snowflake Open Catalog warehouse.schema.table (e.g. streamnative.public.default.kafkaschematopic) is mapped to a Snowflake database.schema.table (e.g. training.public.kafkaschematopic)
- Use AUTO_REFRESH = TRUE; in CREATE ICEBERG TABLE to ensure new data is viewable in Snowflake.