How do you profile, test and monitor data quality in Snowflake with TestGen?

DataOps TestGen connects to Snowflake through a read-only role with key-pair authentication, runs profiling and data tests inside your account as SQL on a warehouse you choose, monitors each table's freshness, volume, and schema over time, and publishes data quality scorecards. It works next to Data Metric Functions. TestGen is Apache 2.0 and free for one database connection.

Key points

  • TestGen needs USAGE on a Snowflake warehouse, database, and schema plus SELECT on the tables; information_schema metadata comes with USAGE on the database, per TestGen's access requirements in October 2026.
  • TestGen's docs recommend key-pair authentication for Snowflake because Snowflake is deprecating single-factor password sign-in; existing password connections keep working until Snowflake disables them.
  • In a DataKitchen case study, a team profiled a Snowflake environment of more than 100 schemas with most tables over 100 million rows, and found an extra-small warehouse thrashed while sizing up roughly doubled throughput per step.
  • TestGen profiles 55 column characteristics, flags 32 data hygiene issues, generates 34 test types, and offers 19 business-rule and custom SQL test types, all run as SQL in your Snowflake account.
  • Snowflake Data Metric Functions require Enterprise Edition and bill as serverless credits; TestGen runs on any warehouse its role can use and needs no Snowflake edition feature.

DataOps TestGen connects to Snowflake through a read-only role, runs every query as SQL on a warehouse you pick, monitors tables over time, and scores the results. Nothing is written back to your account. This page is the setup. For how TestGen compares with Data Metric Functions, Monte Carlo, and Anomalo, read the Snowflake tool comparison.

Connect

TestGen’s access requirements for Snowflake, as of October 2026, are USAGE on the warehouse, database, and schema, and SELECT on the tables. information_schema comes with USAGE on the database and returns metadata only for objects the role can see.

Authenticate with a key pair. TestGen’s docs recommend it because Snowflake is deprecating single-factor password sign-in. A minimal setup in Snowflake SQL:

CREATE ROLE testgen_reader;
GRANT USAGE ON WAREHOUSE testgen_wh TO ROLE testgen_reader;
GRANT USAGE ON DATABASE analytics TO ROLE testgen_reader;
GRANT USAGE ON SCHEMA analytics.gold TO ROLE testgen_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA analytics.gold TO ROLE testgen_reader;
GRANT SELECT ON FUTURE TABLES IN SCHEMA analytics.gold TO ROLE testgen_reader;
GRANT SELECT ON ALL EXTERNAL TABLES IN SCHEMA analytics.gold TO ROLE testgen_reader;

CREATE USER testgen_svc TYPE = SERVICE
  DEFAULT_ROLE = testgen_reader DEFAULT_WAREHOUSE = testgen_wh
  RSA_PUBLIC_KEY = '<public key>';
GRANT ROLE testgen_reader TO USER testgen_svc;

The future-tables grant keeps new tables in scope without a ticket. Repeat the schema grants for each schema you’ll profile.

Size the warehouse

Every TestGen query runs on that warehouse, so profiling shows up on your Snowflake bill. Give TestGen its own warehouse and you can read the cost off one line.

A DataKitchen customer profiled a Snowflake environment of more than 100 schemas, most tables over 100 million rows, in a 24-hour window before taking it over from a consulting firm. The constraint was the warehouse, not TestGen. On extra-small the work thrashed. Sizing up roughly doubled throughput per step.

Two settings help. Profile sampling estimates pattern and character counts from a sample, while record counts, distinct counts, minimums, maximums, and percentiles still cover the full table. And the scheduling docs recommend profiling biweekly to monthly and testing daily to weekly.

Profile

Profiling collects 55 column characteristics and flags 32 data hygiene issues: type mismatches, unexpected nulls, mixed patterns, suspect dates, and probable PII. A table group is one schema plus include and exclude masks. Snowflake external tables and Apache Iceberg tables are in scope, per the TestGen product page, as long as the role can SELECT them.

Test

Generate tests and TestGen picks from 34 test types, sets thresholds from the profile, and fills the suite. You add any of 19 business-rule and custom SQL test types by hand. Schedule runs in TestGen, or trigger them through the REST API from whatever runs your loads. Running TestGen from Snowflake Tasks covers the in-Snowflake option.

Moving to or from Snowflake? TestGen’s table comparison tests run the same suite against the source and the target.

Observe

Monitors watch each table between test runs. Freshness compares a hash of key columns to the last run and learns the update schedule. Volume tracks row counts. Schema reports every added, dropped, or retyped column. Metric monitors track a value you define. Run them at about twice the rate your tables change.

