Snowflake Native App
The Secoda Native Snowflake App enables you to integrate your Snowflake warehouse with Secoda without providing direct access to your Snowflake account. The native application runs securely within your Snowflake environment.
Installation Process
To get started with the Secoda Native Snowflake App, follow these four steps:
Install the native app from Snowflake Marketplace
Configure the application's connection credentials
Set up network rules (if required)
Complete the setup process
1. Installing from Marketplace
You can install the app directly from the Snowflake Marketplace. Once installed, you will see the application interface:

2. Configure Connection Credentials
Next, you'll need to configure the connection and provide account-level privileges:
Open the app and navigate to the Connections tab

Enter your Secoda API key (You can generate an API key by )

Grant the necessary privileges to the application

3. Network Rule Setup
By default, the native app can connect to Secoda's US Cloud service (app.secoda.co). If you use any other URL to access Secoda, you will need to create a network rule.
To create a network rule:
In Snowflake, navigate to Admin → Security → Network Rules
The network rule name depends on your app installation name
If you installed the app as
SECODA_APP
, the rule will be namedSECODA_APP_SECODA_API_NETWORK_RULE
Add your custom Secoda endpoint to the network rule

4. Create Integration in Secoda
Before proceeding with the application configuration, you need to create a Native Snowflake integration in Secoda:

You will not need to configure any authentication for this integration. After creating the integration in Secoda, return to Snowflake and launch the "INSTALL_SECODA" Streamlit program from the application header.
Setup Wizard
The setup process guides you through three essential steps:
1. Connect to Secoda
By default, the installation connects to Secoda's US cloud (app.secoda.co)
Custom endpoint options are available for EU cloud, single-tenant, or on-premise deployments
2. Select Integration
Choose which Secoda integration to use with your Snowflake data
The app will list compatible Snowflake integrations from your Secoda account
If no integrations exist, you'll need to create one in Secoda first
3. Configure Features
Catalog: Enable to discover, explore, and document your Snowflake data assets
Monitor: Enable to track data quality and freshness metrics
Once the setup is complete, your Secoda Native Snowflake App is ready to use!
Using the Native App
You can interact with the Secoda Native Snowflake App in two ways:
Streamlit-powered GUI: A user-friendly interface for configuring and managing your integration
SQL commands: Execute SQL statements via a worksheet to perform the same operations
Most functionality available through the GUI can also be accessed via SQL commands, offering flexibility based on your team's preferences.
Required Permissions
For each database you want to monitor or catalog, grant the following permissions:
-- Replace placeholders with your actual database, schema, and table names
GRANT USAGE ON DATABASE <your_database> TO APPLICATION secoda_app;
GRANT USAGE ON SCHEMA <your_database>.<your_schema> TO APPLICATION secoda_app;
GRANT SELECT ON TABLE <your_database>.<your_schema>.<your_table> TO APPLICATION secoda_app;
Monitoring
The monitoring feature allows you to create data quality monitors that run within your Snowflake account using your Snowflake credits. Only the final calculated information is sent to Secoda.
Secoda tracks these metrics and can alert stakeholders when values exceed configured thresholds or when anomalies are detected.
Creating Monitors
You can create monitors using SQL commands. Here are some common examples:
-- Basic row count monitor
CALL SECODA_APP.MONITORING.CREATE_MONITOR(
MONITOR_KEY => 'users_row_count',
NAME => 'Users Table Row Count',
METRIC_TYPE => 'row_count',
TABLE_CATALOG => 'your_database',
TABLE_SCHEMA => 'your_schema',
TABLE_NAME => 'your_table'
);
-- Column-based monitor with manual thresholds
CALL SECODA_APP.MONITORING.CREATE_MONITOR(
MONITOR_KEY => 'users_max_age',
NAME => 'Users Maximum Age',
METRIC_TYPE => 'max',
TABLE_CATALOG => 'your_database',
TABLE_SCHEMA => 'your_schema',
TABLE_NAME => 'your_table',
COLUMN_NAME => 'age',
THRESHOLDS_METHOD => 'manual',
THRESHOLDS_MAX => 100,
THRESHOLDS_MIN => 20
);
-- Custom SQL monitor
CALL SECODA_APP.MONITORING.CREATE_MONITOR(
MONITOR_KEY => 'active_users',
NAME => 'Count of Active Users',
METRIC_TYPE => 'custom_sql',
TABLE_CATALOG => 'your_database',
TABLE_SCHEMA => 'your_schema',
TABLE_NAME => 'your_table',
QUERY => 'SELECT COUNT(*) FROM your_database.your_schema.your_table WHERE is_active = TRUE'
);
-- Freshness monitor
CALL SECODA_APP.MONITORING.CREATE_MONITOR(
MONITOR_KEY => 'data_freshness',
NAME => 'Data Freshness',
METRIC_TYPE => 'freshness',
TABLE_CATALOG => 'your_database',
TABLE_SCHEMA => 'your_schema',
TABLE_NAME => 'your_table',
COLUMN_NAME => 'last_updated'
);
Running and Managing Monitors
To run a specific monitor:
CALL SECODA_APP.MONITORING.RUN_MONITOR('monitor_key');
You can also manage your monitors:
-- Pause a monitor
CALL SECODA_APP.MONITORING.PAUSE_MONITOR('monitor_key');
-- Resume a monitor
CALL SECODA_APP.MONITORING.RESUME_MONITOR('monitor_key');
-- Update a monitor's thresholds
CALL SECODA_APP.MONITORING.UPDATE_MONITOR(
MONITOR_KEY => 'monitor_key',
THRESHOLDS_METHOD => 'manual',
THRESHOLDS_MAX => 100
);
-- Clear all monitors
CALL SECODA_APP.MONITORING.CLEAR_MONITORS();
Catalog
The Catalog feature automatically discovers and syncs metadata about all schemas, tables, and columns that the app has been granted access to. The catalog syncs automatically at 12 AM UTC daily. After the sync completes, it may take a few hours for the metadata to be available in Secoda.
Manual Catalog Sync
You can also manually trigger a catalog sync:
Open the "MANAGE_CATALOG" Streamlit application
Click "Push Catalog" to start the sync process
Once complete, go to Secoda and open the integration page
Click "Pull Metadata" to import the metadata into Secoda
Last updated
Was this helpful?