SnowExporter v1.0
The initial release of SnowExporter on the Snowflake Marketplace. Run a query, deliver the result by email or to cloud storage, on demand or on a schedule — all inside your Snowflake account.
What's in v1.0
Delivery modes
- Email in the body — up to 50 rows (Snowflake email integration limit)
- Email with presigned download link to a file written to an internal stage
- File write to an internal stage or to AWS S3, GCP GCS, or Azure Blob
File formats & options
- CSV (default) or JSON
- Optional GZIP compression
- Optional timestamp suffix on the file name
- Partitioned or single-file output (follows Snowflake's
COPY INTOrules)
Scheduling
- Cron-based schedules for any export type
- Timezone configurable in Settings → Timezone
- Pause / resume / delete from the Scheduled Exports page
- Refresh button on Scheduled Exports for the brief metadata latency after resume
Destinations
- Multi-destination support — define as many as you need
- Per-destination enable / disable
- Per-destination Description and Business Contact metadata
- Per-destination "allowed roles" policy, recorded and surfaced in UI (see Limitations for the enforcement caveat)
Application roles
app_admin— full access (Settings, schedules, all destinations)app_analyst— limited / consumer access, granted as a sub-role ofapp_admin- Per-user role provisioning helper in Settings → Users that generates the SQL for the one-role-per-user pattern
Observability
- Activity dashboard on the Home page
- Full audit log on the Logs page — email sends, file exports, schedule lifecycle
- Per-query actual compute credits pulled from
ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORYwhen available
Three narrow privileges — and that's it.
| Privilege | Why |
|---|---|
IMPORTED PRIVILEGES ON SNOWFLAKE DB | Read ACCOUNT_USAGE.QUERY_ATTRIBUTION_HISTORY for actual compute credits per query on the Logs page. |
EXECUTE TASK | Run scheduled exports as Snowflake tasks. |
EXECUTE MANAGED TASK | Run scheduled exports as serverless managed tasks when a warehouse is granted. |
The app does not request CREATE DATABASE,
MANAGE WAREHOUSES, or any privileges it does not use. The granted privileges
match exactly what is declared in manifest.yml.
What the consumer runs as ACCOUNTADMIN.
The app provides in-UI helpers that generate the exact SQL for each step. This section summarizes what those steps are.
1. Email notification integration (required for any email send)
USE ROLE ACCOUNTADMIN;
CREATE OR REPLACE NOTIFICATION INTEGRATION NATIVE_APP_EMAIL_INTEGRATION
TYPE = EMAIL
ENABLED = TRUE;
GRANT USAGE ON INTEGRATION NATIVE_APP_EMAIL_INTEGRATION
TO APPLICATION SNOWEXPORTER;
Keep the integration named exactly NATIVE_APP_EMAIL_INTEGRATION — that's what the
app references. Snowflake only delivers email to verified user emails on your account; the
app's recipient picker reads from SHOW USERS rather than accepting free-text
emails.
2. Source data access
USE ROLE ACCOUNTADMIN;
GRANT USAGE ON DATABASE <DATABASE> TO APPLICATION SNOWEXPORTER;
GRANT USAGE ON SCHEMA <DATABASE>.<SCHEMA> TO APPLICATION SNOWEXPORTER;
GRANT SELECT ON ALL TABLES IN SCHEMA <DATABASE>.<SCHEMA> TO APPLICATION SNOWEXPORTER;
-- (optional) SELECT on views:
GRANT SELECT ON ALL VIEWS IN SCHEMA <DATABASE>.<SCHEMA> TO APPLICATION SNOWEXPORTER;
Alternatively, use the manifest reference snowexporter_consumer_table (granted via
the app's reference manager) for a single table.
3. Export destinations
Internal stage — Snowflake-managed; no storage integration needed.
External cloud (AWS S3 / GCP GCS / Azure Blob) — same shape: create a
STORAGE INTEGRATION, grant USAGE on it to the app, and for AWS
configure the IAM role trust policy with the STORAGE_AWS_IAM_USER_ARN and
STORAGE_AWS_EXTERNAL_ID from DESC INTEGRATION.
4. (Optional) Warehouse for scheduled tasks
If you want scheduled exports to run as serverless managed tasks rather than against a
user-specified warehouse, grant the app access to a warehouse via the
snowexport_native_app_warehouse reference
(Snowsight → Application → Grant access).
What v1.0 does not do.
- Email body delivery: ≤50 rows per send (
SYSTEM$SEND_EMAILcap). - Email recipients: verified Snowflake user emails only — no free-text addresses.
- Per-destination role enforcement: policy-only in v1.0; runtime enforcement is on the roadmap.
- Per-file size: follows Snowflake's
COPY INTOlimits.
Available now
SnowExporter v1.0 is live on the Snowflake Marketplace.