DataOps Observability has no Snowflake agent. It watches the tools around Snowflake through agents for Airflow, dbt Core, Fivetran, Power BI, and others. Export TestGen results to Observability and a failed Snowflake test sits next to the job run that loaded the table.

Dashboard

Each table group gets a scorecard on the Quality Dashboard. The quality score multiplies a profiling score by a testing score, weighted so an issue on a primary key in a small dimension table can count more than the same issue on a low-cardinality flag in a large fact table. A CDE score covers only columns flagged as critical data elements. The hygiene issue list also exports as a PDF report you can send to whoever owns the source.

TestGen Quality Dashboard showing a Default scorecard with a total score, a CDE score, profiling and testing sub-scores, and scores by quality dimension

The screenshot shows TestGen’s Quality Dashboard. It is the same on every database TestGen supports.

Walkthrough

These steps follow the Snowflake quickstart and the current Manage Connections page.

  1. Install TestGen.
  2. Create the role and service user above.
  3. In TestGen, open Connections, click Add Connection, and choose Snowflake.
  4. Enter the host, database, and user, choose key-pair authentication, and click Test Connection.
  5. Create a table group: name the schema, set the masks, and click Verify Access.
  6. Leave Run profiling on. Review hygiene issues on the Profiling Runs page.
  7. Leave Generate and schedule tests on, name the suite, and set a schedule.
  8. Configure monitors and set their schedule.
  9. Open the Quality Dashboard.

TestGen and Data Metric Functions

Snowflake Data Metric FunctionsDataOps TestGen
What it checksOne attribute per DMF, on tables and columns you attach it toEvery table in a table group, profiled and tested
Test authoringYou pick DMFs and expectations; Cortex Data Quality suggests checks34 generated test types plus 19 business-rule types
MonitoringVolume and freshness anomaly detectionFreshness, volume, schema, and metric monitors
Compute and costServerless credits, hourly by defaultYour warehouse; free open source, or Enterprise per user and connection
EditionEnterprise Edition requiredAny edition

Snowflake details come from its data quality overview, checked October 21, 2026. Use both: a DMF on the three tables the CFO watches, and TestGen on the other few thousand.

Pricing

The core profiling, testing, and monitoring engine is free and open source. Enterprise adds team access, security, Commercial Pharma tests, source-data controls for AI, and support. Open source covers one user, one database connection, and one project, with unlimited tables. Enterprise is $100 per user per month plus $100 per database connection per month. Snowflake is one of 14 databases TestGen supports, on the same pricing.

Documentation: Snowflake quickstart, Connect your data, Access requirements, Manage connections, Manage table groups, Monitor tables, Quality scores, Run profiling and tests, Connect to Observability.

Frequently asked questions

Short answers to the follow-up questions people ask next.

Does any data leave my environment?

No. TestGen runs profiling and tests as SQL inside your Snowflake account, and TestGen itself runs on your own infrastructure. Only results and metadata are stored in TestGen's application database, including the most frequent values and minimum and maximum text values that profiling keeps for display in the Data Catalog. TestGen never writes to your tables.

Should TestGen use key-pair or password authentication for Snowflake?

Key-pair. TestGen's access requirements recommend it for every new Snowflake connection, because Snowflake is deprecating single-factor password sign-in as part of its MFA rollout. Existing password connections still work, but migrate them before Snowflake disables password sign-in for your account. Give TestGen its own service user and role.

What Snowflake warehouse size does TestGen need?

Start small for testing and size up for big profiling runs. In DataKitchen's case study of a Snowflake environment with more than 100 schemas and most tables over 100 million rows, an extra-small warehouse thrashed during profiling, and sizing up roughly doubled throughput per step. Profile biweekly to monthly, and turn on profile sampling for very large tables.

Does TestGen test Snowflake external tables?

Yes. The TestGen product page lists Snowflake external tables among the structured sources TestGen tests, along with Apache Iceberg tables. TestGen queries them through your warehouse like any other table, so the read-only role needs SELECT on the external tables in the schema.

Should I use Snowflake Data Metric Functions or TestGen?

Both, for different jobs. Data Metric Functions measure one attribute on a table you choose, every hour by default, and alert in Snowsight; they require Enterprise Edition. TestGen profiles every table in a schema and generates a suite of up to 34 test types from the profile, so you get coverage on columns nobody thought to attach a DMF to.

Try it on your own data

DataOps TestGen is free and open source. Profile a table and generate its tests this afternoon.