Connecting to Snowflake
Connect your Snowflake account to CloudZero to bring your Snowflake cost and usage data, including Cortex AI spend, into a unified view of all your cloud and SaaS spend. CloudZero organizes your Snowflake costs, along with your other costs, into categories (called Dimensions) that matter most to your business. For example: business unit, team, product, feature, environment, customer, or virtually anything else. Once connected and organized, you can quickly answer questions about your spend that matter to your stakeholders.
This guide covers configuring a Snowflake connection and running the CloudZero SQL script in your Snowflake account. CloudZero connects through Snowflake's Secure Data Sharing, establishing a share from your account to CloudZero's Snowflake account in the same region. All access is read-only.
CloudZero supports all Snowflake regions except government cloud regions (SnowGov).
What you need
- CloudZero user with admin permissions
- Snowflake account with permissions to create roles, databases, procedures, and shares (the SQL script creates read-only resources)
- Your Snowflake contract pricing:
| Value | How to find it |
|---|---|
| Cost Per Credit (Capacity Credit Price) | Query the Rate_Sheet_Daily view, or find it on your Snowflake bill |
| Cost Per TB Month (Capacity Storage Price) | Same source as Cost Per Credit |
| Cost Effective Date | The date your current pricing took effect |
Do not connect Snowflake reader accounts. The provider account assumes all credit charges for reader account usage.
Step 1: Configure the connection in CloudZero
-
In CloudZero, go to Settings > Cloud Connections.
-
Select Create Connection + and select the Snowflake tile.
-
Enter the connection details:
Field Value Connection Name A display name for this connection in CloudZero Cost Per Credit Your Snowflake Capacity Credit Price Cost Per TB Month Your Snowflake Capacity Storage Price Cost Effective Date The date your pricing took effect. If your pricing has not changed since the account was created, use the account creation date. Snowflake Account ID Run SELECT LOWER(CURRENT_ACCOUNT());in SnowflakeSnowflake Account Region Run the following in Snowflake: SHOW REGIONS; SELECT display_name FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE snowflake_region = CURRENT_REGION(); -
Select Save. A SQL script appears on the next screen.
Step 2: Run the CloudZero SQL script in Snowflake
- Copy the SQL script from the CloudZero screen.
- Paste it into a Snowflake worksheet in your account.
- Select the All Queries checkbox.
- Select Run.
The first run can take 3+ hours if your billing tables have not been queried before. Subsequent runs take minutes.
Step 3: Verify the connection
Return to Settings > Cloud Connections in CloudZero and refresh. Your Snowflake connection appears in the Billing Connections table.
What to expect
After CloudZero discovers the share, the connection status changes from Pending Data to Healthy:
- Discovery: Up to an hour after the SQL script completes.
- Cost data in Explorer: Up to 24 hours for the initial sync.
- Additional accounts: Connect each Snowflake account individually using the same process.
If CloudZero loses access to the share, the connection status changes and displays details about the issue.
You can also query your CloudZero cost data directly from your own Snowflake account. See Query CloudZero Data in Snowflake for setup instructions.
Connection details
Tag support
Snowflake tags are available in CloudZero for serverless features but not for standard warehouse queries:
| Usage type | Examples | Tags in CloudZero |
|---|---|---|
| Serverless features | Snowpipe, search optimization, automatic clustering | Yes. Tags on the associated table, schema, or database are available throughout CloudZero, including for cost allocation with CostFormation. |
| Warehouse queries | Standard user-driven queries | No. Usage is tracked at the warehouse level only. |
If tags are not appearing for a serverless feature, verify the tag is applied to the object, schema, or database in your Snowflake account using the TAG_REFERENCES view.
Permissions
All CloudZero access is read-only. The SQL script in Step 2 creates the following resources in your Snowflake account and establishes a share to CloudZero:
| Resource | Name | Purpose |
|---|---|---|
| Role | CLOUDZERO_COPY_BILLING_DATA_ROLE | Reads data and executes the sync procedure |
| Database | CLOUDZERO_SHARED_DATA | Intermediate database between your billing views and the share |
| Procedure | CLOUDZERO_COPY_BILLING_DATA | Syncs data periodically from billing tables and views |
| Share | CLOUDZERO_SHARE | Shares data from CLOUDZERO_SHARED_DATA to CloudZero |
The script grants read access to the following tables and views:
| Schema | Table / View | Purpose |
|---|---|---|
ACCOUNT_USAGE | METERING_HISTORY | Credit usage by warehouse |
ACCOUNT_USAGE | METERING_DAILY_HISTORY | Daily credit usage by warehouse |
ACCOUNT_USAGE | DATABASE_STORAGE_USAGE_HISTORY | Storage usage by database |
ACCOUNT_USAGE | STAGE_STORAGE_USAGE_HISTORY | Storage usage by stage |
ACCOUNT_USAGE | WAREHOUSE_EVENTS_HISTORY | Warehouse lifecycle events |
ACCOUNT_USAGE | QUERY_HISTORY | Query execution details (the query_text column is excluded) |
ACCOUNT_USAGE | TAGS | Tag definitions |
ACCOUNT_USAGE | TAG_REFERENCES | Tag assignments to objects |
ORGANIZATION_USAGE | USAGE_IN_CURRENCY_DAILY | Organization-level spend |
ORGANIZATION_USAGE | REMAINING_BALANCE_DAILY | Contract balance tracking |
ORGANIZATION_USAGE | RATE_SHEET_DAILY | Contract pricing rates |
CloudZero also collects Cortex AI usage data to surface AI-driven spend alongside the rest of your Snowflake costs:
| Schema | Table / View | Purpose |
|---|---|---|
ACCOUNT_USAGE | CORTEX_AGENT_USAGE_HISTORY | Agent workflows |
ACCOUNT_USAGE | CORTEX_AI_FUNCTIONS_USAGE_HISTORY | AI function invocations |
ACCOUNT_USAGE | CORTEX_ANALYST_USAGE_HISTORY | Natural language queries |
ACCOUNT_USAGE | CORTEX_CODE_CLI_USAGE_HISTORY | Code generation (CLI) |
ACCOUNT_USAGE | CORTEX_CODE_SNOWSIGHT_USAGE_HISTORY | Code generation (Snowsight) |
ACCOUNT_USAGE | CORTEX_DOCUMENT_PROCESSING_USAGE_HISTORY | Document processing |
ACCOUNT_USAGE | CORTEX_REST_API_USAGE_HISTORY | REST API calls |
ACCOUNT_USAGE | CORTEX_SEARCH_BATCH_QUERY_USAGE_HISTORY | Search batch queries |
ACCOUNT_USAGE | CORTEX_SEARCH_DAILY_USAGE_HISTORY | Search daily totals |
ACCOUNT_USAGE | CORTEX_SEARCH_SERVING_USAGE_HISTORY | Search serving |
Maintenance and configuration
Deleting a connection
Snowflake connections cannot be deleted through the CloudZero UI. Contact your account manager to remove a Snowflake connection.
Updating a manual connection
If you have a non-us-east-1 Snowflake connection that uses the legacy S3-based ingestion method, update the IAM trust relationship. See Update a Legacy Snowflake Connection for details.
Have questions or feedback? Reach out to your account manager.
