Changelog
Deprecation policy
GX Core follows Semantic Versioning 2.0.0, including its guidelines for deprecation.
When we deprecate public functionality, we will
- update our documentation to let you know about the change.
- issue a new minor release with the deprecation in place.
Before we completely remove the functionality in a new major release, there will be at least one minor release that contains the deprecation so that you can smoothly transition.
Deprecation timeline
This table lists every deprecated item, the version that deprecated it, and the version that removes it; a row is never deleted, even after the removal ships.
| Deprecated | Since | Removal | Replacement |
|---|---|---|---|
String values for numeric batch parameters (year, month, day, …) | 1.21.0 | 2.0.0 | Pass integers |
_atomic_prescriptive_template | 0.15.43 | 1.17.1 | |
str support for Validator.validate run_id | 0.13.0 | 1.17.0 | RunIdentifier or dict |
ColumnMetricProvider (and DeprecatedMetaMetricProvider) | 0.13.25 | 1.17.0 | ColumnAggregateMetricProvider |
Batch args data_context, datasource_name, batch_parameters, batch_kwargs | 0.14.0 | 1.17.0 | |
PandasDBFSDatasource | 1.16.0 | 2.0.0 | PandasFilesystemDatasource |
SparkDBFSDatasource | 1.16.0 | 2.0.0 | SparkFilesystemDatasource |
schema_name argument of TableAsset / add_table_asset | 1.14.0 | 2.0.0 | Schema-qualified table_name |
DatabaseStoreBackend, TupleStoreBackend family, QueryStore, MetricStore | 1.0.0 | 1.13.0 | |
String-style row_condition | 1.9.0 | 2.0.0 | RowCondition expression objects |
RuleBasedProfiler | 1.0.0 | 1.5.1 | |
DataContext.add_or_update_datasource | 1.3.0 | 2.0.0 | context.data_sources.add_* / update_* |
context.get_datasource | 1.1.2 | 2.0.0 | context.data_sources.get |
result_url on CheckpointResult | 1.1.2 | 1.1.2 | |
mostly on ExpectColumnUniqueValueCountToBeBetween | 1.1.0 | 1.1.0 | |
force_reuse_spark_context argument of SparkDFExecutionEngine / Spark datasources | 1.0.0 | 2.0.0 | spark_config |
get_or_create_spark_application() | 1.0.0 | 2.0.0 | Create the Spark session outside GX |
get_or_create_spark_session() | 1.0.0 | 2.0.0 | Create the Spark session outside GX |
MapMetricProvider.is_sqlalchemy_metric_selectable | 0.16.1 | 2.0.0 | |
context.sources.delete_<type> CRUD methods | 0.17.2 | 2.0.0 | context.sources.delete |
| V2 API style custom rendering | 0.13.28 | 2.0.0 | |
gx-redshift install extra (alias of redshift) | 1.21.0 | 2.0.0 | great_expectations[redshift] |
CloudDataContext and cloud mode of get_context(...) | 1.18.0 | 2.0.0 | gx.get_context(mode="file") or mode="ephemeral" |
1.23.2 (2026-09-25)
Compatibility: sqlalchemy now <2.1 (extras snowflake, databricks)
Highlights
-
Fixes GX on SQLAlchemy 2.1 — SQLAlchemy 2.1.0, released 2026-09-24, broke GX 1.23.1 and earlier on Python 3.11+, where every SQL extra resolves it by default. Depending on the backend,
import great_expectationsfailed whenever snowflake-sqlalchemy was installed, every Databricks query failed, driverlesspostgresql://URLs could not load a driver, BigQuery queries comparing against a float failed, SQL Server reported mixed-case and upper-case tables as missing, andexpect_column_values_to_be_of_type(type_="Numeric")failed on float columns. 1.23.2 fixes all of these: thesnowflakeanddatabricksextras stay below SQLAlchemy 2.1 until their dialects support it, and every other SQL extra runs on 2.1. Python 3.10 is unaffected, since SQLAlchemy 2.1 requires Python 3.11. If you can't upgrade yet, pinsqlalchemy<2.1; do the same if you install snowflake-sqlalchemy or databricks-sqlalchemy outside GX's extras. (#12269)pip install --upgrade 'great_expectations[snowflake]' # include your extras so the SQLAlchemy cap applies -
Regex Expectations work on ClickHouse — The four regex Expectations now run on ClickHouse, which does not support
regexp_like(). ClickHouse is covered by integration tests for these Expectations. (#12222)gx.expectations.ExpectColumnValuesToMatchRegex(column="name", regex="^A") -
Correct substring matching for regex Expectations on Snowflake — Snowflake's
REGEXPoperator anchors patterns to the whole value, so unanchored patterns behaved differently there than on other backends. Regex Expectations on Snowflake now use substring semantics that match every other GX backend, while preserving the user's pattern. (#12221)gx.expectations.ExpectColumnValuesToMatchRegex(column="name", regex="ell") -
Nested struct columns supported in Spark value-counts Expectations — On the Spark engine, Expectations that rely on the
column.value_countsmetric — includingExpectColumnMostCommonValueToBeInSetandExpectColumnKLDivergenceToBeLessThan— now work for dotted nested struct paths such asaddress.city, instead of returning an empty result with an unresolved-column error. (#12231)gx.expectations.ExpectColumnMostCommonValueToBeInSet(column="address.city", value_set=["Springfield"])
Changes
Bug fixes
- GX works on SQLAlchemy 2.1, which broke 1.23.1 on several backends: the
snowflakeanddatabricksextras are capped below 2.1, a broken snowflake-sqlalchemy install no longer preventsimport great_expectations, driverlesspostgresql://URLs fall back to psycopg2 when psycopg is unavailable, BigQuery rendersDoubleasFLOAT64, SQL Server reflects mixed-case tables, theNumerictype name matches float columns again, and database URL masking keeps the database and query string verbatim. (#12269) - Validation results containing an infinite
Decimalvalue — for example the maximum, mean or sum of a PostgreSQLnumericcolumn or a pandas column ofDecimalvalues — now serialize as float infinity instead of raisingdecimal.InvalidOperation. (#12254) - Regex Expectations on Snowflake now match substrings, consistent with other backends, rather than requiring the pattern to match the entire column value. (#12221)
UnexpectedRowsExpectationno longer misreads a query as containing a JOIN when the letters appear inside a string literal, a column name such asjoin_date, a quoted identifier or a comment; such queries are aliased correctly again and no longer fail with a syntax error on MySQL and SQL Server. (#12249)- Building validators on multiple threads no longer serializes or deadlocks on Python 3.10 and 3.11: concurrent validator construction now proceeds independently per instance while still building each validator only once. (#12232)
- Regex Expectations now work on ClickHouse, which lacks
regexp_like(); other SQL dialects are unchanged. (#12222) - Type Expectations on ClickHouse now compare and report the underlying SQL type for nullable columns instead of the
Nullable(T)wrapper, soExpectColumnValuesToBeOfTypeandExpectColumnValuesToBeInTypeListbehave as expected. (#12219) - The Spark
column.value_countsmetric now resolves nested struct columns such asaddress.city, so Expectations built on it return results instead of an unresolved-column error. (#12231)
Docs
- The changelog entries for releases 1.0.0 through 1.17.0 are rewritten in the structured format, and the previously missing 1.13.1 release now has its own entry. (#12227)
- The changelog entries for releases 1.17.1 through 1.23.0 are rewritten in the structured format, and the deprecation timeline gains rows for the
gx-redshiftextra alias and forCloudDataContext/ cloud mode ofget_context. (#12225)
Maintenance
- Redshift CI jobs are capped to three concurrent runs against the shared cluster, and test teardown now drops every test schema with retries so failed runs no longer leak schemas. No user-visible change. (#12257)
Contributors
Thanks to @adimalkar, @Rayan-and-beyond (first contribution), @nanjeshramesh, @feiiiiii5, @alibro005, @pentaoa (first contribution).
1.23.1 (2026-09-18)
Known issue: on Python 3.11+, this release resolves SQLAlchemy 2.1 (released 2026-09-24), which it does not support. Upgrade to 1.23.2, or pin sqlalchemy<2.1.
Highlights
-
Spark now evaluates each regex independently with match_on="all" — On Spark, ExpectColumnValuesToMatchRegexList with match_on="all" now checks every regex separately against each column value, so patterns anchored at different positions (such as ^A and [0-9]{3}$) both match a value that satisfies them. This matches the behavior already seen on Pandas and SQL. (#12198)
gxe.ExpectColumnValuesToMatchRegexList(
column="id",
regex_list=["^A", "[0-9]{3}$"],
match_on="all",
) -
Each Validator reports results for its own Batch when a datasource is reused — Validators built on the same datasource no longer borrow one another's Batch. Running two validation definitions on threads, or creating two validators from one datasource on a single thread, now evaluates and reports each validator's own data, with the correct batch_id, batch_spec and batch_definition on the result. This fixes a long-standing latent bug made reachable by #12148 in the 1.23.0 release. (#12211)
validator_a = context.get_validator(batch_request=request_a)
validator_b = context.get_validator(batch_request=request_b)
# validator_a still validates request_a's batch
result = validator_a.expect_table_row_count_to_equal(value=3) -
A Spark schema saved in great_expectations.yml reloads correctly — A persisted spark_schema is now read back through StructType.fromJson, so reopening a File Data Context round-trips the schema instead of failing inside PySpark. Values that are not an accepted schema form now raise a validation error naming the field and the accepted types. (#12200)
context = gx.get_context(mode="file")
asset = context.data_sources.get("spark_ds").get_asset("my_asset")
assert asset.spark_schema is not None -
GX config files are read and written as UTF-8 regardless of locale — config_variables.yml and great_expectations.yml, and the .gitignore read while scaffolding a project, are now opened with an explicit UTF-8 encoding. Projects containing non-ASCII values or comments can be created and reloaded on hosts with a non-UTF-8 locale, and a project YAML file that is not valid UTF-8 now raises an error naming the file instead of a bare decode error. (#12182, #12204)
-
A gallery-wide test tier for data sources — A new gallery support tier asserts a measured test result across the entire shipped expectation library — one case per registered expectation, each pairing a passing and a failing configuration — and nine data sources (pandas in-memory and filesystem CSV, SQLite, MySQL, PostgreSQL, Trino, BigQuery, Databricks and Redshift) now declare it after being measured against the full gallery. (#12150)
Changes
Features
- Adds a gallery support tier that asserts a passing test result over the whole shipped expectation library, with nine data sources declaring it, a required CI lane per member, membership and coverage guards, and a measurement mode for evaluating new candidate backends. (#12150)
Bug fixes
- ExpectColumnValuesToMatchRegexList with match_on="all" on Spark now evaluates each regex independently, so patterns anchored at different positions no longer fail on values that satisfy them all. (#12198)
- A Validator now keeps the identity of the Batches it loaded even when its execution engine is shared, so concurrent validations and multiple validators on one datasource each evaluate and report their own Batch; a configuration naming a batch the engine does not hold now raises instead of silently validating the most recently loaded batch. (#12211)
- The remaining config file reads and writes in the serializable data context are pinned to UTF-8, so scaffolding a project with a non-ASCII .gitignore and reading or updating great_expectations.yml work under a non-UTF-8 locale; an unreadable project YAML now raises an error naming the file. (#12204)
- A spark_schema persisted in great_expectations.yml is loaded back through StructType.fromJson so the schema round-trips when the context is reopened, and an unsupported value raises a validation error naming the field and the accepted types. (#12200)
- The Spark test-connection test, which covers behavior when PySpark is unavailable, is now skipped when PySpark is installed so it no longer fails for contributors with PySpark in their environment. (#12199)
- config_variables.yml is now read and written as UTF-8, so saving and reloading a configuration variable containing non-ASCII characters works on hosts with a non-UTF-8 locale. (#12182)
Docs
- The changelog now carries a deprecation timeline table listing every deprecated item, the version that deprecated it, and the version that removes it. (#12224)
- Documentation fixes: the credential-configuration pages now point at gx/uncommitted/config_variables.yml, a mistagged code fence highlights again, a misspelled snippet name is corrected, and doubled words and spelling errors across the core docs, ADRs, gallery docs and contrib READMEs are fixed. (#12177)
- Oracle is now documented on the connection-string reference (oracle+oracledb://...?service_name=...), the compatibility reference with its tested database version, and the data source method reference via add_sql. (#12167)
Maintenance
- The pull request title check now requires exactly one current tag at the start of the title, and the contributor docs and template name only the four current tags. (#12223)
- The published package metadata now includes project URLs linking to the source repository, documentation and homepage, so PyPI and dependency-tracking services can associate the package with its repository. (#12207)
- The metric repository retriever tests are now type-checked, with concrete annotations replacing Any and the module removed from the mypy exclude list. (#12184)
- The expectations test suite is now type-checked, including two guards that could never fail being corrected to actually test whether an optional dependency imported, and the directory-level mypy exclusion removed. (#12185)
- Five more test modules are removed from the type-check exclusion list. (#12178)
Contributors
Thanks to @lakshayxi (first contribution), @feiiiiii5 (first contribution), @ptimizeroracle (first contribution), @alibro005 (first contribution), @yigitcan-ozturk, @toyeshhm (first contribution), @nanjeshramesh, @p-mandale (first contribution).
1.23.0 (2026-09-10)
Compatibility: new extra oracle
Highlights
-
great_expectations[oracle]is a supported install — Oracle is now a published install path: installing theoracleextra brings in the Oracle driver and floors SQLAlchemy at 2.0, so theoracle+oracledbdialect the connection string needs is always available. The SQL dialect installation-commands table documents the new row. (#12091)pip install 'great_expectations[oracle]' -
Daily and monthly Batch Definitions work on Oracle query assets — Adding a daily or monthly Batch Definition to a query asset on Oracle previously failed with
ORA-00907: missing right parenthesis, reported misleadingly as the partition column not being verifiable as a date or datetime. A query asset's SQL is now wrapped whole, so the Batch Definition can be created. As a side effect, a query whose SQL ends in a trailing line comment no longer breaks Batch Definition creation on any backend. (#12162)asset = datasource.add_query_asset(name="orders", query="SELECT id, created_at FROM my_table")
asset.add_batch_definition_daily(name="daily", column="created_at") -
Consistent verdict for z-score checks on zero or undefined variance —
ExpectColumnValueZScoresToBeLessThanused to disagree by backend on a constant column: pandas flagged every row as an outlier, PostgreSQL and SQL Server surfaced a division-by-zero error, and SQLite and MySQL quietly succeeded. All engines now agree that a column with zero or undefined standard deviation succeeds with no unexpected values. Anyone who relied on this Expectation to catch a stuck or constant column should useExpectColumnStdevToBeBetweenwith a non-zeromin_valueinstead. (#12145)gxe.ExpectColumnValueZScoresToBeLessThan(column="constant", threshold=1.96, double_sided=True)
# success=True, unexpected_count=0 on every backend -
Mixed-case column names no longer break uniqueness checks on SQL backends —
ExpectColumnValuesToBeUniqueraisedKeyError: '<column>'on case-insensitive SQL dialects (Databricks, PostgreSQL, Snowflake, SQL Server, Trino) whenever the column name was not already lower case and the result format asked for rows or unexpected indices. It now evaluates normally, so users who pinned to 1.19.1 for this reason can unpin. (#12180)gxe.ExpectColumnValuesToBeUnique(column="CustomerID") # result_format="COMPLETE" -
SQL execution engines are reused instead of rebuilt on every validation — Every validation against a SQL datasource used to build a new execution engine, with its own SQLAlchemy engine and connection pool, leaking an idle pooled connection per validation and re-running dialect setup each time. The engine is now cached as intended and rebuilt only when the datasource's connection configuration changes; a validation that follows a schema change still reflects the table afresh. (#12148)
datasource.get_execution_engine() is datasource.get_execution_engine() # now True
Changes
Bug fixes
ExpectColumnStdevToBeBetweenon SQLite now reports an undefined standard deviation as anobserved_valueofNone— matching every other backend — instead of returning a result with noobserved_valueand an opaque "user-defined function raised exception" error, for columns with fewer than two non-null values and for empty tables. (#12168)ExpectColumnValuesToBeUniqueno longer raisesKeyErroron SQL backends when a column name is not lower case and the result format requests rows or unexpected indices. (#12180)ExpectColumnValueZScoresToBeLessThannow succeeds with no unexpected values on columns whose standard deviation is zero or undefined, on every backend, instead of failing on pandas or raising a division-by-zero error on PostgreSQL and SQL Server. (#12145)- Reading validation results and project YAML no longer fails with a
UnicodeDecodeErrorunder a non-UTF-8 system locale: filesystem store reads and project-configuration reads and writes are now pinned to UTF-8. (#12125) - Daily and monthly Batch Definitions can now be added to Oracle query assets, which previously failed with
ORA-00907: missing right parenthesis; a query asset whose SQL ends in a line comment also works on every backend now. (#12162) - A query asset whose SQL ends in a
--comment no longer fails validation: the raw SQL is normalized before it is wrapped, so appended text cannot land inside a trailing comment. (#12124) - SQL datasources now reuse their cached execution engine across calls instead of rebuilding it — and leaking a pooled connection — on every validation, while a validation following a schema change still reflects the table afresh. (#12148)
Docs
- Updated repository links in the development, docs-contribution, support and compatibility-reference pages to point at the
fivetran/great_expectationsrepository. (#12126)
Maintenance
pip install 'great_expectations[oracle]'is now a documented, supported install path, with SQLAlchemy floored at 2.0 so the Oracle dialect is available, and an install row added to the SQL dialect installation-commands table. (#12091)- Updated the docs site dependency joi from 17.13.4 to 17.13.7. (#12176)
- Updated the docs site dependency svgo from 3.3.4 to 3.3.5, picking up security hardening. (#12175)
- Removed five unreferenced checkpoint test fixtures and an entirely dead test
conftest.py. (#12174) - Brought the previously excluded modules under
tests/integration/into the type check, correcting their annotations and removing the covering exclude patterns. (#12173) - Brought the seven previously excluded modules under
tests/data_context/into the type check and removed their exclude patterns. (#12171) - Updated the docs site dependency colord from 2.9.3 to 2.10.0. (#12170)
- Brought the partition-and-sample execution engine test modules into the type check, fixing their annotations and removing the covering exclude pattern. (#12169)
- Removed the unreachable
match_onvalue key from the not-match-like-pattern-list metric, so the metric declares only the options it actually reads;ExpectColumnValuesToNotMatchLikePatternListnever acceptedmatch_onand still rejects it. (#12157) - Brought all modules under
tests/core/into the type check and removed their exclude patterns. (#12140) - Brought the modules under
tests/render/into the type check with annotation-only changes, leaving rendering behavior unchanged. (#12152) - Brought the validator metric-calculator and validation-graph test modules into the type check and removed their exclude patterns, with no production behavior change. (#12149)
- Updated the docs site dependency fast-uri from 3.1.5 to 3.1.7, picking up security fixes. (#12151)
- Updated the docs site dependency browserslist from 4.28.1 to 4.28.8. (#12155)
- Contributors opening pull requests from forks once again receive the welcome comment: the broken Slack notification steps and unreachable workflow conditions were removed, and the pyspark 4 and marshmallow 4 lanes now gate required CI and publishing. (#12159)
- Brought
tests/test_utils.py,tests/actions/andtests/checkpoint/test_checkpoint.pyinto the type check, including fixes so a failed database connection surfaces its original error instead of anAttributeErrorfrom the cleanup path. (#12146) - The integration test harness now maps fixture float and datetime columns to portable SQL types, so fixture values are stored as declared instead of being silently rounded or failing table creation on some backends, with new tests pinning the per-backend renderings. (#12147)
- Added a contract suite covering create, update and create-or-update for every registered fluent datasource type, and completed the type stubs so nineteen previously untyped factory methods now expose real signatures and return types to callers. (#12141)
- Generalized the test harness's data source declaration record so non-SQL data sources can declare support tiers, and derived the lists that gate CI from those declarations rather than maintaining them by hand. (#12110)
- Tightened the declared types for resolved metric values, render-content payloads and metric cache keys so callers type-checking against these APIs see fewer false diagnostics, with no runtime or signature changes. (#12116)
Contributors
Thanks to @siddharthgaur1 (first contribution), @Star-cloud626 (first contribution), @nanjeshramesh, @adimalkar (first contribution), @AnandkumarMall (first contribution), @Ryota-Di (first contribution), @yigitcan-ozturk (first contribution), @MannXo, @iamfeldman (first contribution).
1.22.0 (2026-08-31)
Compatibility: marshmallow minimum 3.7.1 → 3.18.0
Highlights
-
Marshmallow 4 is now supported — Great Expectations now installs and runs against both Marshmallow 3 and Marshmallow 4, so it can be installed alongside deployments that pin Marshmallow 4 (such as Apache Airflow 3.3). The supported range is now
marshmallow>=3.18.0with no upper bound; the declared 3.7.1 floor was unreachable in practice, so no currently-working environment is excluded. (#12092, #12118)pip install great_expectations marshmallow==4.3.1 -
Oracle is now a live-tested backend, with three Oracle defects fixed — Oracle joins the SQL test harness with live curated coverage, and the gaps that coverage exposed are fixed: regex Expectations now execute on Oracle instead of raising, query-based Expectations such as
UnexpectedRowsExpectationnow run because the derived-table alias is rendered in the form Oracle's grammar accepts, and daily and monthly batch definitions now work because the date-part string cast carries a length Oracle accepts. No other backend's rendered SQL changes. (#12085, #12103, #12104, #12102)batch_definition = asset.add_batch_definition_daily(
name="daily", column="event_date"
) -
add_storeno longer crashes and empties great_expectations.yml — Callingcontext.add_store()with an existing store's name and a config containing astore_backendkey crashed and leftgreat_expectations.ymlat 0 bytes, making the project unloadable. The config is now serialized before the file is opened, so a serialization failure leaves the existing file byte-for-byte intact, and the context id is written as a string that YAML can represent. (#12081)current = context.config.stores[context.expectations_store_name]
context.add_store(
name=context.expectations_store_name,
config={
"class_name": current["class_name"],
"store_backend": dict(current["store_backend"]),
},
) -
Clearer errors for unsupported regex dialects and masked Azure account keys — Regex Expectations run against a SQL dialect with no regex support now report
Regex is not supported for dialect <name>inexception_infoinstead of an empty message, and Azure connection strings are masked regardless of field order so an account key can no longer appear unmasked in aStoreConfigurationError. (#12109, #12094) -
Data Docs pages render for validation results with no run_id —
context.build_data_docs()silently dropped a validation result's page when the result'smetahad no"run_id"key. Such results now render, with run name and run time shown as__none__. (#12098)context.build_data_docs() # renders a page for every persisted result -
Documentation for the bundled agent skills — A new environment-setup page teaches how to install, verify, use, upgrade, and remove the agent skills that ship inside the
great_expectationspackage, including the overwrite contract and the three skills as one path. (#12074, #12106)python -m great_expectations skills install
python -m great_expectations skills list
Changes
Features
- Marshmallow 4.x is now supported alongside Marshmallow 3 on every supported Python version, with the supported range narrowed to
marshmallow>=3.18.0and the<4.0.0cap removed;config_versionbounds checking behaves identically on both majors. (#12092)
Bug fixes
context.add_store()no longer crashes and truncategreat_expectations.ymlto 0 bytes when re-supplying a store's own config containing astore_backendkey; the project config is now serialized before the file is opened, the context id is persisted as a string, and an absent context id stays empty rather than becoming the string "None". (#12081)- The BigQuery taxi test fixtures now drop their table by name during teardown instead of enumerating every schema on the server, removing the multi-minute stalls that cancelled the docs-snippets CI job. Test infrastructure only; no shipped code path changes. (#12119)
- Regex Expectations run against a SQL dialect without regex support (such as SQL Server) now report "Regex is not supported for dialect <name>" in
exception_infoinstead of an empty exception message, with the dialect name rendered cleanly. (#12109) ExpectColumnPairValuesToBeInSeton pandas now returns a verdict instead of aMetricResolutionErrorwhen the evaluated rows do not use a zero-based consecutive index, such as after null filtering or with a custom DataFrame index. (#12097)- Non-security md5 calls now pass
usedforsecurity=False, so batch identification, dataframe fingerprinting, and partitioning/sampling work on FIPS-enabled hosts. No computed digests change. (#12099) - Azure Blob Storage connection strings are now masked by parsing key=value pairs rather than matching one fixed field order, so a string with reordered fields or no
EndpointSuffixno longer raises aStoreConfigurationErrorcontaining the raw URL and account key. (#12094) context.build_data_docs()now renders a page for a validation result whosemetahas no"run_id"key (or whoserun_idisNone), defaulting run name and run time to__none__instead of silently dropping the page. (#12098)- MySQL, Microsoft SQL Server, and Redshift now declare a backend tier, so they run the metrics parameterizations they were silently absent from (+56, +44, and +56 tests respectively), and a new comparison keeps the two data-source list definitions from parting again; four regex metric modules exclude SQL Server, which has no regex operator. (#12107)
- Query-based Expectations such as
UnexpectedRowsExpectationnow execute on Oracle: the derived-table alias is rendered through one shared helper that omitsASonly for the grammar that rejects it, and the literal-boolean predicate rewrite now also applies to Oracle. No other backend's rendered SQL changes. (#12104) - Regex Expectations now execute on Oracle instead of raising
NotImplementedError, via a new Oracle branch in the dialect-regex helper that rendersREGEXP_LIKEin both positive and negated forms. No other dialect's rendered SQL changes. (#12103) add_batch_definition_dailyandadd_batch_definition_monthlynow work on Oracle: the multi-date-part partition query's string cast supplies an explicit length for the dialect that requires one, so batch retrieval no longer fails withORA-00906. Curated coverage for daily and monthly batch definitions was added for every curated backend. (#12102)
Docs
- Restructured the "Install agent skills" page for progressive disclosure — what the skills do now comes before prerequisites and install, a new "Use the skills" section follows install, maintenance detail is grouped under keeping the skills up to date, and the
--symlinkfailure wording matches the installer's actual behavior. (#12106) - Documentation that teaches batch parameters now passes integers for numeric batch parameters uniformly across file, SQL, and directory sources, and the prose saying the accepted type depends on the asset family has been removed. (#12066)
- Added a documentation page covering the agent skills bundled with GX: what they are, how to install and verify them with
python -m great_expectations skills installandskills list, the overwrite contract, the three skills as one path, and how to upgrade and remove them. (#12074)
Maintenance
- Added a CI lane that installs the Marshmallow 4.x line, asserts the resolution actually landed on 4.x, and runs the unit suite against it. (#12118)
- The SQL Server ODBC driver install script now bounds every apt call with a timeout, restricts its index refresh to the Microsoft repository, retries a failed install once, and the docs-snippets job gained a 30-minute timeout, so the step can no longer hang indefinitely. (#12079)
- The Azure Blob Storage docs fixtures run against live storage again, with the account URL and container read from environment variables instead of a retired hardcoded host; the Spark ABS fixtures remain off. (#12117)
- The docs-creds-needed CI leg now requests the BigQuery, SQL Server, and Redshift backends it already installs, so seven previously-skipped docs fixtures run; Snowflake and Azure stay unrequested and one Redshift fixture stays gated by name for lack of test data. (#12114)
- The five pandas S3 docs fixtures run again, with the bucket read from a repository variable and authentication moved from static access keys to a role assumed through GitHub's OIDC provider; the S3 Spark fixtures remain skipped. (#12111)
- Added a guard that compares the mypy configuration's relaxation surface against a committed inventory and fails the CI type-check in both directions, so adding an exclusion or relaxing override must be made visible in review. (#12115)
- Removed two structural blockers to type-checking the test tree: deleted an
__init__.pyunder a hyphenated, unimportable directory and gavetests/integration/test_script_runner.pyits own shell helper instead of importing one fromassets/. (#12113) - Cleaned up the mypy configuration so it reflects the codebase: 41 dead exclude patterns, 3 dead overrides, the SQLAlchemy import suppression and 1.x plugin, and 6 inert third-party suppressions removed; the generated version-file exclusion is anchored and the linter-ignore script's path filter corrected. (#12112)
- Oracle joins the SQL data-source test harness as a live-tested backend, with a thin-mode
oracledbdriver requirement for the test lane, a pinned Oracle 21c container, anoraclepytest marker and CI lane, and curated-tier coverage; nogreat_expectations[oracle]extra is published yet. (#12085)
Contributors
Thanks to @Dev-iL (first contribution), @ArjunPakhan (first contribution), @joebasrawi (first contribution), @nanjeshramesh, @dkling-it (first contribution), @hemalrajput18 (first contribution), @MannXo (first contribution).
1.21.0 (2026-08-19)
Compatibility: new extra gcs; gx-sqlalchemy-redshift removed (extra gx-redshift); sqlalchemy-redshift added (extra gx-redshift); sqlalchemy minimum → 1.4.0 (extra redshift)
Highlights
-
Integer batch parameters work on every datasource family — Numeric batch parameters such as
yearandmonthnow accept integers on file, directory, and SQL assets alike, so a singlebatch_parametersdict drives one checkpoint spanning files and a warehouse. Digit strings still work but now emit a deprecation warning. A SQL request that matches nothing also explains why, distinguishing an empty table or column from candidates that exist but did not match, and naming the offending parameter and value. (#12065)checkpoint.run(batch_parameters={"year": 2020, "month": 4}) -
Agent-skill guidance ships with the package — Great Expectations now bundles version-matched guidance for coding agents covering data source configuration, expectation authoring, and checkpoint orchestration, installable into a project's agent discovery directories. The guidance names the right optional dependency group for a missing driver, offers a batching cadence instead of assuming one, carries reuse-safe worked examples, and will not install packages, edit configuration files, create a project directory, or save files unless the user asked for it. (#12061, #12062, #12063, #12068, #12073)
python -m great_expectations skills install --target all
python -m great_expectations skills list -
Two experimental expectations promoted into the core library —
ExpectColumnValuesToNotBeOutliers(IQR and standard-deviation methods) and the multicolumn values-equal expectation are now supported core expectations on Pandas, SQL, and Spark, with null-safe evaluation, Gallery metadata, prescriptive rendering, and public exports. (#12011, #12018)gx.expectations.ExpectColumnValuesToNotBeOutliers(
column="fare_amount", method="iqr", multiplier=1.5
) -
Redshift installs the upstream SQLAlchemy dialect —
pip install 'great_expectations[redshift]'now resolves the upstreamsqlalchemy-redshift1.0.0 dialect with SQLAlchemy 2, replacing the Great Expectations fork and lifting asqlalchemy<2.0.0pin that had been holding the dialect back at a three-year-old release. Thegx-redshiftextra keeps working as a deprecated alias that resolves identically. (#12044)pip install 'great_expectations[redshift]' -
S3 requests are attributable to Great Expectations — S3 clients built by Great Expectations now send a
great-expectations/<version>user-agent suffix, appended to any user-supplied agent string rather than replacing it, so operators and S3-compatible providers can see which requests originate from Great Expectations. The S3 Data Source docs also clarify thatendpoint_urlis how you connect to a non-AWS S3-compatible store. (#11937) -
Data Docs no longer advertises a removed suite-editing workflow — The "How to Edit This Suite" button and its popup, which pointed at a CLI command and notebook workflow that no longer exist, are gone from expectation suite and validation results pages, and expectation suite, profiling, and site index pages no longer render an empty "Actions" card. Validation results pages keep the Actions card and its Show All / Failed Only filter. (#12078)
Deprecations
- Digit strings for numeric batch parameters (for example
\{"year": "2024", "month": "02"}) are deprecated; pass integers instead (\{"year": 2024, "month": 2}). Removal in 2.0.0. (#12065) - The
gx-redshiftinstall extra is deprecated and is now an alias that resolves identically toredshift; usegreat_expectations[redshift]. Removal in 2.0.0. (#12044)
Changes
Features
- S3 clients now carry a
great-expectations/<version>user-agent suffix, appended to any user-supplied agent string, and the S3 Data Source docs clarify thatendpoint_urlconnects to an S3-compatible object store. (#11937) ExpectColumnValuesToNotBeOutliersis now a supported core expectation on Pandas, SQL, and Spark, with IQR and standard-deviation detection, consistent null handling, inclusive threshold boundaries, and a clear error for unsupported methods. (#12011)- The bundled agent skills now state up front, and again at each point they could act, that they will not install dependencies, edit configuration files, or save unrequested files without the user asking; the data source skill's batch-parameter examples were also corrected to use integers. (#12073)
- The multicolumn values-equal expectation is promoted into the core library with null-safe equality on Pandas, SQLAlchemy, and Spark, plus Gallery metadata, prescriptive rendering, and public exports. (#12018)
- A third bundled agent skill covers checkpoint orchestration — binding assets and suites into validation definitions, grouping them into a named checkpoint with post-run actions, and verifying with one run — and the expectations skill now routes onward into it; writing a session out to a project also persists validation definitions and checkpoints and reports when an object already existed. (#12068)
- Numeric batch parameters accept integers on file, directory, and SQL assets, so one
batch_parametersdict drives a checkpoint spanning files and SQL; digit strings still work but warn, and a SQL request matching nothing now explains whether the data is absent or the parameter did not match. (#12065) - The bundled agent skills will not create a project directory unless the user has agreed to it and named the path, and the write-out offer is now the end of the flow rather than something done in the same breath as reporting results. (#12063)
- The data source skill now names the correct optional dependency group for a missing driver (read from the installed distribution), keeps the batching question open until the verification probe reports the available columns, and carries the reuse guard inside its worked examples so copying one cannot silently replace an existing data source. (#12062)
- Great Expectations ships agent-skill guidance for configuring data sources and expectations, installable with
python -m great_expectations skills installand listable withskills list; the installer leaves already-correct destinations alone, refuses directories it did not write, and requires--forceto replace user-edited copies. (#12061) - ClickHouse is onboarded as a first-class backend in the SQL integration test harness, which along the way fixed a quantile-metric helper that called a nonexistent execution-engine method and two shared test-harness defects. (#12053)
- Trino is onboarded onto the SQL backend integration-test harness with a pinned container, a declared backend record, corrected double-quote identifier quoting for the dialect, and full curated-tier coverage. (#12050)
- The SQL integration test harness gains a declarative backend framework: a new SQL backend is onboarded by declaring one frozen backend record (schema support, column type overrides, transaction mode, insert parameter limits, table schema items, tiers, and CI wiring) instead of adding dialect-specific branches, with onboarding documentation and a wiring drift check. (#12049)
Bug fixes
- The Python 3.12 minimum-version test job installs dependencies and runs tests again, restoring minimum-version coverage and unblocking the required CI gate. (#12076)
Maintenance
- The "How to Edit This Suite" button and its popup no longer appear in Data Docs, and expectation suite, profiling, and site index pages no longer render an empty "Actions" card; validation results pages keep the Actions card and its validation filter, and the
show_how_to_buttonssite config option still loads but gates nothing. (#12078) - The shipped
SparkDBFSDatasourceJSON schema description now includes the deprecation notice the Python API has carried since 1.16.0, so schema-driven consumers see it too. (#12077) - The distribution now ships version-matched expectation and datasource schema catalogs with index files mapping each datasource schema to its
add_or_update_*factory method and each expectation to its schema, description, data quality issues, and supported data sources. (#12055) - BigQuery test tables are created in the configured dataset rather than in a per-config dataset, and the cleanup job sweeps stale tables within that dataset instead of querying project-level metadata it lacks permission to read. (#12024)
- Added PostgreSQL integration coverage documenting that a quoted schema name on an asset is not honored as quoting today, with the passing bare-name control beside it so the behavior cannot be corrected without the test being updated. (#12051)
- Removed the
gx-redshiftCI launch key now that the Redshift lane selects the canonicalredshiftmarker; the deprecatedgx-redshiftinstall extra is unaffected. (#12060) - The
redshiftextra now installs upstreamsqlalchemy-redshift1.0.0 withsqlalchemy>=1.4.0instead of the Great Expectations fork, fixing a pin that had been silently installing a three-year-old dialect;gx-redshiftremains as a deprecated alias resolving identically. (#12044) - The pull request template and AGENTS.md now state the RFC threshold for new backend support, a new advisory check asks contributors to answer that question when a change looks like new backend support, and the superseded Markdown issue templates that bypassed triage labeling are removed. (#12043)
- The GCS documentation snippets run in CI again behind a dedicated
--gcsflag, and the Spark-on-GCS guide is migrated to the current asset API so it no longer documents a call that raises. (#12059) - Restored GCP credentials for the docs snippets CI job and made the credentials path absolute so it resolves after the snippet runner changes directories. (#12057)
- Corrected the stale patch paths in the pandas and Spark GCS datasource tests and added a
gcs_depsmarker and requirements file so they actually run in CI. (#12058) - GCS test and docs fixtures read the bucket name from a
GX_GCS_TEST_BUCKETenvironment variable and raise clearly when it is unset; the published GCS guides now show amy_bucketplaceholder instead of the real CI bucket. (#12056) - The SingleStore development container image used by CI is pinned to 0.2.82 instead of tracking
:latest. (#12054) - Bumped mermaid from 11.15.0 to 11.16.1 in the documentation site dependencies. (#12047)
- Bumped nanoid from 3.3.16 to 3.3.18 in the documentation site dependencies. (#12052)
- Bumped dompurify from 3.4.12 to 3.4.13 in the documentation site dependencies. (#12048)
Contributors
Thanks to @goanpeca (first contribution), @chavalasantosh (first contribution), @AtomicGlance (first contribution).
1.20.0 (2026-08-07)
Highlights
-
Quantile expectations are correct on SQLite and no longer error on all-null columns —
ExpectColumnQuantileValuesToBeBetweennow selects the right rank on SQLite and ignores null values when computing quantiles, so observed quantiles match the other backends. A column with no non-null values now reports an unmet expectation —success: falsewith null observed values and per-quantile success details — on every backend instead of raising aTypeErroron SQL backends or anIndexErroron Spark. (#12008, #12026)import great_expectations.expectations as gxe
suite.add_expectation(
gxe.ExpectColumnQuantileValuesToBeBetween(
column="passenger_count",
quantile_ranges={"quantiles": [0.25, 0.5], "value_ranges": [[1, 2], [1, 3]]},
)
) -
Faster
expect_column_values_to_be_uniqueon wide SQL tables — The SQLAlchemy implementation ofcolumn_values.uniquenow scans the source table once through a narrow window over only the target column, and only retrieves full rows (via a narrow duplicate-key join) whenSUMMARYorCOMPLETEresult formats are requested. Wide column-store tables — where the previous query was cancelled by Redshift's workload-management timeouts — now validate reliably. (#11863)import great_expectations.expectations as gxe
gxe.ExpectColumnValuesToBeUnique(column="id") -
Validating multiple expectations on the same metric no longer fails on strict SQL backends — When several expectations in a suite depend on the same underlying metric, the generated SQL now gives each metric a unique alias, so backends such as Postgres no longer reject the query with
Duplicated field name in view schema. (#11905) -
File-backed Data Contexts work on read-only, version-controlled projects —
gx.get_context(mode="file")now recognizes a project as already set up based on a committedgreat_expectations.ymlalone, instead of requiring the gitignoreduncommitted/runtime directories. A clean checkout on a read-only filesystem is no longer mistaken for an unscaffolded project and no longer crashes during initialization. (#12000)import great_expectations as gx
context = gx.get_context(mode="file", project_root_dir="/path/to/checkout") -
ExpectColumnValuesToMatchStrftimeFormatis now a supported core Expectation — The Expectation now carries full support metadata and a generated schema, appears in the Expectation Gallery with a properly rendered docstring and examples, and declares a backend matrix of Pandas and Spark (SQL is out of scope). (#12009)import great_expectations.expectations as gxe
gxe.ExpectColumnValuesToMatchStrftimeFormat(
column="event_date",
strftime_format="%Y-%m-%d",
mostly=0.95,
) -
Adding a table asset is much faster on projects with many schemas —
TableAsset.test_connection()now probes the table first and only lists server schemas if that probe fails, purely to refine the error message. On backends where schema listing is a server-wide metadata operation — for example a BigQuery project with thousands of datasets — adding a table asset no longer pays that cost. Table configurations whose schema name did not match the normalized schema listing but were otherwise accessible now succeed. (#12020)asset = datasource.add_table_asset(name="my_asset", table_name="my_table", schema_name="my_schema")
Changes
Features
ExpectColumnValuesToMatchStrftimeFormatis promoted to a supported core Expectation, with a corrected and Gallery-formatted docstring, support metadata, a generated JSON schema, a declared Pandas and Spark backend matrix, and expanded test coverage includingmostlythresholds. (#12009)
Bug fixes
ExpectColumnQuantileValuesToBeBetweenno longer reports a quantile one rank too low on SQLite and no longer raises on columns containing null values; quantile ranks are computed from non-null counts with exact fractional arithmetic, and the MySQL query applies the same null filter. (#12008)ExpectColumnQuantileValuesToBeBetweennow reports an unmet expectation, with null observed values and per-quantile success details, for a column that has no non-null values, instead of raising on SQL backends and Spark; the Spark metric returns one null per requested quantile socolumn.quantile_valueshas the same shape on every backend. (#12026)- Validating multiple expectations that share an underlying metric against a SQL backend no longer fails with a duplicated-field-name view schema error, because each bundled metric is now given a unique SQL alias. (#11905)
expect_column_values_to_be_uniqueon SQLAlchemy backends now runs a single narrow pass over the target column, and only joins back to the source for full-row details underSUMMARY/COMPLETEresult formats, eliminating the Redshift workload-management timeouts seen on very wide tables. (#11863)- A file-backed Data Context can now be created against a fully-scaffolded, version-controlled project on a read-only filesystem: an already-set-up project is recognized from its committed
great_expectations.ymlrather than from gitignoreduncommitted/directories, so a clean checkout is no longer destructively re-scaffolded. (#12000)
Maintenance
- BigQuery tests run in CI again — the temporary unconditional skip for BigQuery-marked tests was removed — and the external-warehouse CI jobs now fail after 30 minutes instead of hanging for hours. (#12016)
- Testing the connection for a table asset now probes the table first and only lists schemas on the failure path to refine the error message, so the operation no longer pays a server-wide metadata scan; error messages are unchanged. (#12020)
- Updated the documentation site's
fast-uridependency from 3.1.4 to 3.1.5, which includes a security fix. (#12019) - Ephemeral schemas created by the SQL integration test suite are now namespaced under a
gx_ci_test_prefix, and the stale-schema cleanup patterns were corrected to match hex suffixes so stale schemas are actually swept. No library behavior changes. (#12015) - Updated the documentation site's
brace-expansiondependency from 1.1.16 to 1.1.18. (#12014) - Updated the documentation site's
postcssdependency from 8.5.12 to 8.5.25. (#12013) - Commenting
/assign-meon an issue that is not yet labeled ready for work now gets a posted explanation of why the claim was declined and where to find issues open for claiming, instead of silently doing nothing. (#11999)
Contributors
Thanks to @SreeramaYeshwanthGowd (first contribution), @TemidayoA (first contribution), @leodrivera, @nanjeshramesh (first contribution).
1.19.1 (2026-07-24)
Highlights
-
Data Docs no longer errors when unexpected indices contain only id/pk columns — Validation results that report unexpected indices made up solely of the configured id/pk columns — including Spark and SQL runs and any run with unexpected values excluded — now render a count and index table in Data Docs instead of failing the result page with "No group keys passed!". (#11935)
-
Contributor License Agreement checks are now run by the project itself — The verification/cla-signed check is posted by the repository's own workflows rather than a third-party hosted app: it is reported on pull request heads and on merge-queue commits, fails closed when contributor status cannot be confirmed, leaves a single guiding comment naming any unsigned or unidentified committer, and keeps the cla-signed / cla-not-signed labels in sync with the check result. CLA signing links now point at the current forms. (#11985, #11983, #11980, #11992, #11982, #11974)
-
Distinct-values set Expectations document their observed_value contract — Documentation and JSON schemas for the distinct values set Expectations now state that observed_value is always None, and their code examples show unexpected_count and partial_unexpected_list (plus the missing-value variants) instead. (#11934)
Changes
Features
- The verification/cla-signed check is now posted by this repository's own workflows instead of a third-party app: it enumerates a pull request's committers, fails closed when it cannot confirm them, supports re-running via an @cla-bot check comment, and posts a single guiding comment naming any unsigned or unidentified committer. (#11985)
Bug fixes
- Data Docs now renders the unexpected count and index table when unexpected-index records contain only the id/pk columns, instead of failing the result page with "No group keys passed!". (#11935)
- CLA labels on a pull request are now updated in the same run that posts the CLA status, so a pull request no longer keeps a stale cla-not-signed label after signing. (#11992)
- Pinned the checkout action to v4.3.1 across workflows, restoring CI runs for contributor pull requests from forks. (#11988)
Docs
- Documented that observed_value is always None for the distinct values set Expectations, refreshed their code examples to use unexpected_count and partial_unexpected_list, and synced the published JSON schemas to match. (#11934)
Maintenance
- SqlAlchemy row-retrieval providers for map metrics (unexpected rows, unexpected index list, and unexpected index query) can now be overridden individually by a subclass without double-registering the metric; registration behavior for all existing map metrics is unchanged. (#11998)
- Updated the documentation site's dompurify dependency from 3.4.11 to 3.4.12. (#11997)
- Updated the documentation site's fast-uri dependency from 3.1.2 to 3.1.4, picking up security fixes. (#11995)
- Updated the documentation site's immutable dependency from 4.3.8 to 4.3.9, picking up security fixes. (#11996)
- Updated the documentation site's svgo dependency from 3.3.3 to 3.3.4, picking up a security fix. (#11994)
- Updated the documentation site's body-parser dependency from 1.20.4 to 1.20.6, picking up a security fix. (#11989)
- Updated the documentation site's brace-expansion dependency from 1.1.13 to 1.1.16, picking up a security fix. (#11991)
- Strengthened the tests that verify datasource lookups read their store just in time, so they now genuinely guard that behavior. (#11949)
- Updated the pre-commit ruff hook from 0.15.12 to 0.15.15. (#11895)
- Updated the documentation site's webpack-dev-server dependency from 5.2.5 to 5.2.6, picking up security fixes. (#11990)
- Updated the documentation site's websocket-driver dependency from 0.7.4 to 0.7.5. (#11977)
- Re-enabled Redshift tests in CI. (#11984)
- The verification/cla-signed status is now reported on merge-queue commits, so the required CLA check can be satisfied in the merge queue instead of hanging pending. (#11983)
- Updated the Contributor License Agreement links in CLA.md and the CLA bot message to the current signing forms. (#11982)
- Pull requests are now blocked until every committer has a valid Contributor License Agreement signature, with cla-signed / cla-not-signed labels kept in sync with the CLA status. (#11980)
- Snowflake connection tests no longer fail on a new pyOpenSSL deprecation warning raised during the TLS handshake. (#11979)
- Corrected the Contributor License Agreement form links in CLA.md. (#11974)
Contributors
Thanks to @anxkhn, @EshwarCVS.
1.19.0 (2026-07-13)
Compatibility: zstandard added (extra spark-connect)
Highlights
-
Spark 4 and ANSI mode support — Great Expectations now works with Spark 4, including ANSI mode, so you can validate Spark DataFrames on the latest Spark release without pinning to Spark 3. The
spark-connectextra now also installszstandard. (#11969)import great_expectations as gx
context = gx.get_context()
data_source = context.data_sources.add_spark(name="my_spark")
asset = data_source.add_dataframe_asset(name="my_df")
batch = asset.add_batch_definition_whole_dataframe("batch").get_batch(
batch_parameters={"dataframe": spark_df}
) -
Date-like strings stay strings in SQL value sets — Distinct-value expectations against SQL data sources no longer turn non-ISO, date-like text such as "10-20" into a date, so text bins in a
value_setcompare correctly against text columns. Only strictYYYY-MM-DDstrings are converted to dates. (#11947)import great_expectations.expectations as gxe
gxe.ExpectColumnDistinctValuesToBeInSet(
column="bin",
value_set=["10-20", "20-30"],
) -
Clearer failure for an empty regex_list —
ExpectColumnValuesToMatchRegexListnow rejects an emptyregex_listat construction time with the message "regex_list must not be empty", instead of failing later during validation with an opaque "No objects to concatenate" error. This matches the behavior ofExpectColumnValuesToNotMatchRegexList. (#11958)import great_expectations.expectations as gxe
gxe.ExpectColumnValuesToMatchRegexList(column="my_col", regex_list=[])
# pydantic.ValidationError: ... regex_list must not be empty
Changes
Features
- Added support for Spark 4, including ANSI mode. (#11969)
Bug fixes
- Fixed the broken contributing-guide link in the welcome message posted when an issue is assigned. (#11961)
ExpectColumnValuesToMatchRegexListnow fails at construction with "regex_list must not be empty" when given an empty list, instead of raising an opaque error at validation time. (#11958)- Non-ISO date-like strings such as "10-20" in a
value_setare no longer parsed into dates for SQL distinct-value expectations; only strictYYYY-MM-DDstrings are converted. (#11947)
Docs
- Expanded the Ephemeral Data Context description on the Create a Data Context page to name CI pipelines and disposable or read-only compute environments as use cases. (#11931)
Maintenance
- Removed the Codecov integration from continuous integration and from the project README; no library behavior changes. (#11971)
- Databricks test runs now authenticate with a service principal using short-lived OAuth machine-to-machine tokens instead of a stored personal access token. (#11970)
- Re-enabled the Databricks test suite and made the target catalog configurable rather than hard-coded. (#11968)
- Removed unreachable expectation helper modules and unused internal types that were not part of the public API. (#11765)
- Updated the documentation site dependency joi from 17.13.3 to 17.13.4. (#11914)
- Made the pyarrow compatibility type-ignore valid whether or not pyarrow is installed, fixing static-analysis failures; no runtime behavior change. (#11966)
- Updated the documentation site dependency dompurify from 3.4.3 to 3.4.11. (#11917)
- Moved dialect-aware column type comparison used by the type and type-list expectations into a dedicated internal module with expanded unit-test coverage; behavior is unchanged. (#11798)
- Removed unused code from the codebase. (#11717)
- Updated the documentation site dependency launch-editor from 2.12.0 to 2.14.1. (#11918)
- Added a comment-driven issue-claiming workflow (
/assign-me,/unassign-me) with automatic release of idle claims, and narrowed issue staleness to issues labeled as needing more information. (#11957) - Rewrote the contributor documentation and added structured issue, bug-report, and request-for-comment templates. (#11950)
- Snowflake connection tests now provision their own schema and table, so they no longer depend on pre-existing warehouse state or grants. (#11945)
- Skipped the broken Google Cloud SDK setup and one credential-dependent docs snippet test so the documentation test job runs again during the continuous-integration transition. (#11959)
- Replaced the broken video embed on the GX Core introduction page with a working YouTube embed of the same demo. (#11932)
- Removed broken and malformed entries from the documentation site's redirect list. (#11936)
Contributors
Thanks to @anxkhn (first contribution), @yuricavalcanti06 (first contribution).
1.18.2 (2026-06-26)
Highlights
-
Spark Connect compatibility for distinct-values expectations — Expectations that rely on a column's distinct values — including expect_column_distinct_values_to_equal_set, expect_column_distinct_values_to_contain_set, and expect_column_distinct_values_to_be_subset_of — now run successfully against a Spark Connect session (for example Databricks serverless via an
sc://URL) instead of failing with a MetricResolutionError. Classic Spark sessions behave exactly as before. (#11922)import great_expectations as gx
batch = ... # a Spark Connect-backed batch
batch.validate(
gx.expectations.ExpectColumnDistinctValuesToEqualSet(
column="color", value_set=["red", "green", "yellow"]
)
)
Changes
Bug fixes
- Distinct-values Spark metrics no longer fail with MetricResolutionError on Spark Connect sessions such as Databricks serverless, so expectations like expect_column_distinct_values_to_equal_set work there again. (#11922)
Docs
- Corrected three typos in the "Run a Validation Definition" guide in the GX Core documentation. (#11920)
Maintenance
- Suppressed a third-party NumPy 'generic' unit deprecation warning so the BigQuery test suite can be collected on Python 3.13. (#11924)
- Updated a parametrized test to pass a list instead of an iterator, fixing test collection failures with newer pytest releases. (#11921)
- Updated the documentation site's @babel/core dependency from 7.28.6 to 7.29.6. (#11925)
- Updated the documentation site's webpack-dev-server dependency from 5.2.3 to 5.2.5. (#11926)
- Updated the documentation site's http-proxy-middleware dependency from 2.0.9 to 2.0.10. (#11927)
Contributors
Thanks to @zozo123 (first contribution).
1.18.1 (2026-06-11)
Highlights
-
Data Docs now renders regex and other parameter values containing
<,>, or&correctly — Expectation parameter values are HTML-escaped before being substituted into Data Docs render templates. Previously, a regex containing angle brackets — for example the negative lookbehind(?<!\s)— was emitted raw into the HTML, where the browser treated<!as the start of a comment and silently truncated the rendered pattern. Such values now display literally in Data Docs. The public API and serialized Expectation format are unchanged; only the HTML rendering layer is affected. (#11909)gx.expectations.ExpectColumnValuesToMatchRegex(
column="my_column",
regex=r"(?<!\s)foo",
)
# The regex now appears in full in the generated Data Docs page.
Changes
Bug fixes
- Expectation parameter values containing
<,>, or&— such as regexes using a negative lookbehind — are now HTML-escaped and render correctly in Data Docs instead of being truncated or hidden. (#11909)
Docs
- Remove the GX Cloud documentation site from the docs. (#11906)
- The documentation site version label and the release version shown in docs content now read 1.18.0, matching the latest release instead of the stale 1.16.1. (#11900)
Maintenance
1.18.0 (2026-06-02)
Highlights
-
GX Cloud paths now fail immediately with a clear explanation — GX Cloud has been shut down. Constructing a
CloudDataContextdirectly, or askingget_context(...)for a cloud context (viamode="cloud",cloud_mode=True, a complete set ofcloud_*arguments, orGX_CLOUD_*environment configuration), now raises aGreatExpectationsErrorright away instead of failing later with an opaque connection error. The message states that GX Cloud has been shut down and that these entry points will be removed in great_expectations 2.0. Non-cloud usage is unchanged, and the cloud classes and parameters remain importable with unchanged signatures through the 1.x line. (#11894)import great_expectations as gx
# Raises GreatExpectationsError:
# "GX Cloud has been shut down, so this no longer functions and will be
# removed in great_expectations 2.0."
context = gx.get_context(mode="cloud")
# Non-cloud contexts still work as before
context = gx.get_context(mode="file")
Deprecations
CloudDataContextand the GX Cloud branch ofget_context(...)(thecloud_*parameters,mode="cloud",cloud_mode=True, andGX_CLOUD_*environment configuration) are deprecated and now raise an error; the cloud-only exception, store, config, and identifier symbols remain importable only as shells. Use a non-cloud context such asgx.get_context(mode="file")orgx.get_context(mode="ephemeral"). Removal in 2.0.0. (#11894)
Changes
Features
- GX Cloud has been shut down: constructing a
CloudDataContextor requesting a cloud context fromget_context(...)now raises aGreatExpectationsErrorexplaining the shutdown instead of failing with an opaque connection error. Cloud classes and parameters stay importable with unchanged signatures until they are removed in great_expectations 2.0, and non-cloud usage is unaffected. (#11894)
Maintenance
- Temporarily skip the cloud object-store documentation examples (S3, GCS, and Azure Blob, plus Athena and AWS Glue) and the BigQuery, Redshift, and Snowflake documentation tests so the documentation-snippet CI job can run while that backend infrastructure is unavailable; Trino documentation tests still run. (#11897)
- Tests marked for the Snowflake, BigQuery, Redshift, Databricks, and Athena backends are now skipped with an explicit reason while that test infrastructure is unavailable. (#11896)
- CI service container images (Spark, Postgres, MySQL, Trino, and others) are now pulled directly from Docker Hub, and the retired ECR pull-through cache and its login steps have been removed from the workflows. (#11898)
- The Microsoft Teams notification integration tests are skipped because the webhook endpoint they posted to has been decommissioned; the mocked unit tests for that action are unchanged. (#11893)
- The Snowflake type-list expectation test now accepts the length-parameterized
BINARY(8388608)observed type that the Snowflake connector reports forVARBINARYcolumns. (#11892) - Removed the unused CodeSee architecture diagram workflow and its documentation entry. (#11886)
1.17.2 (2026-05-14)
Highlights
-
SQLAlchemy 1.4 users can run uniqueness expectations again — Expectations that resolve the
column_values.unique.conditionmetric no longer fail on SQLAlchemy 1.4 withAttributeError: module 'sqlalchemy' has no attribute 'Select', restoring compatibility for dialects still pinned to SQLAlchemy 1.x (such as ClickHouse, Redshift, and Teradata). (#11876) -
Boolean options passed to pandas assets are preserved — Boolean values such as
index_col=Falsehanded toadd_csv_assetare kept as booleans instead of being silently converted to strings, so pandas interprets them as flags rather than column names. This applies to boolean options across the pandas asset types. (#11867)data_source.add_csv_asset(name="my_asset", path="data.csv", index_col=False)
Changes
Bug fixes
- Fixed an
AttributeErroron SQLAlchemy 1.4 when an expectation resolved thecolumn_values.unique.conditionmetric, restoring SQLAlchemy 1.4 compatibility for unique-value expectations. (#11876) - Boolean arguments passed to
add_csv_assetand other pandas assets, such asindex_col=False, are no longer coerced to strings and are now applied as the boolean flags pandas expects. (#11867)
Maintenance
- Updated the documentation site's mermaid dependency from 11.12.2 to 11.15.0. (#11874)
- Updated the documentation site's @babel/plugin-transform-modules-systemjs dependency from 7.28.5 to 7.29.4. (#11873)
- Updated the documentation site's fast-uri dependency from 3.1.0 to 3.1.2, picking up upstream security fixes. (#11872)
- Updated pre-commit hooks, moving ruff from v0.15.9 to v0.15.12. (#11864)
Contributors
Thanks to @ranophoenix (first contribution), @EshwarCVS (first contribution).
1.17.1 (2026-05-05)
Compatibility: pytest-split added (extra test)
Highlights
-
Data Docs now load a patched jQuery — Data Docs pages generated by Great Expectations now reference jQuery 3.7.1 instead of the vulnerable 3.4.1 (CVE-2020-11022, CVE-2020-11023). The Data Docs UI is unchanged and security scanners no longer flag GX-generated pages for this issue. (#11856)
-
Spark column names containing dots now work — Spark-backed data assets whose column names contain dots (for example
Data.Entrega) can now be used in expectations without the spurious "The column X in BatchData does not exist" error. (#11851)batch.validate(gxe.ExpectColumnValuesToNotBeNull(column="Data.Entrega")) -
Nested Spark struct paths supported in unexpected_index_column_names — Referencing a nested Spark struct path such as
Data.evt.idinunexpected_index_column_namesno longer raisesInvalidMetricAccessorDomainKwargsKeyError; unexpected rows are surfaced keyed by the full dotted path. (#11835)batch.validate(
gxe.ExpectColumnValuesToBeInSet(column="value", value_set=[1, 2]),
result_format={
"result_format": "COMPLETE",
"unexpected_index_column_names": ["Data.evt.id"],
},
) -
Compound uniqueness expectations work on Spark timestamps with Pandas 2.x —
expect_compound_columns_to_be_uniqueandexpect_select_column_values_to_be_unique_within_recordno longer fail withValueError: Passing in 'datetime64' dtype with no precision is not allowed.on Spark DataFrames that contain timestamp columns. Entries inpartial_unexpected_listare now native Python values (for exampledatetime.datetimeandNone) rather than pandas/numpy equivalents. (#11861) -
Expectation subclasses can use aliased Pydantic fields — Subclassing a built-in Expectation and declaring a field with
Field(alias=...)no longer causesValidationError: extra fields not permittedwhen validating a batch. (#11854)class MyExpectation(gxe.ExpectColumnValuesToStartWith):
regex: str = pydantic.Field(alias="pattern")
batch.validate(MyExpectation(column="name", pattern="^a"))
Changes
Bug fixes
- Data Docs pages now load jQuery 3.7.1 instead of the vulnerable jQuery 3.4.1, addressing CVE-2020-11022 and CVE-2020-11023, with no visible change to the Data Docs UI. (#11856)
- Test datasource names are now generated from UUIDs, removing a source of intermittent name-collision failures in the test suite; no library behavior changes. (#11862)
- Compound and within-record uniqueness expectations no longer fail on Spark DataFrames containing timestamp columns under Pandas 2.x, and unexpected-value lists now contain native Python values. (#11861)
- Expectation subclasses that declare a field with a Pydantic alias can now be validated without a spurious "extra fields not permitted" error. (#11854)
- Restored the documentation-snippet integration tests that broke with sqlalchemy-redshift 1.0.0: the Redshift deployment snippet no longer references removed S3 store backends, and Snowflake key-pair authentication is used where configured. (#11857)
- Expectations targeting Spark columns whose names contain dots now resolve correctly instead of reporting that the column does not exist in the batch. (#11851)
- Nested Spark struct column paths such as
Data.evt.idcan now be used for expectation columns and unexpected index columns without raising an invalid-domain-kwargs error, and results are keyed by the full dotted path. (#11835)
Docs
- The published changelog now includes the 1.17.0 release section alongside surrounding versions. (#11865)
- Integration setup pages now link to the corresponding usage pages, making it easier to move from configuring an integration to using it. (#11848)
Maintenance
- Updated the documentation site's postcss dependency from 8.5.6 to 8.5.12. (#11859)
- Continuous integration now shards and parallelizes the slowest database marker test jobs, cutting overall CI wall-clock time;
pytest-splitis now part of the development test requirements. (#11850) - Added a temporary continuous-integration trigger for pushes to a maintenance branch so workflow changes could be exercised before merge; no user-facing effect. (#11858)
- Removed the long-deprecated
Expectation._atomic_prescriptive_templatemethod and itsadd_values_with_json_schema_from_list_in_paramshelper, both deprecated in v0.15.43; use_prescriptive_templateinstead. (#11847)
1.17.0 (2026-04-22)
Compatibility: new extra singlestore
Highlights
-
SingleStore support — Great Expectations now works against SingleStore databases: SingleStoreDB is recognized as its own SQL dialect, regex and uniqueness expectations produce correct results, quoted identifiers are handled, and setup is covered in the documentation. Install with the new
singlestoreextra. (#11828, #11839, #11837, #11842)pip install 'great_expectations[singlestore]'
import great_expectations as gx
context = gx.get_context()
data_source = context.data_sources.add_sql(
name="my_singlestore",
connection_string="singlestoredb://user:password@host:3306/my_db",
) -
strict_min and strict_max now respected in expect_column_value_lengths_to_be_between on Spark and SQL — Passing
strict_min=Trueorstrict_max=Truetoexpect_column_value_lengths_to_be_betweenpreviously produced inclusive-bound results on the Spark and SQL backends. Both backends now apply strictly exclusive bounds, matching the documented semantics and the Pandas backend. Non-strict usage is unchanged. (#11834, #11836)import great_expectations.expectations as gxe
suite.add_expectation(
gxe.ExpectColumnValueLengthsToBeBetween(
column="name", min_value=2, max_value=4, strict_min=True, strict_max=True
)
) -
Timezone-aware strftime formats accepted —
ExpectColumnValuesToMatchStrftimeFormatno longer raises a validation error when the format contains%z, and the Spark implementation of the underlying metric now validates timezone-aware formats correctly. (#11812, #11817)import great_expectations.expectations as gxe
gxe.ExpectColumnValuesToMatchStrftimeFormat(
column="ts", strftime_format="%Y-%m-%d %H:%M:%S%z"
) -
Forecast store bounds used for windowed expectations — Windowed expectations now send each expectation's batch definition to the expectation-parameters endpoint, so users on the asynchronous forecast store path receive stored forecast bounds instead of falling back to inline training. Checkpoints spanning several batch definitions fetch and merge parameters for each one. (#11831)
Changes
Features
- Windowed expectations now pass their batch definition when fetching expectation parameters, so forecast store bounds are used instead of inline forecast training; checkpoints with multiple batch definitions fetch and merge parameters per definition. (#11831)
Bug fixes
expect_column_value_lengths_to_be_betweenon Spark now honorsstrict_minandstrict_max, excluding boundary lengths as documented. (#11834)expect_column_value_lengths_to_be_betweenon SQL data sources now honorsstrict_minandstrict_max, applying strictly exclusive bounds as documented. (#11836)- Fixed the Spark implementation of the strftime-format metric so timezone directives such as
%zvalidate correctly. (#11817) - Fixed regex and uniqueness expectations against SingleStoreDB by recognizing it as its own SQL dialect, and enabled SingleStore tests in continuous integration. (#11828)
- Fixed the release pipeline step that recorded contract releases, which failed because the pact command was unavailable; PyPI releases are unblocked with no end-user behavior change. (#11819)
ExpectColumnValuesToMatchStrftimeFormatno longer raises a validation error when the format string includes the%ztimezone directive. (#11812)
Docs
- Updated the Trino and BigQuery documentation, including coverage of query assets. (#11747)
- Documented that
expect_column_proportion_of_non_null_values_to_be_betweensupports a forecasted range. (#11821)
Maintenance
- Extended the retry window on the continuous-integration contract deployment check to 20 minutes so it can outwait slow provider verification. (#11846)
- SingleStore test database is now initialized as a container service rather than through a test fixture. (#11842)
- Added support for quoted identifiers when working with SingleStore data sources. (#11839)
- Removed the long-deprecated
data_context,datasource_name,batch_parameters, andbatch_kwargsarguments (and their read-only properties) from the internalBatchclass. (#11843) - Added test coverage for custom SQL expectations. (#11844)
- Added documentation for connecting to SingleStore. (#11837)
- Removed the
ColumnMetricProvideralias and its deprecation-warning metaclass, which were deprecated in favor ofColumnAggregateMetricProvider. (#11832) - Restored clean static type checking after the pyarrow 24.0.0 release began shipping type information; no runtime behavior changed. (#11838)
- Removed support for passing a plain string as
run_idtoValidator.validate(); a run identifier or dict is required. (#11826) - Contract verification now runs as its own independently retryable continuous-integration job that waits for provider verification to complete. (#11822)
- The contract deployment check no longer fails its continuous-integration job, keeping the signal visible without blocking unrelated work. (#11829)
- Resolved two denial-of-service advisories in documentation build dependencies by pinning path-to-regexp to 0.1.13 and picking up picomatch 2.3.2. (#11824)
- Resolved documentation tooling advisories by upgrading minimatch to 3.1.5 and lodash-es to 4.18.1. (#11827)
- Bumped jest-environment-jsdom to 30.3.0 in the documentation site to pick up a fixed picomatch dependency. (#11823)
- Added a contract-compatibility deployment check to the cloud test job in continuous integration and removed a dead log-collection step. (#11801)
- Bumped dompurify from 3.3.2 to 3.4.0 in the documentation site. (#11820)
1.16.1 (2026-04-15)
Changes
Features
- Added 13 consumer-driven contract tests covering datasource API gaps, including data asset deletes, Postgres table/query assets with yearly and daily column partitioners, Snowflake DSN, connection-details and key-pair connection variants, and CSV assets with a daily file-name partitioner. (#11813)
Docs
- The compatibility reference now states explicitly that Python 3.14 and later are not currently supported, alongside the supported 3.10–3.13 range. (#11784)
Maintenance
- Bumped the docs site's follow-redirects dependency from 1.15.11 to 1.16.0. (#11815)
- The PyPI publish workflow now records each released version to PactFlow's production environment so compatibility checks gate against real releases. (#11816)
- Removed the end-to-end docker-compose cloud tests, now superseded by contract tests, and dropped the associated Mercury startup steps from CI. (#11811)
- Updated pre-commit hooks, moving ruff from v0.15.4 to v0.15.9. (#11779)
- Added contract tests covering metric-run creation and the accounts/me lookup used when discovering workspaces during context initialization. (#11804)
- Added contract tests for updating a validation definition and for fetching checkpoint expectation parameters. (#11802)
- Added contract tests covering reading and saving data context variables. (#11803)
- Contract publishing from merge-queue CI runs now uses the target branch name instead of the throwaway merge-queue ref. (#11810)
- Contract tests now use fixed, isolated organization and workspace identifiers rather than environment variables, so provider verification no longer fails with authorization errors. (#11808)
- Updated contract test fixtures to match the current cloud API, including the renamed analytics and validation-results-store configuration fields, 201 responses for datasource creation, recorded request bodies, and an isolated organization and workspace. (#11797)
Contributors
Thanks to @Adeyinka1 (first contribution).
1.16.0 (2026-04-09)
Compatibility: pact-python added (extra cloud); invoke minimum 2.0.0 removed (extra test); pact-python minimum 2.0.1 → 3.1.0 (extra test)
Highlights
-
column.unique_proportionavailable in metric list runs — Metric list runs can now computecolumn.unique_proportionalongside the existing column metrics, so you can retrieve the proportion of unique values per column without a separate run. (#11786)from great_expectations.experimental.metric_repository.metrics import MetricTypes
metrics = [MetricTypes.COLUMN_UNIQUE_PROPORTION] -
Suites added to an ephemeral context now pass freshness checks —
context.suites.add(suite)now returns a suite that matches what was stored, so passing that suite straight intocontext.validation_definitions.add()in an ephemeral context no longer raises a freshness error. (#11758)suite = context.suites.add(suite)
context.validation_definitions.add(
gx.ValidationDefinition(name="vd", data=batch_definition, suite=suite)
) -
Correct
exact_matchdefault inExpectTableColumnsToMatchSetoutput — Rendered descriptions forExpectTableColumnsToMatchSetnow reflect the expectation's real default forexact_match, so the rendered text no longer contradicts how the expectation actually validates. (#11785) -
Microsoft Teams and Jira integration documentation — The documentation now covers setting up the Microsoft Teams and Jira integrations for GX notifications and issue tracking. (#11761, #11741)
-
No more unclosed-SQLite resource warnings on Python 3.13 — SQLAlchemy execution engines now dispose their connection pool when they are garbage collected, eliminating
ResourceWarning: unclosed databasenoise and the spurious failures it caused on Python 3.13. (#11766)
Deprecations
PandasDBFSDatasourceandSparkDBFSDatasourceis deprecated; use datasources backed by Unity Catalog volumes, external locations, or workspace files. Removal in 2.0.0. (#11759)
Changes
Features
- Metric list runs now support the
column.unique_proportionmetric, computed alongside other column-level metrics. (#11786) - Added an end-to-end contract test covering the full GX Cloud resource creation flow: datasource, expectation suite, validation definition, and checkpoint. (#11783)
- Added client-driven contract tests covering datasource create, read, update, and delete through the Python client. (#11754)
- Added client-driven contract tests covering expectation suite add, get, add-or-update, and delete through the Python client. (#11756)
- Added client-driven contract tests covering validation definition and checkpoint add, get, and delete through the Python client. (#11757)
- Contract testing now runs on pact-python v3, with matchers and interactions updated to the new API and the supported version range moved to 3.x. (#11769)
- Removed the legacy hand-crafted HTTP contract tests and their supporting fixtures, which are superseded by the new client-driven contract tests. (#11768)
PandasDBFSDatasourceandSparkDBFSDatasourceare now marked as deprecated, following Databricks' deprecation of DBFS; the classes still work and will be removed in a future major release. (#11759)
Bug fixes
ExpectTableColumnsToMatchSetrenderers now use the correct default value forexact_matchin their rendered output. (#11785)- Pinned the development
invokedependency to 3.0.0 to avoid a breaking change introduced in 3.0.2. (#11781) - SQLAlchemy execution engines now dispose their engine and connection pool when garbage collected, preventing unclosed-SQLite resource warnings on Python 3.13. (#11766)
- Adding a suite in an ephemeral context now returns a suite that passes later freshness checks, so using it in a validation definition no longer raises a resource freshness error. (#11758)
Docs
- Documentation code blocks now keep lines marked as hidden out of view even when line numbers are shown. (#11731)
- Added documentation for the Microsoft Teams integration. (#11761)
- Added documentation for the Jira integration. (#11741)
Maintenance
- Release-tag CI runs no longer attempt to re-publish pact contracts, unblocking tagged releases. (#11796)
- Contract tests match the
Gx-Versionrequest header with a pattern instead of a literal value, so generated contracts are stable across commits. (#11791) - Increased the SQL test connection pool size to reduce connection contention in Databricks and Snowflake test runs. (#11793)
- CI skips code and test jobs for pull requests that only change documentation, and adds a single aggregate status check for branch protection. (#11792)
- Bumped
brace-expansionfrom 1.1.12 to 1.1.13 in the documentation site dependencies. (#11777) - CI publishes pact contracts against the pull request's head commit instead of the base branch commit, so provider verification runs against the actual changes. (#11790)
- Fixed the CI pact-broker publish step so contract publishing actually succeeds and fails loudly when it cannot. (#11787)
- CI now publishes generated pact contract files to PactFlow after cloud tests pass, skipping gracefully when no contracts exist. (#11775)
- Bumped
lodashfrom 4.17.23 to 4.18.1 in the documentation site dependencies, picking up prototype-pollution and template code-injection fixes. (#11776) - Removed the unreachable
great_expectations.profilemodule and its tests as dead code. (#11763)
1.15.2 (2026-04-01)
Highlights
-
BigQuery datasource methods now surface in IDE autocomplete and type checking — The typed stub for
context.data_sourcesnow declaresadd_bigquery,update_bigquery,add_or_update_bigquery, anddelete_bigquery, so BigQuery-specific datasource methods are discoverable in editor autocomplete and recognized by type checkers instead of pushing you toward the genericadd_sqlmethod. (#11736)datasource = context.data_sources.add_bigquery(
name="my_bigquery_ds",
connection_string="bigquery://my-project/my_dataset",
) -
New how-to guide: retrieve all unexpected rows — The documentation now includes a "Retrieve all unexpected rows" guide under Run Validations, with a runnable example showing how to get the full set of unexpected rows from a validation definition, plus cross-references from the custom SQL Expectation guide and the result format reference table. (#11712)
unexpected_rows = validation_definition.get_unexpected_rows(batch_parameters={})
Deprecations
- The
run_rest_api_pact_testREST contract test helper is deprecated; use the client-driven Pact test approach built on thepact_cloud_contextfixture. Removal in 2.0.0. (#11753)
Changes
Features
- REST contract testing can now be driven from the client side: a
pact_cloud_contextfixture builds aCloudDataContextagainst the Pact mock server without real cloud credentials, a shared data-context configuration response and interaction helper are available for reuse, and the olderrun_rest_api_pact_testhelper is marked deprecated. (#11753) - BigQuery datasource methods (
add_bigquery,update_bigquery,add_or_update_bigquery,delete_bigquery) and theBigQueryDatasourcetype are now declared in the datasources type stub, so they appear in IDE autocomplete and type checking instead of requiring the genericadd_sqlmethod. (#11736)
Docs
- Added a "Retrieve all unexpected rows" how-to guide with a runnable example script, a sidebar and landing-page entry, and cross-references from the custom SQL Expectation guide and the result format reference table. (#11712)
- Applied a small documentation wording change based on engineering feedback. (#11715)
Maintenance
- Added a script that inspects the last 28 days of scheduled CI runs and generates a markdown CI health report. (#11751)
- Bumped the docs site
yamldependency from 1.10.2 to 1.10.3. (#11746) - Updated pre-commit hooks, moving ruff-pre-commit from v0.14.9 to v0.15.4. (#11582)
- Fixed three CI configuration problems: a too-short timeout for cloud services, a mismatched docs matrix key, and a malformed Spark command. (#11743)
- Bumped the docs site
flatteddependency from 3.3.3 to 3.4.2. (#11737) - Pinned localstack to 4.14.0 to restore broken CI runs. (#11740)
- Made test schema names unique so concurrent Databricks CI runs no longer clean up each other's test setup and fail with table-not-found errors. (#11733)
- Added a generic SQL datasource test harness (
GenericSQLDatasourceTestConfig) to make it easier to try out new SQL datasources. (#11718)
Contributors
Thanks to @Julian901 (first contribution).
1.15.1 (2026-03-13)
Highlights
- Documentation for Expectation history — The documentation now covers Expectation history, explaining how changes to an Expectation are tracked over time. (#11704)
Changes
Docs
- Added documentation covering Expectation history. (#11704)
Maintenance
1.15.0 (2026-03-11)
Highlights
-
Fetch all unexpected rows from an UnexpectedRowsExpectation —
ValidationDefinition.get_unexpected_rows()returns every failing row for anUnexpectedRowsExpectation, without the 200-row cap applied to validation results. Validation results also gained anExpectationValidationResult.expectationproperty and anExpectationSuiteValidationResult.batch_parametersproperty, so you can feed a failed result straight back in to retrieve its rows. (#11711)result = validation_definition.run(batch_parameters={"year": 2026, "month": 3})
for evr in result.results:
if not evr.success:
rows = validation_definition.get_unexpected_rows(
evr.expectation,
batch_parameters=result.batch_parameters,
)
if rows:
write_to_quarantine(rows) -
Documentation for SQL Server and Fabric data sources — The docs now cover creating and using SQL Server and Microsoft Fabric data sources. (#11686)
-
A single failing metric no longer fails the whole batch of metrics — When bulk metric resolution hits an error, metrics are now retried individually, so one problematic metric no longer causes every metric in the run to error. (#11708)
Changes
Features
- Added
ValidationDefinition.get_unexpected_rows()to fetch all failing rows for anUnexpectedRowsExpectationwithout the 200-row cap, plus anExpectationValidationResult.expectationproperty and anExpectationSuiteValidationResult.batch_parametersproperty for post-run workflows. (#11711)
Bug fixes
- Fixed a regression where an error in a single metric caused every metric to fail; metrics are now retried individually when bulk resolution fails. (#11708)
Docs
- Added documentation for setting up Slack alerts. (#11681)
- Added a section to the Manage Expectations documentation covering how to edit expectations using the API. (#11697)
- Updated the agent deployment documentation to explain how to set a default workspace ID. (#11709)
- Documented the new result format option in the Core docs as well as Cloud, including how
partial_unexpected_countcontrols the number of values shown inpartial_missing_list. (#11705) - Updated documentation to reflect the current Validate button behavior and removed references to the share button, which no longer exists. (#11691)
- Documented support for SQL Server and Fabric data sources. (#11686)
Maintenance
- Silenced new mypy assignment errors in the Trino compatibility module that appeared after the
trinopackage began shipping type information. (#11707) - Bumped dompurify from 3.3.1 to 3.3.2 in the documentation site dependencies. (#11706)
- Bumped svgo from 3.3.2 to 3.3.3 in the documentation site dependencies. (#11701)
- Bumped immutable from 4.3.7 to 4.3.8 in the documentation site dependencies. (#11703)
1.14.0 (2026-03-04)
Identical to 1.13.1, re-published the same day as a minor version: the release above carried a deprecation, which the minor number signals. No changes beyond 1.13.1.
1.13.1 (2026-03-04)
Highlights
-
Trust a SQL Server certificate without turning off encryption — SQL Server and Fabric data sources accept a new
trust_server_certificateoption, so you can connect to a server presenting a self-signed or otherwise untrusted certificate while keeping encryption enabled instead of weakeningencryptto "Optional". The option works with both SQL Server authentication and Entra ID. (#11694)import great_expectations as gx
context = gx.get_context()
datasource = context.data_sources.add_sql_server(
name="my_sql_server",
host="my-host",
database="my_database",
username="my_user",
password="my_password",
trust_server_certificate=True,
) -
Config variable substitution errors no longer echo secret text — When a password or secret contains a literal
$, Great Expectations no longer includes the text following the$in the resulting missing-config-variable error message, so part of the secret is not leaked in logs. The error guidance also no longer points at the retired$MY_CONFIG_VARsubstitution syntax. (#11693)
Deprecations
- The
schema_nameparameter onTableAssetandadd_table_assetis deprecated; use the schema configured on the SQL data source's connection string. Removal in 2.0.0. (#11689)
Changes
Features
- SQL Server and Fabric data sources accept a new
trust_server_certificateoption, letting you trust a self-signed or untrusted server certificate while keeping the connection encrypted, with both SQL Server authentication and Entra ID. (#11694)
Docs
- The Cloud email alert documentation now lists ServiceNow as a supported third-party service and includes
*.service-now.comin the default allowed email domains. (#11669)
Maintenance
- The
schema_nameparameter onTableAssetandadd_table_assetis deprecated; table assets now resolve their schema from the SQL data source they belong to, so specify the schema in the data source's connection configuration instead. (#11689) - Installed the SQL Server ODBC driver in the credentials-backed documentation test step so SQL Server examples in the docs are exercised in CI. (#11698)
- Added Sentry error tracking to the documentation site, initialized early enough to capture errors that occur before the page finishes loading; the DSN comes from a
SENTRY_DSNenvironment variable and no performance data is collected. (#11695) - Config variable substitution errors no longer include text that follows a literal
$in a password or secret, avoiding partial secret leakage, and their guidance no longer references the removed$MY_CONFIG_VARsyntax. (#11693) - Updated the documentation site's
qsdependency from 6.14.1 to 6.14.2. (#11660)
1.13.0 (2026-02-26)
Compatibility: altair minimum 4.2.1 → 5.0.0; new extra fabric; removed extra mssql; new extra sql-server
Highlights
-
Microsoft Fabric datasource — You can now connect to Microsoft Fabric with the new Fabric datasource, which authenticates with an Entra ID service principal. Install it with the new
fabricextra. (#11685, #11662)import great_expectations as gx
context = gx.get_context()
datasource = context.data_sources.add_fabric(
name="my_fabric",
host="my-workspace.datawarehouse.fabric.microsoft.com",
database="my_warehouse",
client_id="<client-id>",
client_secret="<client-secret>",
) -
Distinct-value set expectations now compare in the database —
ExpectColumnDistinctValuesToBeInSet,ExpectColumnDistinctValuesToContainSet, andExpectColumnDistinctValuesToEqualSetnow push set comparison into the database instead of pulling every distinct value into memory, so they stay fast and produce small results on high-cardinality columns. Results no longer include the full list of distinct values asobserved_value; instead they reportunexpected_count/partial_unexpected_listand/ormissing_count/partial_missing_list, each capped at 20 values. (#11614, #11615, #11616)import great_expectations.expectations as gxe
suite.add_expectation(
gxe.ExpectColumnDistinctValuesToBeInSet(
column="my_col",
value_set=["a", "b", "c"],
)
) -
"SQL Server" naming throughout, including the pip extra — User-facing references to MSSQL are now written as SQL Server. Install SQL Server support with the renamed extra. (#11674)
pip install 'great_expectations[sql-server]' -
pandas 3 support — The upper pin on pandas has been removed, so Great Expectations can be installed alongside pandas 3. BigQuery reads fall back to
pandas_gbq.read_gbq, and chart rendering works with pandas 3's new string dtype default (requires altair 5). (#11677) -
ExpectAI documentation for the agent — The documentation now covers ExpectAI for the agent, including its prerequisites. (#11644, #11678)
Changes
Features
ExpectColumnDistinctValuesToEqualSetnow compares the value set inside the database rather than loading all distinct values into memory. Results returnobserved_value: Nonealong withunexpected_count,partial_unexpected_list,missing_count, andpartial_missing_list(each capped at 20 values), and the rendered output marks unexpected and missing values accordingly. (#11616)ExpectColumnDistinctValuesToBeInSetnow compares the value set inside the database rather than loading all distinct values into memory. Results returnobserved_value: Nonealong withunexpected_countandpartial_unexpected_list(capped at 20 values), and the descriptive value-counts bar chart is no longer produced. (#11614)ExpectColumnDistinctValuesToContainSetnow compares the value set inside the database rather than loading all distinct values into memory. Results returnobserved_value: Nonealong withmissing_countandpartial_missing_list(capped at 20 values), and the rendered output marks missing values. (#11615)- Added a Microsoft Fabric datasource with
add_fabric(),update_fabric(), anddelete_fabric()APIs, authenticated with an Entra ID service principal. (#11685) - A top-level ORDER BY in a user-supplied query is now stripped automatically when that query is wrapped in a row count, so SQL Server no longer rejects it. ORDER BY inside window functions or nested subqueries, and queries using OFFSET, are left untouched. (#11670)
Bug fixes
- When a metric computation fails twice on a SQL Server connection, the connection is now explicitly rolled back before the error is raised, so closing the connection no longer hangs. (#11680)
- SQL expectations using the
{batch}placeholder on Databricks no longer fail with a cast error, because batch queries are now compiled with the datasource's own dialect so identifiers are quoted correctly. (#11671)
Docs
- Refined the prerequisites documentation for using ExpectAI with the agent. (#11678)
- Added documentation for using ExpectAI with the agent. (#11644)
Maintenance
- Store backend implementations that were deprecated in the v1 release, along with the documentation examples that referenced them, have been removed. (#11675)
- SQL Server column types are now reported consistently between the metric repository and
ExpectColumnValuesToBeOfType/ExpectColumnValuesToBeInTypeList, compared case-insensitively and withoutCOLLATEclauses in the type string. (#11684) - The upper pin on pandas has been removed so Great Expectations works with pandas 3, with BigQuery reads falling back to
pandas_gbq.read_gbqand chart rendering updated for the new string dtype default. (#11677) - Test helpers now build an ephemeral context via
gx.get_context(mode="ephemeral")instead of the removedbuild_in_memory_runtime_contexthelper, eliminating a source of flaky tests. (#11683) - Removed the repeated noisy
_get_default_value called with key ... but it is not a known fieldINFO log messages emitted during checkpoint validation. (#11626) - MSSQL references are now named SQL Server throughout: the pip extra is
sql-serverinstead ofmssql, and related enum members, helper names, pytest markers, and the test CLI flag were renamed to match. The SQLAlchemy dialect valuemssqlis unchanged. (#11674) - Datasource marker tests now run against a single Python version on pull requests, with the full version matrix reserved for releases. (#11666)
- Failed SQL Server connection tests now report human-readable error messages. (#11661)
- Removed Entra ID Password authentication, which Microsoft's mandatory MFA enforcement makes unusable. (#11665)
- Added a published JSON schema for the SQL Server datasource, documenting its connection-detail options. (#11662)
- Added Azure AD service principal authentication details for SQL Server connections and corrected the casing of the authentication query parameter used for Azure AD password authentication. (#11653)
1.12.3 (2026-02-13)
Highlights
-
SQL Server datasources with Azure AD password authentication — You can now connect to SQL Server with a flat set of connection keyword arguments, including Azure Active Directory password authentication, without hand-building a connection string. (#11645, #11640, #11643)
context.data_sources.add_sql_server(
name="my_sql_server",
host="my-server.database.windows.net",
database="my_db",
username="user@example.com",
password="${MY_PASSWORD}",
) -
Broader Microsoft SQL Server support — SQL Server now works with schemas, with bracket-quoted identifiers such as [my column], and with UnexpectedRowsExpectation queries. (#11649, #11652, #11646)
-
unexpected_index_query is returned for ExpectCompoundColumnsToBeUnique on SQL — ExpectCompoundColumnsToBeUnique run against SQL data sources now returns unexpected_index_query when you request it with return_unexpected_index_query=True or use the COMPLETE result format, so you can retrieve every failing row beyond the 200-row unexpected_list limit. COMPLETE also now honors return_unexpected_index_query=False when you set it explicitly. (#11639)
result = batch.validate(
ExpectCompoundColumnsToBeUnique(column_list=["a", "b"]),
result_format={"result_format": "COMPLETE"},
)
print(result.result["unexpected_index_query"]) -
pandas Timestamp values accepted in datetime comparisons — Datetime comparison expectations now handle pandas.Timestamp values correctly, checking the most specific type first so Timestamps are no longer mis-handled as plain dates. (#11637)
Changes
Features
- Dialect quoting now supports asymmetric identifier quote characters, so SQL Server bracket-quoted identifiers such as [my column] are handled correctly (double-quoted identifiers are also accepted for SQL Server). (#11652)
- SQL Server data sources now support schemas, including schema names that contain upper-case characters. (#11649)
- Added SQL Server Azure AD password authentication and a flat keyword-argument style for add_sql_server, update_sql_server, and add_or_update_sql_server, with type stubs for both calling styles. (#11645)
- UnexpectedRowsExpectation now works against SQL Server, including queries that previously relied on unsupported SQL constructs. (#11646)
- Added SQL Server type stubs and switched the integration tests to the public SQL Server datasource API. (#11643)
Bug fixes
- Datetime comparison operations now accept pandas.Timestamp values, checking Timestamp before datetime and date so timestamps are compared correctly. (#11637)
- ExpectCompoundColumnsToBeUnique on SQL data sources now returns unexpected_index_query when requested or when using the COMPLETE result format, and COMPLETE respects return_unexpected_index_query=False when explicitly set. (#11639)
- Removed the vestigial, unsupported table domain key from ExpectColumnToExist. (#11630)
Docs
- Removed documentation about the deprecated DBFS support. (#11648)
- Added documentation for adding an Expectation using the GX Cloud API. (#11567)
- Revised the contribution guidelines to encourage pull requests for new features and to clarify the acceptance criteria for contributions. (#11638)
- Added documentation for email alerts. (#11628)
- Fixed a broken documentation link to expect_table_row_count_to_equal_other_table. (#11634)
- The core result format documentation now defines the meaning of the asterisks used in its tables. (#11631)
- Added documentation describing the next steps after an agent request. (#11619)
Maintenance
- Integration tests now dispose of SQL Server connections when they finish. (#11663)
- Raised the container startup timeout used by the test suites to three minutes to reduce flaky CI failures. (#11659)
- Added a healthcheck start period and RabbitMQ readiness check to the local Mercury docker-compose stack to prevent flaky CI failures. (#11655)
- Introduced a SQLServerDatasource with structured SQL Server authentication connection details, validating that connection URLs use the mssql+pyodbc scheme and supporting config-substituted passwords. (#11640)
- Bumped webpack from 5.94.0 to 5.104.1 in the documentation site. (#11636)
- Added database-pushdown metrics for distinct-value set comparisons (column.distinct_values.not_in_set, column.distinct_values.not_in_set.count, column.distinct_values.missing_from_column, and column.distinct_values.missing_from_column.count) that evaluate set comparisons in the database instead of fetching all distinct values into memory, with type coercion for date strings. (#11629)
- Bumped diff from 3.5.0 to 3.5.1 in the documentation site. (#11627)
- Removed a duplicated flaky pandas result-format test from the test suite. (#11623)
Contributors
Thanks to @subediparas5, @teixeirazeus (first contribution).
1.11.3 (2026-01-29)
Highlights
-
Row conditions work again on SQLAlchemy 1.x data sources — Validating an expectation with a
row_conditionagainst a SQLAlchemy 1.x data source no longer fails withAttributeError: module 'sqlalchemy' has no attribute 'ColumnElement'. Row conditions now work on both SQLAlchemy 1.x and 2.x. (#11612) -
Redshift column detection works for tables in non-default schemas — Redshift assets backed by a table in a non-default schema (for example
bi_db.my_table) no longer fail column detection withrelation "my_table" does not exist; the fallback lookup is now schema-qualified. (#11606)
Changes
Bug fixes
- Using a
row_conditionwith a SQLAlchemy 1.x data source no longer raisesAttributeError: module 'sqlalchemy' has no attribute 'ColumnElement'. (#11612) - Redshift fallback column detection now schema-qualifies its query, so tables in a non-default schema no longer fail with a "relation does not exist" error. (#11606)
Docs
- Added documentation for the Atlan integration. (#11580)
- Updated links to the
airflow-provider-great-expectationsdocumentation and removed an unused CI script. (#11621)
Maintenance
Contributors
Thanks to @subediparas5 (first contribution).
1.11.2 (2026-01-22)
Compatibility: pandas minimum set to 1.3.0 (python_version >= "3.12")
Highlights
-
pandas 3.0 is excluded from supported versions — Installations now resolve a
pandasversion below 3.0.0, so environments no longer pick up an incompatible pandas 3.x release. On Python 3.12 and newer, the minimum supportedpandasversion is 1.3.0. (#11607) -
Refreshed Result format documentation — The documentation covering result format has been reworked so it is easier to find the right result format setting and understand what each one returns. (#11596)
Changes
Docs
- Reworked the result format documentation. (#11596)
Maintenance
- Constrained the supported
pandasversion to below 3.0.0. (#11607)
1.11.1 (2026-01-20)
Highlights
-
Result-format levels are now respected for Custom SQL and Multi-Source Expectations — Validation results for Custom SQL and Multi-Source Expectations no longer include row-level data at result-format levels below COMPLETE. BOOLEAN_ONLY returns only success; BASIC and SUMMARY add the observed value (Custom SQL) or unexpected count and percent (Multi-Source); unexpected and missing rows appear only with COMPLETE. Multi-Source Expectations also render correctly when the result is empty. (#11601)
-
get_context is recognized as a public export by type checkers — The top-level great_expectations module now declares its public symbols explicitly, so static type checkers such as Pyright no longer report get_context and other promoted symbols as not exported. (#11578)
import great_expectations as gx
context = gx.get_context()
Changes
Bug fixes
- Custom SQL and Multi-Source Expectation validation results now include row-level data only at the COMPLETE result format, matching the BOOLEAN_ONLY, BASIC, SUMMARY, and COMPLETE hierarchy, and Multi-Source Expectations no longer fail to render when the result is empty. (#11601)
- Added an explicit public-symbol list to the top-level great_expectations module so static type checkers recognize get_context and other promoted symbols as exported. (#11578)
- Expectation configuration equality now accounts for the Expectation ID, so suites containing multiple Expectations with identical kwargs and meta but different IDs no longer produce missing or duplicated validation results. (#11593)
Maintenance
Contributors
Thanks to @ipriyankalimbad (first contribution).
1.11.0 (2026-01-12)
Highlights
-
Unexpected rows are returned as dictionaries for Map expectations — Map expectation validation results now report
unexpected_rowsas dictionaries keyed by column name instead of database-specific row objects rendered as tuples, so results are easier to parse and no longer depend on an opt-in flag. (#11591, #11583)result = batch.validate(expectation)
# result["result"]["unexpected_rows"]
# [{"col_a": 1.0, "col_b": 1.0, "col_c": 2.0}] -
Column-based validations work on Redshift batches —
batch.columns()no longer returns an empty list for Redshift batches on clusters with restrictedinformation_schemaaccess, and table names given as"schema.table"are resolved correctly, so column-based expectations run instead of failing with a metric domain error. (#11534)batch = batch_definition.get_batch()
print(batch.columns()) -
Unexpected index query available with SUMMARY result format —
return_unexpected_index_queryis now supported with the SUMMARY result format, matching what BASIC already offered. (#11594)result = batch.validate(
expectation,
result_format={
"result_format": "SUMMARY",
"unexpected_index_column_names": ["pk"],
"return_unexpected_index_query": True,
},
)
Changes
Features
- Map expectation validation results now serialize
unexpected_rowsas dictionaries by default, and themap_expectation_unexpected_rows_as_dictopt-in flag is no longer needed. (#11591)
Bug fixes
- Fixed
batch.columns()returning an empty list for Redshift batches, which caused column-based expectations to fail; column names are now retrieved via a fallback query wheninformation_schemais inaccessible, andtable_namevalues of the form"schema.table"are parsed correctly. (#11534)
Docs
- Documentation no longer labels ExpectAI as beta. (#11590)
- Removed temporary notes about row conditions from the documentation. (#11581)
- The copy button on documentation code blocks no longer copies hidden lines. (#11571)
- Reframed and clarified the documented Data Source limitations. (#11570)
Maintenance
return_unexpected_index_queryis now supported with the SUMMARY result format, so SUMMARY is no longer more limited than BASIC. (#11594)- Suppressed
DeprecationWarnings emitted by dependencies so local test runs are not failed by them. (#11587) - Added an opt-in
map_expectation_unexpected_rows_as_dictCheckpoint setting that serializesunexpected_rowsas dictionaries for all Map expectations on SQLAlchemy and Spark, with the default output unchanged. (#11583) invoke depsaccepts--ptyand--no-ptyflags so automated environments can control pseudo-terminal usage. (#11586)- Improved the local type-checking developer experience: fixed type errors, silenced
pyparsingdeprecation warnings via the compatibility layer, and documented the type-checking workflow so local runs match CI. (#11574)
Contributors
Thanks to @leodrivera (first contribution).
1.10.0 (2025-12-18)
Highlights
-
Unexpected-index columns and unexpected queries on BOOLEAN_ONLY and BASIC result formats — Result formats BOOLEAN_ONLY and BASIC now support returning primary-key/unexpected-index columns and the unexpected-rows query, so you can identify failing rows without switching to a more verbose result format. (#11563)
result = batch.validate(
expectation,
result_format={
"result_format": "BASIC",
"unexpected_index_column_names": ["pk_1"],
},
)
Changes
Features
- BOOLEAN_ONLY and BASIC result formats now support unexpected-rows queries and primary-key/unexpected-index columns. (#11563)
Docs
- Documented metric filters for the data health dashboard. (#11529)
- Documented result format options for GX Cloud. (#11558)
- Removed a temporary note about severity from the documentation. (#11564)
Maintenance
- Suppressed a noisy Google library warning about running on Python 3.10. (#11572)
- Continuous integration no longer fails when uploading coverage or test results to Codecov fails, reducing flaky builds. (#11569)
- Bumped the pinned ruff linter version from 0.14.8 to 0.14.9 in development requirements and pre-commit. (#11568)
- Fixed a flaky SQLite ResourceWarning in the test suite by closing connections deterministically during teardown. (#11562)
- Corrected the add_dataframe_asset docstring for Spark datasources. (#11561)
1.9.3 (2025-12-10)
Highlights
-
Primary key information in column type metrics — The
table.column_typesmetric now reports whether each column is part of the table's primary key when using a SQL (SQLAlchemy) execution engine. Single-column, composite, and quoted primary keys are all detected, and columns in tables without a primary key are reported as not primary keys. (#11554)# Each entry in the metric value now includes a `primary_key` flag:
# [
# {"name": "id", "type": "UUID", "primary_key": True},
# {"name": "created_at", "type": "TIMESTAMP WITH TIME ZONE", "primary_key": False},
# ] -
Oracle query assets no longer get an unwanted FROM DUAL clause — Querying Oracle data sources through SQLAlchemy no longer appends a spurious
FROM DUALclause to an already well-formed SQL query, so query assets against Oracle run as written. Verified against Oracle 19c and PostgreSQL 10.16. (#11538)
Changes
Features
- The
table.column_typesmetric now includes aprimary_keyflag for each column when read through a SQL execution engine, covering single-column, composite, and quoted primary keys. (#11554)
Bug fixes
- Queries against Oracle data sources are no longer rewritten with an extra
FROM DUALclause when the query is already properly formatted. (#11538)
Docs
- Updated the documentation covering unexpected rows. (#11553)
- Updated the compatibility reference page with combined reference updates. (#11555)
- Fixed typos in the manage expectations documentation page. (#11547)
- Added documentation for asset history. (#11543)
Maintenance
- Aligned the ruff pre-commit version with the pinned requirements version and re-enabled the TC001 lint rule for tests. (#11557)
- Upgraded the mypy version used for type checking and updated type annotations across the codebase to match. (#11551)
- SQLite test fixtures now close their raw database connections, eliminating ResourceWarnings from unclosed connections during test runs. (#11552)
- Rendered unexpected-rows tables for multi-source expectations such as
expect_query_results_to_match_comparisonagain include columns whose values are null, so column headers line up with the data. (#11548) - Bumped the ruff linter to 0.14.8. (#11550)
- Fixed the documentation build so that the
invokecommand is found during the docs build step. (#11545) - Ran pre-commit autoupdate, moving the ruff pre-commit hook from v0.14.3 to v0.14.7. (#11539)
Contributors
Thanks to @konnor-b (first contribution).
1.9.2 (2025-12-03)
Highlights
-
Fluent Snowflake datasource update methods — Snowflake datasources can now be updated or upserted through the fluent API with
update_snowflakeandadd_or_update_snowflake, matching the methods already available for other datasource types. (#11520)context.data_sources.add_or_update_snowflake(
name="my_snowflake_ds",
connection_string="snowflake://<user>@<account>/<database>/<schema>?warehouse=<wh>&role=<role>",
) -
Documentation for running validations with the GX Cloud API — The documentation now explains how to run validations using the GX Cloud API, including what is supported and how results are handled. (#11400)
-
Documentation for Custom Actions in GX Cloud — New documentation describes how to configure and use Custom Actions in GX Cloud. (#11521)
-
Dependency compatibility reference expanded — The compatibility reference in the docs now lists supported dependencies, so you can check which versions work with your installation before upgrading. (#11530)
Deprecations
- Passing
private_keyinside a Snowflake datasource'skwargsis deprecated; use the datasource's dedicatedprivate_keyconnection argument. Removal in 2.0.0. (#11520)
Changes
Docs
- Added supported dependencies to the compatibility reference documentation. (#11530)
- Added documentation for Custom Actions in GX Cloud. (#11521)
- Removed the misleading "read-only" deployment pattern from the deployment documentation. (#11533)
- Added documentation on running validations with the GX Cloud API. (#11400)
Maintenance
- Bumped express from 4.21.2 to 4.22.1 in the documentation site dependencies. (#11540)
- Re-enabled the stale bot for pull requests on a nightly schedule, covering all pull requests regardless of labels and excluding issues. (#11544)
- Bumped mdast-util-to-hast from 13.2.0 to 13.2.1 in the documentation site dependencies. (#11541)
- Bumped node-forge from 1.3.1 to 1.3.2 in the documentation site dependencies, picking up its security fixes. (#11536)
- Pinned the posthog-docusaurus version used by the documentation site. (#11531)
- Creating, updating, or loading a Snowflake datasource that supplies
private_keythroughkwargsnow emits a deprecation warning, and the fluent API gainedupdate_snowflakeandadd_or_update_snowflake. (#11520)
1.9.1 (2025-11-20)
Deprecations
- String values for the
row_conditionparameter on expectations is deprecated; use Condition objects, such asColumn("age") > 18. Removal in 2.0.0. (#11515) - The
condition_parserparameter on expectations is deprecated; use Condition objects, such asColumn("age") > 18. Removal in 2.0.0. (#11515)
Changes
Docs
- Clarified the documentation on deploying the GX Agent, spelling out the limitations of agent-enabled deployments. (#11518)
Maintenance
- Updated the pinned ruff pre-commit hook to v0.14.3. (#11502)
- Improved SQLAlchemy 2.0 transaction handling for Databricks: commits are only attempted when a transaction is active, and connections left in a pending-rollback state are rolled back and retried automatically. (#11524)
- Passing a string to
row_condition, or supplyingcondition_parser, now raises a DeprecationWarning pointing to Condition objects (for exampleColumn("age") > 18) instead. (#11515) - Updated the CI test exclude list so tests are required on Python 3.10, now the minimum supported version. (#11517)
1.9.0 (2025-11-07)
Compatibility: Python <3.14,>=3.9 → <3.14,>=3.10; numpy removed (python_version == "3.9"); pandas removed (python_version == "3.9")
Highlights
-
Row conditions: documented, importable, and rendered in Data Docs — Row conditions are now a supported way to scope an Expectation to a subset of rows. The condition classes (including
Columnand the comparison, nullity, and boolean conditions) are part of the public API and are imported fromgreat_expectations.expectations.row_conditions; the previousgreat_expectations.expectations.conditionsimport path still works. Conditions are validated more strictly (an in/not-in parameter must be an iterable whose members share a single type, and boolean members are rejected), a bare string condition is always turned into a condition object even when no condition parser is given, and Data Docs now renders every condition when an Expectation carries more than one. New documentation pages, screenshots, and notes on the minimum GX Cloud API and agent versions required for certain row-condition features round this out. (#11478, #11494, #11497, #11500, #11504, #11506, #11507, #11509, #11511, #11512)from great_expectations.expectations.row_conditions import Column
condition = Column("age") > 21 -
Python 3.10 is now the minimum supported version — Great Expectations no longer supports Python 3.9. Install on Python 3.10 or newer; the documentation now states 3.10 as the minimum. (#11501, #11485)
-
unexpected_index_column_namesreturned by ExpectColumnValuesToNotBeNull — When you request unexpected index columns inresult_format, ExpectColumnValuesToNotBeNull now includesunexpected_index_column_namesin its validation result, matching the other column-value Expectations. (#11513)result_format={"result_format": "COMPLETE", "unexpected_index_column_names": ["customer_id"]}
Changes
Bug fixes
- ExpectColumnValuesToNotBeNull now includes
unexpected_index_column_namesin its validation results when they are requested throughresult_format. (#11513)
Docs
- Documented the minimum GX Cloud API and agent versions required to use certain row-condition capabilities. (#11512)
- Updated the documented minimum supported Python version to 3.10. (#11485)
- Added screenshots to the row conditions documentation. (#11509)
- Added documentation and code samples for using row conditions to scope Expectations to a subset of rows. (#11478)
Maintenance
- Removed the discontinued Common Room script from the documentation site and captured documentation page views directly with PostHog. (#11514)
- Dropped support for Python 3.9; Great Expectations now requires Python 3.10 or newer. (#11501)
- Continuous integration now runs against a mock LaunchDarkly server instead of a live feature-flag service. (#11510)
- The row condition subclasses are now part of the documented public API. (#11511)
- Restored page-view capture on the documentation site so single-page navigation is tracked again. (#11508)
- Data Docs now renders every condition when an Expectation is scoped by more than one row condition. (#11507)
- A row condition supplied as a string is now always converted into a condition object, including when no condition parser is specified. (#11504)
- The row conditions
Columnclass and its siblings are now imported fromgreat_expectations.expectations.row_conditions; the previousgreat_expectations.expectations.conditionsimport path continues to work. (#11506) - Suppressed the boto warning about the deprecation of Python 3.9 support. (#11505)
- Snowflake tests now authenticate with key-pair authentication. (#11498)
- Boolean values are no longer accepted as members of the parameter passed to
Column.is_in()andColumn.is_not_in(). (#11500) - Comparison conditions using the in/not-in operators now require an iterable parameter whose members are all of the same type (or all numeric), and report an error otherwise. (#11494)
- Added the Snowflake private key to the continuous integration environment variables. (#11499)
- The conditions
Columnclass now takes its column name as a positional argument, so it can be constructed asColumn("age"). (#11497) - Fixed a flaky validation definition test caused by a race between raised errors when reusing a context from other tests. (#11495)
Contributors
Thanks to @chay0112 (first contribution).
1.8.1 (2025-10-30)
Highlights
-
Null checks in row conditions — Row conditions now express null comparisons explicitly with
is_null()andis_not_null()on a column, and passingNoneas the value of a comparison operator is rejected instead of silently producing an invalid condition. (#11491)import great_expectations.expectations as gxe
from great_expectations.core.expectation_condition import Column
gxe.ExpectColumnValuesToBeBetween(
column="amount",
min_value=0,
row_condition=Column("cancelled_at").is_null(),
) -
Legacy row condition strings keep working alongside condition objects — Existing string-based
row_conditionvalues are accepted and converted into the new condition objects, thecondition_parserfield is preserved, pandas and Spark conditions have a passthrough path, and rendered expectation content displays the new condition types correctly. (#11474, #11484, #11480, #11481) -
Clearer limits on combining row conditions — Nested
AndConditions are flattened automatically, whileOrConditions nested insideAndConditions or otherOrConditions now raise an explicit error, as does supplying more than 100 conditions. (#11488) -
Updated Snowflake connection documentation — The Snowflake documentation now covers the deprecation of password authentication and gives corrected guidance for configuring private key authentication. (#11416, #11490)
Changes
Bug fixes
- Test runs no longer fail on the
google.api_corePython 3.10 end-of-life warning. (#11493) - Cloud-marked tests can no longer reach the live API: unmocked HTTP requests are blocked, preventing accidental production calls during test runs. (#11492)
- Rendered expectation content is generated correctly for the new row condition types. (#11481)
Docs
- Corrected the Snowflake private key authentication guidance. (#11490)
- Documented the deprecation of Snowflake password authentication and the recommended alternatives. (#11416)
Maintenance
- Passing
Noneas the value of a column comparison in a row condition is now rejected; useis_null()oris_not_null()for null checks, and the comparison parameter is required. (#11491) - Expectation suites stored in GX Cloud are now read and written through the v2 REST endpoints. (#11487)
- Microsoft SQL Server drivers are installed in CI only for the jobs that need them, and the installation script reports failures more clearly. (#11489)
- Row condition groups are constrained: nested
AndConditions are flattened,OrConditions nested insideAndConditions orOrConditions raise an error, and more than 100 conditions raises an error. (#11488) - Added a passthrough path for the pandas and Spark row condition parsers so existing condition expressions are handled directly. (#11480)
- Test runs no longer surface the Python 3.9 end-of-life future warning. (#11486)
- Spark test environments now use the Apache-published Spark image after the previously used Bitnami image was removed. (#11444)
- The
condition_parserfield is retained for backwards compatibility so single-condition row conditions still convert to string syntax on older API versions. (#11484) - Legacy string
row_conditionvalues are transformed into the new condition objects. (#11474) - Disabled the documentation link checker, which was reporting too many false positives. (#11477)
- Python 3.12 marker tests no longer run on every pull request; only the minimum and maximum supported Python versions are exercised for those events. (#11457)
1.8.0 (2025-10-23)
Highlights
-
Snowflake key pair authentication — Snowflake data sources now accept key pair authentication as a first-class part of the connection API, so you can configure a Snowflake data source with a private key instead of a password. (#11395)
context.data_sources.add_snowflake(
name="my_snowflake",
connection_details={
"account": "myOrg-my_account",
"user": "my_user",
"database": "my_db",
"schema": "my_schema",
"warehouse": "my_wh",
"role": "my_role",
"private_key": "<PEM-encoded private key>",
},
) -
Row conditions are honored by Volume Expectations — Volume Expectations now apply the configured row condition, so expected row counts are evaluated against the filtered rows rather than the whole batch. (#11467)
-
Documented schema handling in Redshift and PostgreSQL connection strings — The connection documentation now explains how to specify a schema in Redshift and PostgreSQL connection strings. (#11433)
-
GX Cloud Data Health documentation for failed Expectations — New GX Cloud documentation covers the Data Health view for failed Expectations, with screenshots refreshed to match the current interface, alongside new GX Cloud architecture supporting content. (#11419, #11458, #11439)
Changes
Features
- Snowflake data sources can now be configured with key pair authentication as a supported set of connection details. (#11395)
Bug fixes
- Volume Expectations now respect the configured row condition when counting rows. (#11467)
Docs
- Documentation now describes how to include a schema in Redshift and PostgreSQL connection strings. (#11433)
- Re-enabled the documentation link checker. (#11449)
- Added supporting content to the GX Cloud architecture documentation. (#11439)
- Updated the Data Health failed Expectations screenshots to match recent interface changes. (#11458)
- Added GX Cloud documentation for the Data Health view of failed Expectations. (#11419)
Maintenance
- SQL execution now handles the structured row-condition type internally, with no change to how existing string conditions behave. (#11473)
- Spark execution now handles the structured row-condition type internally, with no change to how existing string conditions behave. (#11470)
- Updated the lychee link-checking GitHub Action used in CI from 2.0.1 to 2.0.2. (#11466)
- The pandas execution engine now handles the structured row-condition type for row conditions, with no change to existing behavior. (#11469)
- Added internal filter-clause support for SQLAlchemy row conditions. (#11459)
- CI cleanup of test data source schemas now removes schemas older than one hour instead of two. (#11463)
- Expectation row conditions now accept the new structured condition type in their schemas, though passing a condition object currently raises an error. (#11464)
- Suppressed a pkg_resources deprecation warning that was causing spurious test failures. (#11465)
- Added internal filter-clause support for Spark row conditions. (#11456)
- Added internal filter-clause support for pandas row conditions. (#11455)
- CI now cleans up test data sources hourly and covers more leftover schemas. (#11462)
- Added internal execution-engine scaffolding for structured row conditions. (#11452)
- Added comparison, nullity, and column classes used to build row conditions. (#11450)
- The SQLite connection used to register helper functions is now closed, removing a resource warning seen in test runs. (#11451)
- Added AND/OR classes for combining multiple row conditions. (#11448)
1.7.1 (2025-10-15)
Highlights
-
Databricks SQL parameters are now compiled in
unexpected_index_query— Validation results for Databricks now return anunexpected_index_querywith its parameters fully rendered, so the query can be copied and run as-is. The query compilation is also no longer sensitive to unfamiliar bind-parameter patterns or to the ordering of parameter values. (#11437) -
ExpectColumnValuesToBeOfTypeworks against Trino —ExpectColumnValuesToBeOfTypenow evaluates correctly when validating data in Trino. (#11438)import great_expectations as gx
gx.expectations.ExpectColumnValuesToBeOfType(column="id", type_="INTEGER")
Changes
Bug fixes
- Databricks SQL parameters are now compiled into
unexpected_index_query, so the returned query is complete and runnable, and no longer depends on bind-parameter naming patterns or dictionary ordering. (#11437) - Fixed
ExpectColumnValuesToBeOfTypeso it evaluates correctly against Trino. (#11438)
Docs
- Added documentation for connecting to data in Amazon S3. (#11375)
- Clarified in the documentation that a workspace is required. (#11443)
- Documented support for Python 3.13. (#11442)
- Updated documentation to describe finding the workspace ID in the UI. (#11435)
Maintenance
1.7.0 (2025-10-09)
Compatibility: Python <3.13,>=3.9 → <3.14,>=3.9; numpy added (python_version >= "3.13"); pandas added (python_version >= "3.13"); posthog removed; pandas removed (extra snowflake) (python_version >= "3.9")
Highlights
-
Python 3.13 support — Great Expectations now installs and runs on Python 3.13, in addition to the previously supported 3.9 through 3.12. (#11426)
-
Works with pandas 2.2 and newer — The
<2.2upper bound on pandas has been removed, so you can install Great Expectations alongside pandas 2.2.0 and later and pick up the newest pandas features and fixes. (#11423)pip install great_expectations "pandas>=2.2" -
Usage analytics removed — Great Expectations no longer collects or sends usage analytics, and the
posthogdependency is no longer installed with the library. (#11420) -
Reassigning a Snowflake connection string now works as expected — Setting a new connection string on an existing SQL data source — including Snowflake — is now converted to the proper connection type, so the data source stays usable after the reassignment. (#11410)
datasource.connection_string = "snowflake://user:password@account/db/schema?warehouse=wh&role=role"
Changes
Features
- Added support for running Great Expectations on Python 3.13. (#11426)
- The
Rendererclass is no longer part of the public API. (#10866) - Removed the
<2.2upper bound on pandas so Great Expectations can be used with pandas 2.2.0 and above. (#11423)
Bug fixes
- Fixed AWS authentication errors at validation time when credentials were supplied to
PandasS3Datasourcethroughboto3_optionsrather than environment variables. (#11412) - Fixed an issue where assigning a new connection string to a SQL data source after creation — most visibly with Snowflake — left the value in an unusable form. (#11410)
Docs
- Removed the migration guide from the documentation. (#11405)
- Documentation now states that Completeness Anomaly Detection is opt-in. (#11406)
- Documentation now states that schedules are opt-in. (#11408)
Maintenance
- Redshift connection details now accept a discrete
schemafield, so a schema can be supplied separately when configuring a Redshift connection. (#11431) - Re-enabled publishing of pact contract tests. (#11427)
- A warning is now emitted when the workspace ID is not set. (#11425)
- Removed usage analytics collection from the library, along with its
posthogdependency. (#11420) - Upgraded the mypy version used for type checking. (#11422)
- Upgraded the ruff version used for linting and formatting. (#11421)
- Skipped tests that fail on the combination of SQLAlchemy below 2.0 and pandas 2.2 or newer to keep CI stable. (#11417)
- Pinned pact-python to avoid an installation error on Python 3.12. (#11418)
- Updated test assertions to use truthiness checks instead of identity comparisons for NumPy 2.x compatibility. (#11415)
- Bumped the SQLAlchemy version used when testing documentation snippets. (#11411)
1.6.4 (2025-10-01)
Changes
Docs
- Corrected a typo and updated verb tense in the documentation. (#11404)
Maintenance
1.6.3 (2025-09-24)
Compatibility: new extra test
Highlights
-
Tutorial for validating unstructured data in GX Cloud — A new tutorial walks through validating unstructured data in GX Cloud end to end. (#11380)
-
Documentation for severity tagging — The GX Cloud documentation now covers severity tagging, including refreshed screenshots that match the current UI, plus new diagrams illustrating GX integration points. (#11354, #11394, #11391)
Changes
Docs
- Added a tutorial for validating unstructured data in GX Cloud. (#11380)
- Added diagrams illustrating GX integration points. (#11391)
- Updated screenshots to reflect the current UI for severity tagging. (#11394)
- Documented severity tagging for validation results. (#11354)
Maintenance
1.6.2 (2025-09-19)
Compatibility: pyarrow removed (extra arrow); new extra arrow; new extra snowflake; removed extra snowflake; pyarrow removed (extra test); new extra test
Highlights
-
Expectation reference documentation now describes the severity parameter — Every Expectation type's reference documentation now lists
severityunder "Other Parameters", with a link to the severity documentation, so you can see how to set failure severity directly from the Expectation reference. (#11387) -
Type-list validation works against Trino —
ExpectColumnValuesToBeInTypeListnow compares column types correctly when validating data through the Trino dialect, instead of misreporting matching types. (#11386) -
Documentation for workspaces — The documentation site now covers workspaces. (#11366)
Changes
Bug fixes
ExpectColumnValuesToBeInTypeListnow handles type comparisons correctly for the Trino dialect. (#11386)
Docs
- Added a
severitydescription with a documentation link to the "Other Parameters" section of every Expectation type, and capitalized "Expectation" in theFailureSeveritydescription. (#11387) - Added documentation covering workspaces. (#11366)
Maintenance
- Fixed Snowflake dependency resolution on Python 3.10 so installs with Snowflake support succeed. (#11390)
- Pinned
pyarrow>=14for Python 3.12 in the development arrow requirements so Snowflake marker test jobs install a prebuilt wheel instead of failing to build from source; no runtime behavior changes. (#11388)
1.6.1 (2025-09-15)
Changes
Bug fixes
- Users without any associated workspaces — such as the system user used by the runner — no longer hit an error when retrieving cloud user information, so analytics can be logged with no workspaces present. (#11378)
1.6.0 (2025-09-12)
Highlights
-
GX Cloud workspace awareness — Data Contexts are now workspace aware, laying the groundwork for GX Cloud's multi-workspace support. A workspace id supplied to a Cloud context is carried through to Cloud requests and to the credentials used by its stores. (#11369, #11371, #11373)
# GX_CLOUD_WORKSPACE_ID is read alongside your Cloud access token and organization id
import great_expectations as gx
context = gx.get_context(mode="cloud") -
S3 data assets read past the first page of results — Listing files in an S3 directory or bucket with more results than fit in a single response now returns all of them instead of raising an error part-way through. (#11361)
-
More robust handling of quoted and mixed-case SQL identifiers — Schema and table names that are quoted, use data-source-specific quote characters, or use mixed case are now handled correctly when building queries and when collecting column metadata. (#11367, #11365)
Changes
Features
- Data Contexts are now workspace aware, adding initial support for GX Cloud's upcoming multi-workspace feature. (#11369)
Bug fixes
- Reading an S3 directory that spans multiple pages of results no longer fails; the continuation token is no longer reused in subsequent requests. (#11361)
- Quoted schema and table names are handled more reliably: the quote characters used by all supported SQL data sources are now recognized, and identifiers are quoted correctly when serialized. (#11367)
- Column metadata is now computed correctly for tables whose names use mixed case. (#11365)
Docs
- Documentation for building custom agent Docker images now recommends the stable base image instead of latest. (#11353)
Maintenance
- A Cloud context now passes its workspace id along with the access token and organization id in the credentials used by its stores, and requests for the data context configuration are scoped to the workspace. (#11371)
- The Cloud test job in continuous integration now supplies a workspace id, so workspace-aware behavior is exercised in CI. (#11373)
- Added test coverage confirming that the unexpected_rows result format option behaves consistently across the canonical column map expectations for Pandas and SQL data sources. (#11368)
Contributors
Thanks to @pawel99k (first contribution).
1.5.11 (2025-09-04)
Highlights
-
Severity-aware Checkpoint notifications — Expectations that carry a severity value can now be validated and acted on end to end: validation results expose the highest-severity failure they contain, and built-in Checkpoint actions use it to decide whether to notify. (#11341, #11343, #11347)
result = checkpoint.run()
validation_result = result.run_results[next(iter(result.run_results))]
max_severity = validation_result.get_max_severity_failure() -
Quoted table names stay quoted in GX Cloud — A table asset whose table name is quoted keeps its quoting when it is sent to and fetched back from GX Cloud, so the name continues to be treated as quoted. (#11357)
Changes
Features
- Validation results expose a new get_max_severity_failure method that reports the highest-severity failing Expectation in the result, which is also used when deciding whether to send notifications. (#11341)
- Expectations with a severity value set can now be validated; previously validation failed because the expectation configuration could not be serialized. (#11343)
- Built-in Checkpoint actions now take Expectation severity into account when deciding whether to send a notification. (#11347)
Bug fixes
- Quoted table names on a table asset keep their quotes when the asset is serialized for GX Cloud, so a fetched asset is still treated as having a quoted table name. (#11357)
- Unexpected rows are now included in validation results whenever they are requested. (#11358)
Docs
- Added GX Cloud documentation for the built-in validation actions. (#11338)
Maintenance
- Updated the ports used by the Cloud test suite to match the new service ports. (#11351)
1.5.10 (2025-08-27)
Changes
Docs
- Documented a limitation of the forecasted range used by anomaly detection. (#11349)
- Documentation now explains that completeness anomaly detection uses the forecasted range. (#11346)
Maintenance
- Updated the mermaid diagram library used to build the documentation site from 11.9.0 to 11.10.1. (#11348)
1.5.9 (2025-08-20)
Highlights
-
Expectation JSON schemas now carry failure severity — Expectations can express a failure severity, and the published JSON schemas now include the new
severityfield backed by aFailureSeverityenum. (#11337) -
Documentation for Cloud API version 0.18 sunset — The compatibility reference and related documentation now reflect the sunset of Cloud API version 0.18. (#11334)
Changes
Features
- Expectation JSON schemas now include a
severityfield, with a newFailureSeverityenum describing Expectation failure severity. (#11337)
Docs
- The "Manage Expectations" documentation is split into separate, more focused pages. (#11340)
- Temporarily removed the documentation link checker to unblock documentation builds. (#11342)
- Documentation now reflects the sunset of Cloud API version 0.18, including an updated compatibility reference. (#11334)
- Corrected a typo in an environment variable name in the documentation. (#11335)
- Documentation navigation paths no longer include "Settings", matching the updated UI navigation. (#11332)
Maintenance
- Updated documentation site dependencies (Docusaurus 3.8.1, webpack-dev-server 5.2.2, jest-environment-jsdom 30.0.5) to resolve CVE-2025-30360 and CVE-2025-7783. (#11339)
1.5.8 (2025-08-07)
Highlights
-
Validations against Databricks no longer fail on large bundled metric queries — Metric queries that exceed Databricks' 256 query-parameter limit are now split into smaller batches automatically, so validating batches with many parameters against Databricks completes instead of erroring. (#11317)
-
Documentation for retrying Expectation generation with your own input — The documentation now describes the retry workflows for supplying user input when generating Expectations, so you can guide generation when the first attempt isn't what you wanted. (#11325)
Changes
Bug fixes
- Bundled metric queries are now split into batches when they would exceed Databricks' 256 query-parameter limit, so validations no longer fail on that limit. (#11317)
Docs
- Documented the retry workflows for providing user input during Expectation generation. (#11325)
- Corrected a typo ("retreive" to "retrieve") in the guide on configuring metadata stores. (#11316)
- Updated the "GX Cloud in your environment" diagram to reposition data ingestion. (#11329)
Maintenance
Contributors
Thanks to @Abdelkrim (first contribution).
1.5.7 (2025-07-30)
Highlights
- Spark Connect and Databricks shared clusters now supported for column comparisons — Expectations that reference columns on Spark now build those references in a way Spark Connect accepts, so validations that previously failed with "[CANNOT_RESOLVE_DATAFRAME_COLUMN] Cannot resolve dataframe column" on Spark Connect and Databricks shared clusters now run correctly. Expectations such as ExpectColumnValueLengthsToBeBetween and ExpectColumnPairValuesAToBeGreaterThanB are fixed; behavior on local Spark is unchanged. (#11286)
Changes
Bug fixes
- Fixed Spark column references so expectations no longer fail with "Cannot resolve dataframe column" on Spark Connect and Databricks shared clusters. (#11286)
Maintenance
- Release artifacts are now built with the standard build tooling so source and wheel distributions are produced reliably. (#11324)
- Added the typing_extensions dependency to the build step so the release build no longer fails. (#11323)
- Bumped mypy to 1.16.1. (#11262)
- Updated pre-commit hooks, including ruff to v0.12.2. (#11287)
- Sped up marker tests in CI by bulk loading test data instead of inserting records one at a time. (#11321)
- Bumped form-data from 4.0.2 to 4.0.4 in the documentation site dependencies. (#11310)
- Bumped posthog to 6.1.0. (#11303)
- Fixed the MSSQL compatibility test CI flow, which would hang on an interactive package upgrade prompt. (#11320)
- Temporarily removed the documentation link checker step from CI. (#11322)
Contributors
Thanks to @alansk97 (first contribution).
1.5.6 (2025-07-24)
Highlights
-
New documentation for Data Health, SQL generation, and pipeline architecture — The docs now cover the Data Health dashboard (including a screenshot of it), generating SQL, the newly supported data sources, and a pipeline architecture diagram. (#11294, #11307, #11289, #11293, #11298)
-
Range expectations reject incompatible date and datetime bounds — ExpectColumnUniqueValueCountToBeBetween, ExpectColumnStdevToBeBetween, and ExpectColumnValueLengthsToBeBetween no longer accept date or datetime values for their min and max inputs, so these expectations now only allow bounds that make sense for the value they measure. (#11305)
Changes
Bug fixes
- ExpectColumnUniqueValueCountToBeBetween, ExpectColumnStdevToBeBetween, and ExpectColumnValueLengthsToBeBetween no longer accept date or datetime values for their min and max inputs. (#11305)
Docs
- Added a screenshot of the new Data Health dashboard to the documentation. (#11307)
- Restored the documentation link checker now that the new and renamed pages it covers have been published. (#11308)
- Documented the newly supported data sources. (#11293)
- Standardized data source naming across expectation docstrings and related schemas. (#11306)
- Added a pipeline architecture diagram to the documentation. (#11298)
- Expectation docstrings now list the supported Postgres flavors. (#11304)
- Added documentation for the Data Health dashboard. (#11294)
- Added documentation for generating SQL. (#11289)
Maintenance
1.5.5 (2025-07-10)
Highlights
-
BigQuery data source — A dedicated BigQuery data source class is now available, so BigQuery connections can be declared as their own data source type rather than as a generic SQL connection. (#11296)
-
Postgres-compatible data source flavors — New data source classes cover Postgres-compatible services — Google Cloud AlloyDB, Amazon Aurora, Citus, and Neon — so each of these backends can be selected directly when connecting to data. (#11290)
-
Disabling analytics is now fully respected — When analytics is disabled in the Data Context configuration, analytics initialization is no longer performed at all. This resolves permission-denied errors raised while looking for a user-level configuration file in restricted environments such as Databricks streaming jobs. (#11276)
Changes
Features
- Added a BigQuery data source class for connecting to BigQuery. (#11296)
- Added Postgres-compatible data source classes for Google Cloud AlloyDB, Amazon Aurora, Citus, and Neon. (#11290)
Bug fixes
- Analytics initialization is now skipped entirely when analytics is disabled in the Data Context configuration, avoiding permission-denied errors from looking up a user-level configuration file. (#11276)
Docs
- Corrected an inaccurate statement about forecasted ranges in the documentation. (#11295)
Maintenance
- Upgraded the ruff linter and formatter used for development to 0.12.2. (#11288)
Contributors
Thanks to @jmcorreia.
1.5.4 (2025-07-02)
Highlights
-
Corrected result summary for ExpectTableColumnsToMatchSet — Validation results for ExpectTableColumnsToMatchSet now render correctly, so the expectation's summary reads accurately wherever results are displayed. (#11281)
-
New documentation for Anomaly Detection expectations — The docs now cover the Anomaly Detection expectation drawer and its underlying model, so you can understand how anomaly detection expectations are configured and how they behave. (#11234)
Changes
Bug fixes
- Fixed the rendering of ExpectTableColumnsToMatchSet so its results display correctly. (#11281)
- Generalized the schema expectation so it behaves correctly across a wider range of inputs. (#11272)
Docs
- Clarified the integration support policy documentation and renamed the "resources" section to "help". (#11247)
- Added documentation for the Anomaly Detection expectation drawer and the anomaly detection model. (#11234)
Maintenance
- Snowflake and Databricks integration tests now use the shared data-source parameterization helper instead of the table factory fixture, with no change to library behavior. (#11277)
- Upgraded the ruff linter used for development to 0.12.0. (#11263)
- Snowflake end-to-end Cloud tests now use the shared data-source parameterization decorator for connection pooling and table setup and teardown, with no change to library behavior. (#11274)
1.5.3 (2025-06-25)
Highlights
-
ExpectTableColumnsToMatchSet now matches column names case-insensitively — On SQL dialects where column names are compared case-insensitively (PostgreSQL, Databricks SQL, and Snowflake), ExpectTableColumnsToMatchSet no longer fails when the expected column set differs only by letter casing from the table's actual columns. It now behaves consistently with the other column-name expectations such as expect_table_columns_to_match_ordered_list and expect_column_to_exist. (#11266)
import great_expectations.expectations as gxe
# Passes against a table whose columns are PASSENGER_COUNT and TRIP_DISTANCE
suite.add_expectation(
gxe.ExpectTableColumnsToMatchSet(column_set=["passenger_count", "trip_distance"])
)
Changes
Bug fixes
- ExpectTableColumnsToMatchSet now compares column names case-insensitively on dialects that treat column names as case-insensitive, so expectations no longer fail purely because of letter casing. (#11266)
Docs
- Added documentation for the ExpectColumnProportionOfNonNullValuesToBeBetween expectation. (#11257)
Maintenance
- Widened the supported posthog dependency range to allow versions 4 and 5. (#11265)
1.5.2 (2025-06-18)
Highlights
-
Suite parameters accepted in every expectation argument — All expectation arguments now accept suite parameters, so any keyword argument of an expectation can be supplied at validation time instead of being hard-coded when the expectation is defined. (#11222)
import great_expectations as gx
expectation = gx.expectations.ExpectColumnValuesToBeBetween(
column="passenger_count",
min_value={"$PARAMETER": "min_passengers"},
max_value={"$PARAMETER": "max_passengers"},
)
results = batch.validate(
expectation,
expectation_parameters={"min_passengers": 1, "max_passengers": 6},
) -
Whole-directory batch definitions read every file again — Batch definitions created with
add_batch_definition_whole_directoryon S3, Azure Blob Storage, and Google Cloud Storage data assets now read all files in the directory instead of only one. (#11254)asset = data_source.add_directory_csv_asset(name="my_asset", s3_prefix="data/")
batch_definition = asset.add_batch_definition_whole_directory("all_files")
batch = batch_definition.get_batch()
Changes
Features
- Every expectation argument now accepts a suite parameter, so all expectation keyword arguments can be parameterized and supplied at validation time. (#11222)
Bug fixes
- The
min_valueandmax_valueparameters ofExpectColumnProportionOfNonNullValuesToBeBetweenandExpectColumnProportionOfUniqueValuesToBeBetweenno longer accept date or datetime values; they now accept only numbers (or a suite parameter), and their published schemas reflect this. (#11259) - Fixed
add_batch_definition_whole_directoryreading only a single file for S3, Azure Blob Storage, and Google Cloud Storage data assets; the whole directory is now read as one batch. (#11254) - Fixed a
ValidationErrorraised when usingExpectColumnPairValuesToHaveDifferenceOfCustomPercentage; the expectation now declares its requiredpercentageargument. (#11209)
Docs
- Added a tip about Cloud API data sources to the documentation. (#11248)
- Temporarily disabled the documentation link checker while changed page paths are sorted out. (#11250)
Maintenance
Contributors
Thanks to @Pascal06S (first contribution), @sariaslaso (first contribution).
1.5.1 (2025-06-11)
Highlights
-
New expectation: ExpectColumnProportionOfUniqueValuesToBeBetween — You can now assert that the proportion of unique values in a column falls within an expected range, letting you catch columns that become unexpectedly duplicated or unexpectedly high-cardinality. (#11235)
import great_expectations.expectations as gxe
expectation = gxe.ExpectColumnProportionOfUniqueValuesToBeBetween(
column="passenger_count",
min_value=0.1,
max_value=0.9,
) -
Non-null count available as a column metric — A column aggregate metric for the number of non-null values in a column is now available, so expectations and custom checks can reason about how much data a column actually contains. (#11229)
Changes
Features
- Added
ExpectColumnProportionOfUniqueValuesToBeBetween, which validates that the proportion of unique values in a column falls between a minimum and maximum value. (#11235) - Added a
ColumnAggregateNonNullCountmetric that reports the number of non-null values in a column. (#11229)
Docs
- Fixed a documentation link that pointed at content removed in an earlier change. (#11232)
- Revised documentation wording around the term "API" for consistency with the current style guidance. (#11196)
Maintenance
- Removed the Rule-Based Profiler and its references, moving the column-filtering behavior it provided into a standalone module. (#11231)
- Restored database connection pooling in the expectation test suite, including cleanup of the temporary schemas the tests create. (#11228)
- Reverted a change that gated Snowflake tests behind a
--snowflakeflag, so those tests run again in CI via thesnowflakemarker. (#11230)
1.5.0 (2025-06-05)
Highlights
-
Multi-source Expectations documentation — The documentation now covers Multi-source Expectations, explaining how to compare data across two different data sources. (#11165)
-
Redshift geometry and super column types supported — Redshift data sources now recognize the
GEOMETRYandSUPERcolumn types, so assets containing these columns can be introspected and validated. (#11194) -
No more pkg_resources dependency — GX Core no longer depends on the deprecated
pkg_resourcespackage, removing its import-time deprecation warnings on modern Python installs. (#11213)
Changes
Features
- Added support for the Redshift
GEOMETRYandSUPERcolumn types. (#11194)
Docs
- Restored the documentation link checker that had been temporarily disabled. (#11212)
- Added documentation for Multi-source Expectations. (#11165)
- Revised how the term "Cloud" is used throughout the GX Core documentation for consistency. (#11207)
Maintenance
- Added test coverage for suite parameters used as
min_valueandmax_valueinExpectColumnMaxToBeBetween. (#11225) - Removed the
pkg_resourcesdependency, replacing requirements parsing with a pip compatibility module and a self-contained parser insetup.py. (#11213) - Reverted the session-scoped SQL engine pool in the expectation test suite because it broke test schema cleanup. (#11224)
- Updated pre-commit hooks, bumping ruff-pre-commit to v0.11.12. (#11218)
- Added a session-scoped SQL engine pool to the expectation tests (subsequently reverted in this release). (#11219)
- Improved the
ExpectQueryResultsToMatchComparisondocstring so parameter names and descriptions read consistently. (#11221) - Updated the diagnostic renderer labels shown for
ExpectQueryResultsToMatchComparison. (#11216) - Added a warning filter to the test configuration to quiet expected warnings. (#11217)
Contributors
Thanks to @VolkovGeoPhy.
1.4.6 (2025-05-28)
Highlights
-
Clearer errors for unhashable column types in ExpectQueryResultsToMatchComparison — When a query returns unhashable data types such as JSONB, ExpectQueryResultsToMatchComparison now raises a helpful error that names the first column containing unhashable data instead of failing with an unclear message. (#11193)
-
Case-insensitive column type checks on Databricks, Snowflake, and Postgres — expect_column_values_to_be_of_type now treats unquoted identifiers in column_name and column_type as case-insensitive on Databricks, Postgres, and Snowflake, so type expectations pass regardless of the casing you write. (#11192)
suite.add_expectation(
gxe.ExpectColumnValuesToBeOfType(column="my_column", type_="varchar")
) -
Documentation for anomaly detection — The documentation now covers anomaly detection, alongside refreshed wording for the terms "Core" and "platform" and updated guidance noting that both tables and views are supported as data assets. (#11172, #11187, #11198, #11205)
Changes
Bug fixes
- UUID values are now handled correctly when rendering expectation content. (#11204)
- Rendering of ExpectQueryResultsToMatchComparison now handles cases where results contain sets. (#11203)
- expect_column_values_to_be_of_type now treats unquoted column names and column types as case-insensitive on Databricks, Postgres, and Snowflake. (#11192)
- ExpectQueryResultsToMatchComparison now raises a clear error naming the first column with unhashable data (for example JSONB) instead of failing unhelpfully. (#11193)
Docs
- Revised how the term "Core" is used in relation to GX Cloud throughout the documentation. (#11205)
- Data Source connection and Expectation docs now state that views are supported in addition to tables. (#11198)
- Refined how the term "platform" is used across the documentation. (#11187)
- Added documentation covering anomaly detection. (#11172)
Maintenance
- Snowflake tests now run only when the Snowflake flag is enabled, so local test runs no longer hit external backends by default. (#10605)
- Updated the parameter descriptions for the multi-source comparison parameter. (#11202)
- Suppressed a newly surfaced pkg_resources deprecation warning. (#11201)
- Restricted the supported pyspark range to >=2.3.2,<4.0, since pyspark 4.0 introduces incompatible type changes. (#11197)
- GX Cloud logs are now surfaced when cloud tests fail. (#11188)
- Added a CloudAMQP connection string environment variable to the CI configuration. (#11190)
1.4.5 (2025-05-22)
Highlights
-
Redshift GEOMETRY and SUPER column types supported — Redshift data sources now recognize the GEOMETRY and SUPER column types, so assets using those columns can be used without an unsupported-type error. (#11183)
-
ExpectAI documentation now covers all Data Sources — The ExpectAI documentation has been reorganized so it applies to every supported Data Source rather than a subset. (#11178)
-
Fewer secret-store lookups when resolving config secrets — Secret substitution now reuses a cached secrets store client instead of rebuilding it on every lookup, avoiding repeated calls to the secrets backend when loading configuration. (#11184)
Changes
Features
- Redshift data sources now support the GEOMETRY and SUPER column types. (#11183)
Bug fixes
- Secret lookups now reuse the existing cached secrets store client rather than recreating it for each substitution. (#11184)
Docs
- Updated the ExpectAI documentation to cover all Data Sources. (#11178)
Maintenance
- When a multi-source query comparison produces exactly one differing record in a single column, the validation result now renders the observed and expected values as plain single values instead of a table. (#11186)
- Renamed the multi-source Expectation to ExpectQueryResultsToMatchComparison and renamed its parameters to base_query, comparison_data_source_name, and comparison_query. (#11185)
- Updated the Posthog analytics events emitted by the library. (#11179)
- Upgraded the ruff linter to 0.11.8 and applied the resulting code cleanups. (#11182)
- Test runs no longer fail on Snowflake SSL connection warnings. (#11180)
- Updated pre-commit hooks, bumping ruff-pre-commit from v0.9.9 to v0.11.8. (#10480)
- Fixed the setup of the nightly data source cleanup CI action. (#11176)
Contributors
Thanks to @VolkovGeoPhy.
1.4.4 (2025-05-14)
Highlights
-
New Expectation: ExpectQueryResultsToMatchSource — You can now compare the results of a SQL query run against your Data Source with the results of a query run against another Data Source, and require that at least a
mostlyfraction of records match. Supported on PostgreSQL, Snowflake, Databricks (SQL), Redshift, and SQLite. (#11144)import great_expectations as gx
expectation = gx.expectations.ExpectQueryResultsToMatchSource(
target_query="SELECT id, amount FROM orders",
source_data_source_name="my_source_data_source",
source_query="SELECT id, amount FROM orders",
mostly=0.95,
) -
Richer results and rendering for ExpectQueryResultsToMatchSource — Validation results for ExpectQueryResultsToMatchSource now report the specific rows missing from or unexpected in the target query results, and those differences are presented as a diagnostic table — with a simplified presentation when the source and target queries each return a single column. The Expectation also renders a readable summary showing the target query and the source Data Source it is compared against. (#11161, #11168, #11173, #11160)
Changes
Features
- ExpectQueryResultsToMatchSource results now use a simplified diagnostic rendering when the target and source queries each return a single column. (#11173)
- ExpectQueryResultsToMatchSource validation results are now displayed as a diagnostic table of differences between the target and source query results. (#11168)
- ExpectQueryResultsToMatchSource now computes and reports the rows missing from and unexpected in the target query results. (#11161)
- Added the ExpectQueryResultsToMatchSource Expectation, which compares the results of a SQL query against the results of a query on another Data Source and passes when at least a
mostlyfraction of records match. (#11144)
Docs
- Updated the Ruff badge in the README to point at the current astral-sh/ruff endpoint. (#10905)
- Temporarily removed the documentation link checker as a workaround for a known issue. (#11162)
- Updated the ExpectAI documentation to reflect current email alert behavior. (#11154)
Maintenance
- Updated the data quality issue category reported for ExpectQueryResultsToMatchSource. (#11174)
- Bumped @babel/helpers from 7.26.9 to 7.27.0 in the documentation site. (#11123)
- Updated the data quality issue metadata for ExpectQueryResultsToMatchSource. (#11164)
- Fixed a flaky test caused by floating-point comparison and simplified a related assertion to use pytest.approx. (#11163)
- CI now ensures a recent Docker Compose version to avoid a race condition when pulling many images concurrently. (#11156)
- Bumped @babel/runtime from 7.26.9 to 7.27.0 in the documentation site. (#11124)
- Bumped estree-util-value-to-estree from 3.3.2 to 3.3.3 in the documentation site. (#11121)
- Bumped http-proxy-middleware from 2.0.7 to 2.0.9 in the documentation site. (#11120)
- ExpectQueryResultsToMatchSource now renders a prescriptive summary showing the target SQL query and the source Data Source it is compared against. (#11160)
- Removed deprecated datetime.utcnow() and utcfromtimestamp() usage so no datetime deprecation warnings are emitted on Python 3.12+. (#11134)
- Bumped image-size from 1.2.0 to 1.2.1 in the documentation site, picking up a denial-of-service fix. (#11125)
- Cleaned up the nightly Redshift test setup. (#11166)
- Clarified the ExpectQueryResultsToMatchSource documentation to note that column names do not matter but column order does. (#11158)
- Restored Redshift credentials needed by the documentation tests in CI. (#11169)
- Split the Redshift tests into their own CI job. (#11167)
- Bumped prismjs from 1.29.0 to 1.30.0 in the documentation site. (#11126)
- Repaired the failing MSSQL compatibility test runs. (#11153)
- Bumped @babel/runtime-corejs3 from 7.26.9 to 7.27.0 in the documentation site. (#11122)
Contributors
Thanks to @esadek (first contribution), @emmanuel-ferdman (first contribution).
1.4.3 (2025-05-07)
Highlights
-
Redshift data source support in the public API — Redshift data sources are now exposed through the public API decorator, and new documentation walks through connecting Great Expectations Cloud to Redshift. (#11097, #11095)
-
QueryDataSourceTable metric and provider — A new QueryDataSourceTable metric and its provider are available, enabling queries against a data source table as part of metric computation. (#11149)
-
ExpectAI approval workflow documentation — The Cloud documentation now describes the ExpectAI approval workflow for generating and approving Expectations. (#11072)
Changes
Features
- Added a QueryDataSourceTable metric and accompanying metric provider. (#11149)
- Added test infrastructure to support source-to-target Expectations. (#11138)
- Added the Redshift data source to the public API surface. (#11097)
Docs
- Re-enabled the documentation broken-link checker now that the new Redshift pages are published. (#11135)
- Documented the ExpectAI approval workflow for generating Expectations in Great Expectations Cloud. (#11072)
- Added documentation for connecting to Redshift. (#11095)
- Hid the table of contents on documentation pages where nested headers inside tabbed content made it unhelpful. (#11130)
- Updated the Try GX Core code sample so it prints the validation results the surrounding text says you will see. (#11129)
Maintenance
- Removed the temporary gx-sqlalchemy-redshift version pin for Python 3.9, restoring the unpinned requirement. (#11151)
- Removed the obsolete test_expectations_v3_api.py test module. (#11098)
- Removed slow test cases that duplicated coverage of quoted identifiers in column names, substantially shortening Databricks test runs. (#11152)
- Restored the documentation broken-link checker in CI. (#11146)
- Added a SupportedDataSources enum and updated Expectation references and schemas to use it. (#11143)
- Capitalized "Expectation" in the
mostlyparameter description shown in Expectation docstrings and schemas. (#11147) - Temporarily disabled the documentation broken-link checker in CI while a link issue was resolved. (#11145)
- Temporarily pinned gx-sqlalchemy-redshift for Python 3.9. (#11142)
1.4.2 (2025-04-24)
Highlights
-
Redshift connection strings can be supplied as a dictionary — When adding a Redshift datasource,
connection_stringmay now be given as a dictionary of connection components in addition to a string URL. (#11119)import great_expectations as gx
context = gx.get_context()
datasource = context.data_sources.add_redshift(
name="my_redshift",
connection_string={
"drivername": "redshift+psycopg2",
"username": "my_user",
"password": "my_password",
"host": "my-cluster.redshift.amazonaws.com",
"port": 5439,
"database": "my_database",
},
) -
Expectation coverage for Redshift assets — Expectations running against Redshift assets are now verified to the same level as Postgres, so Redshift users can rely on the same set of expectations behaving as documented. (#11128)
-
More type information shipped with the package — The published distribution now exposes more of the library's type information, so type checkers resolve Great Expectations types in your own code more completely. (#11115)
Changes
Features
- Expectations against Redshift assets are now covered to parity with Postgres. (#11128)
- Redshift datasources now accept a
connection_stringprovided as a dictionary in addition to a string. (#11119)
Maintenance
Batch.compute_metrics()is now typed to includeMetricErrorResult, and metric error types were simplified and consolidated. (#11127)- More type information is now exported in the published PyPI distribution. (#11115)
- Added docstrings for metrics and corrected metric import paths. (#11118)
- Updated the list of core developers credited in the project. (#11117)
1.4.1 (2025-04-21)
Highlights
-
New
ColumnDescriptiveStatsmetric — You can now compute a column's minimum, maximum, mean, and standard deviation in a single metric withColumnDescriptiveStats, available on the pandas, SQL, and Spark backends. (#11108, #11109)from great_expectations.metrics import ColumnDescriptiveStats
result = batch.compute_metrics(ColumnDescriptiveStats(column="passenger_count"))
print(result.value.min, result.value.max, result.value.mean, result.value.standard_deviation) -
New
ColumnValuesNotMatchRegexCountmetric — You can now count the values in a column that do not match a regular expression withColumnValuesNotMatchRegexCount, available on the pandas, SQL, and Spark backends. (#11103)from great_expectations.metrics import ColumnValuesNotMatchRegexCount
result = batch.compute_metrics(
ColumnValuesNotMatchRegexCount(column="vendor_id", regex="^(a|d).+")
)
print(result.value) -
Connect to Redshift with connection details — A Redshift data source can now be configured by supplying individual connection details instead of a full connection string. (#11105)
-
Redshift schema introspection no longer raises a TypeError — Using the
gx-redshiftextra to introspect schema information, such as computing column descriptive metrics, no longer fails with a runtimeTypeError. (#11112)
Changes
Features
- Added the
ColumnDescriptiveStatsmetric, which returns a column's minimum, maximum, mean, and standard deviation on pandas, SQL, and Spark backends. (#11108) - Redshift data sources can now be configured with individual connection details in addition to a
connection_string. (#11105) - Added the
ColumnValuesNotMatchRegexCountmetric, which counts column values that do not match a given regular expression on pandas, SQL, and Spark backends. (#11103)
Bug fixes
- Fixed a runtime
TypeErrorwhen using thegx-redshiftextra to perform schema introspection, such as computing column descriptive metrics. (#11112) ExpectColumnValuesToBeBetweennow correctly rejects configurations where bothmin_valueandmax_valueare omitted,None, or empty strings. (#11102)- Fixed
MicrosoftTeamsNotificationActionfailing with a 400 Bad Request when sending notifications. (#11106)
Docs
- Temporarily disabled documentation link checking while an upstream issue is resolved. (#11099)
Maintenance
Contributors
Thanks to @jwalant-dattani (first contribution).
1.4.0 (2025-04-15)
Compatibility: new extra gx-redshift
Highlights
-
Redshift support via a new
gx-redshiftextra — Great Expectations can now be installed with Redshift support through a dedicated extra, and Redshift is listed among the supported data sources for the expectations that run against it. (#11092, #11084, #11094)pip install 'great_expectations[gx-redshift]' -
SQLAlchemy 2.x support for BigQuery — The BigQuery extra now works with SQLAlchemy 2.x as well as 1.x, so you can install great_expectations[bigquery] in a SQLAlchemy 2.x environment. (#11059)
pip install 'great_expectations[bigquery]' -
New column metrics for sampling and regex counts — You can compute a sample of values from a column and a count of values matching a regular expression directly from a batch. (#11083, #11091)
from great_expectations.metrics.column.column_values_match_regex_count import (
ColumnValuesMatchRegexCount,
)
metric = ColumnValuesMatchRegexCount(column="my_column", regex="ab")
result = batch.compute_metrics(metric) -
Sets and tuples accepted for
value_set— Expectations such as ExpectColumnValuesToBeInSet now accept sets and tuples forvalue_setinstead of failing validation; these inputs are coerced to lists automatically. (#11082)from great_expectations.expectations import ExpectColumnValuesToBeInSet
expectation = ExpectColumnValuesToBeInSet(
column="country_name_en",
value_set={"UNITED STATES", "CHINA", "SPAIN"},
) -
get_contexthonorscontext_root_dir— Requesting a file-backed Data Context with an explicit root directory now creates and loads the context in that directory. (#11078)import great_expectations as gx
context = gx.get_context(mode="file", context_root_dir="/path/to/my/project")
Changes
Features
- Add a ColumnValuesMatchRegexCount metric that reports how many column values match a given regular expression, available on Pandas, SQL, and Spark batches. (#11091)
- Add a
gx-redshiftinstall extra so Redshift dependencies can be installed withpip install 'great_expectations[gx-redshift]'. (#11092) - List Redshift among the supported data sources for the expectations that are verified against Redshift. (#11084)
- Add a ColumnSampleValues metric for retrieving a sample of values from a column. (#11083)
- The BigQuery extra now supports SQLAlchemy 2.x as well as 1.x, requiring sqlalchemy-bigquery 1.11.0 or newer. (#11059)
Bug fixes
- Expectations that take a
value_set, such as ExpectColumnValuesToBeInSet, no longer fail validation when given a set or tuple; such inputs are coerced to a list (strings and bytes excluded). (#11082) get_contextnow respectscontext_root_dirwhen scaffolding and reloading a file-backed Data Context, and the overload acceptsmode="file"together withcontext_root_dir. (#11078)
Docs
- Correct the outdated default Great Expectations directory named in a docstring. (#11077)
- Update the scheduling instructions to match the current user interface. (#11080)
Maintenance
- Run the gx-sqlalchemy-redshift test suite in continuous integration. (#11094)
- Add a ColumnValuesNotMatchRegexValues metric that returns a sample of column values that do not match a given regular expression. (#11096)
- Add a ColumnValuesMatchRegexValues metric that returns a sample of column values matching a regular expression, rather than a pass/fail column map result. (#11088)
- Narrow the return type of
compute_metricswhen called with a single metric, so the result type is known without extra casting. (#11089) - Add a ColumnDistinctValues metric that returns the distinct values found in a column. (#11081)
- Improve PostHog pageview tracking on the documentation site by disabling automatic capture and tracking single-page navigation instead, removing duplicate pageviews. (#11087)
- Revert the earlier gx-redshift extra, which pointed at a direct GitHub dependency and blocked uploading the release to PyPI. (#11079)
- Add a ColumnNullCount metric that reports the number of null values in a column. (#11073)
- Add a ColumnDistinctValuesCount metric that reports the number of distinct values in a column. (#11075)
- Add a SampleValues metric for retrieving a sample of values from a batch. (#11071)
1.3.14 (2025-04-08)
Compatibility: sqlalchemy minimum set to 1.4.0 (extra bigquery); sqlalchemy minimum set to 1.4.0 (extra gcp)
Highlights
-
New
gx-redshiftextra for Redshift users — Great Expectations can now be installed with a dedicated Redshift extra,pip install great_expectations[gx-redshift], which pulls in a Redshift driver compatible with newer SQLAlchemy versions. Note that installing bothredshiftandgx-redshifttogether will fail to resolve, because their SQLAlchemy requirements do not overlap. (#11063)pip install great_expectations[gx-redshift] -
ExpectColumnValuesToBeOfTypecorrected and SQLAlchemy 2 compatible —ExpectColumnValuesToBeOfTypenow reports the correct result and works against SQLAlchemy 2 backends. (#11062)import great_expectations as gx
suite.add_expectation(
gx.expectations.ExpectColumnValuesToBeOfType(column="passenger_count", type_="INTEGER")
) -
Cleaner autocompletion for the top-level
gxnamespace — Importinggreat_expectations as gxno longer suggests the recursivegx.great_expectationsattribute in IDE autocompletion, so the public API is easier to navigate. Accessinggx.great_expectationsnow raises anAttributeError, whilegx.get_context,gx.data_context,gx.core,gx.ExpectationSuiteand the rest of the intended public API remain available. (#11070)import great_expectations as gx
context = gx.get_context() # still available; gx.great_expectations is not
Changes
Features
- Added a
gx-redshiftextra so Redshift support can be installed withpip install great_expectations[gx-redshift]; installing it alongside the olderredshiftextra will fail to resolve due to non-overlapping SQLAlchemy requirements. (#11063) - Fixed
ExpectColumnValuesToBeOfTypeand made it work with SQLAlchemy 2. (#11062)
Bug fixes
- Row conditions containing 8-bit characters such as é, ü and ï are now confirmed to parse correctly, covered by a new test. (#11053)
Maintenance
- Added a
BatchColumnTypesmetric for reporting the column types of a batch. (#11069) - Importing
great_expectations as gxno longer exposes a recursivegx.great_expectationsattribute, improving IDE autocompletion; accessing it now raises anAttributeErrorwhile the rest of the public API is unchanged. (#11070) - Documentation site analytics now use the PostHog Docusaurus plugin to capture default pageviews and events. (#11060)
1.3.13 (2025-04-03)
Highlights
- Amazon Redshift data source support — You can now connect to Amazon Redshift with a dedicated Redshift data source, alongside the existing SQL data sources. (#11011)
Changes
Features
- Added an initial Amazon Redshift datasource so you can connect Great Expectations directly to Redshift. (#11011)
Bug fixes
- Prevented SQLite-specific metric implementations from overriding the default SQLAlchemy implementations, so metrics resolve correctly on other SQL backends. This issue was never present in a published release. (#11055)
Docs
- Updated the coverage health screenshot in the documentation. (#11057)
- Follow-up corrections to the completeness change detection documentation. (#11056)
- Added documentation for completeness change detection. (#11039)
- Expanded the test coverage metrics documentation with a reference table. (#11046)
- Clarified which roles can create Data Sources and updated the metrics page to reflect the removal of the asset info card. (#11052)
- Documented that ExpectAI supports only Snowflake Data Sources using password authentication; key-pair authentication is not yet available. (#11047)
Maintenance
- Internal metric registry now resolves metric providers through a single internal lookup path; no user-facing change. (#11044)
1.3.12 (2025-03-26)
Changes
Docs
- Corrected the documentation for ExpectColumnKLDivergenceToBeLessThan so its Expectation Gallery entry shows the details already present in the codebase. (#11040)
Maintenance
1.3.11 (2025-03-19)
Highlights
-
Run checkpoints that use Cloud windowed expectations — Checkpoints can now be run against suites containing GX Cloud windowed expectations, so validations whose thresholds are derived from a window of past results execute as expected. (#11027)
import great_expectations as gx
context = gx.get_context(mode="cloud")
checkpoint = context.checkpoints.get("my_checkpoint")
result = checkpoint.run() -
Distinct values expectations handle dates and datetimes correctly — Expectations that compare a column's distinct values against a value set now compare correctly when the data holds dates or datetimes but the expectation was configured with string values. Both the validation result and the observed value shown in rendered diagnostic output now report matching values as expected instead of flagging them as unexpected. (#11030, #11033)
import datetime
import great_expectations as gx
expectation = gx.expectations.ExpectColumnDistinctValuesToBeInSet(
column="col A",
value_set=[str(datetime.date(2024, 11, 19)), str(datetime.date(2024, 11, 20))],
)
Changes
Features
- Checkpoints can now be run with GX Cloud windowed expectations. (#11027)
Bug fixes
- ExpectColumnDistinctValuesToContainSet, ExpectColumnDistinctValuesToBeInSet, and ExpectColumnValuesToBeInSet now validate correctly when the column holds dates or datetimes and the value set is given as strings. (#11030)
Docs
- Corrected an error in the filesystem data source documentation that led to a regex compile error when adding a batch definition path. (#11019)
- Expectations previously listed under both Numeric and Validity are now documented under Validity only. (#11008)
- Restored the documentation link checker after a temporary workaround. (#11025)
Maintenance
- Rendered diagnostic observed values for distinct-values expectations now compare dates and datetimes correctly when the configured value set was stored as strings, so matching values are no longer shown as unexpected. (#11033)
- Test suites now point at AWS buckets in the open-source account. (#11034)
- Added AWS credentials to the continuous integration configuration. (#11037)
- Reverted the continuous integration change that switched AWS credential secrets, restoring the previous secret variable names. (#11036)
- Updated the AWS secret variable names used by continuous integration (later reverted in this same release). (#11035)
- Removed the timber entry from CODEOWNERS. (#10996)
- Updated the continuous integration workflow so pull request targets are treated as pull-request-event targets. (#11031)
- The context mode is now included in the properties sent with analytics events. (#11001)
- Removed the default role applied when connecting to Snowflake. (#11004)
1.3.10 (2025-03-12)
Highlights
-
Docs reference cards render correctly — The cards at the top of the docs reference page no longer show stray characters, and the documentation site now builds on the latest Docusaurus with upgraded transitive dependencies that resolve reported vulnerabilities. (#11009)
-
Outdated walkthrough modal removed from Data Docs — Data Docs no longer opens a walkthrough modal that pointed to the deprecated CLI and workflows that are no longer recommended. (#11022)
Changes
Docs
- Added documentation covering test coverage metrics. (#11002)
- Applied the new beta badge styling to an additional documentation header. (#11015)
Maintenance
- Raised the MySQL max_connections setting used by the test environment so more MySQL-backed tests can run. (#11023)
- Removed the outdated walkthrough modal from Data Docs, which referenced the deprecated CLI and workflows that are no longer recommended. (#11022)
- Simplified CI failure notifications so skipped jobs no longer trigger alerts. (#11021)
- Upgraded documentation site dependencies to the latest Docusaurus, removed the unused local search plugin, and fixed stray characters rendered in the cards on the docs reference page. (#11009)
- Removed the Numeric data quality issue tag from validity expectations, which are now categorized under Validity only. (#11005)
- Removed redundant tests that are already covered by dedicated test files. (#11007)
- Refactored a number of tests to share a common data context fixture. (#10997)
1.3.9 (2025-03-05)
Compatibility: pandas-gbq added (extra bigquery); pandas-gbq added (extra gcp)
Highlights
-
Clearer error when checking value ranges on non-numeric columns — Running ExpectColumnValuesToBeBetween against a column whose underlying type is not numeric or datetime (for example a SQL VARCHAR column) now raises an explicit, actionable Great Expectations error instead of an opaque database exception that could also cause every other expectation in the same run to fail. (#10995)
-
New metrics: query row count, column-pair, and multi-column — The metrics API gains QueryRowCount, ColumnPairValuesInSetUnexpectedCount, and MultiColumnSumEqualUnexpectedCount, extending the typed metrics you can compute directly against a batch. (#10964, #10969, #10973)
from great_expectations.metrics import QueryRowCount
metric = QueryRowCount(query="SELECT * FROM my_table WHERE passenger_count > 2")
result = batch.compute_metrics(metric) -
More reliable batch.compute_metrics results — batch.compute_metrics no longer drops results when two metrics share a name, computes distinct configuration IDs per batch, and always returns a list of results when a list of metrics is passed — so the number of results always matches the number of metrics requested. (#10979)
-
Cleaner Slack notification messages — Slack validation notifications no longer repeat the link text, highlight the asset and expectation suite names in Markdown for easier scanning, and once again include a summary of how many expectations passed out of the total. (#10890)
Changes
Features
- Added the first multi-column metric, MultiColumnSumEqualUnexpectedCount, along with multi-column metric support including column_list, row_condition, condition_parser, and ignore_row_if options. (#10973)
- Added the first column-pair metric, ColumnPairValuesInSetUnexpectedCount, with test coverage. (#10969)
- Added a QueryRowCount metric for computing the number of rows returned by a query. (#10964)
- Removed the batch_id parameter from Metric classes, so metrics are defined without specifying a batch. (#10971)
Bug fixes
- ExpectColumnValuesToBeBetween now raises a clear error when run against a column whose type is not numeric or datetime, instead of surfacing an opaque database exception. (#10995)
- Batch definitions returned by Asset.get_batch_definition now always include their ID. (#10986)
- Fixed batch.compute_metrics so identically named metrics no longer overwrite each other, configuration IDs differ per batch, and passing a list of metrics always returns a list of results of matching length. (#10979)
- ValidationDefinition add_or_update can now update a batch definition that belongs to a different data source instead of failing unexpectedly. (#10960)
Docs
- API reference code blocks now place each method parameter on its own line for easier reading. (#10985)
- Updated the documentation site search key to fix broken search. (#10994)
- Custom action documentation now shows how to define a user-defined field on an action so runtime values can be passed through to custom run logic. (#10987)
- Added documentation covering volume change detection. (#10927)
- Temporarily disabled the documentation link checker while a known issue is resolved. (#10992)
- Fixed the formatting of the parameters for the ValidationDefinition run method in the API reference. (#10981)
- Added a README to the docs scripts folder explaining how to run the API reference link-versioning script. (#10982)
- Documentation pages can now show a beta badge on a section, visible both in the heading and the table of contents. (#10980)
- Added a script that rewrites API reference links with an explicit docs version after a new documentation version is cut, so archived links no longer break. (#10976)
- API reference pages now show a heading above each method's code block. (#10970)
- Made the Airflow provider easier to discover in the documentation. (#10967)
Maintenance
- Removed duplicated metric configuration information from metric error results. (#10989)
- Upgraded ruff from 0.7.2 to 0.9.9. (#10990)
- Added an analytics event for validation definition runs and a mode field on all analytics events distinguishing ephemeral, file, and cloud usage. (#10984)
- Removed the unused table domain key from ExpectTableColumnsToMatchOrderedList. (#10983)
- Changed which GitHub Actions event name is excluded from marker tests in CI. (#10991)
- Upgraded mypy to 1.15.0. (#10988)
- Slack validation notifications drop the duplicated link text, highlight the asset and expectation suite names, and include a summary of expectations met out of the total. (#10890)
- Removed the unused PEP 273 compatibility CI workflow. (#10975)
- Replaced the Domain mixin in the metrics API with dedicated Metric subclasses. (#10966)
Contributors
Thanks to @data-han (first contribution).
1.3.8 (2025-02-26)
Highlights
-
Compute metrics directly from a Batch — Batches now expose a
compute_metrics()method, so you can request one or more metrics for a batch and get back typed results without assembling a validation run. (#10950)batch = batch_definition.get_batch()
results = batch.compute_metrics([ColumnMean(column="passenger_count")]) -
New metrics: column mean and non-null counts — The metrics API now includes a mean metric along with
ColumnValuesNonNullandColumnValuesNonNullCount, so you can measure column averages and how many values in a column are populated. (#10961, #10959)batch.compute_metrics([ColumnValuesNonNullCount(column="passenger_count")]) -
API reference arguments, returns, and raises now render as tables — API reference pages present a method's arguments, return values, and raised exceptions in readable tables, and every argument and raised exception is listed instead of only the first one. (#10910, #10968)
Changes
Features
- Added a mean metric to the metrics API, so column averages can be requested directly. (#10961)
- Added
ColumnValuesNonNullandColumnValuesNonNullCountmetrics for inspecting which column values are populated and how many there are. (#10959) - Added
Batch.compute_metrics()for requesting metrics from a batch, with typed metric results. (#10950)
Docs
- API reference pages now list every entry under Args and Raises instead of showing only a single row, so documented arguments and exceptions are no longer lost. (#10968)
- Fixed a typo in the documentation. (#10965)
- API reference pages now display arguments, returns, and raises as tables instead of plain bulleted text. (#10910)
- Added a single sign-on call to action to the Cloud user management documentation. (#10872)
Maintenance
Contributors
Thanks to @VolkovGeoPhy (first contribution).
1.3.7 (2025-02-19)
Compatibility: jinja2 minimum 2.10 → 3
Highlights
-
New batch-level row count metric — A new
BatchRowCountmetric computes the number of rows in a batch and works against pandas, Spark, and SQL (Postgres) data sources. Its result is returned as a typedBatchRowCountResult, alongside a newBatchmetric domain for metrics that compute over an entire batch. (#10944)from great_expectations.metrics.batch.batch import BatchRowCount
metric = BatchRowCount(batch_id=batch.id) -
Quieter metric resolution — Batch and column-map expectations no longer carry an unused
tabledomain key, so resolving metrics no longer emits a flood of unnecessary log messages. (#10951)
Changes
Features
- Added the
BatchRowCountmetric and itsBatchRowCountResult, plus aBatchmetric domain, for computing row counts over an entire batch on pandas, Spark, and SQL data sources. (#10944)
Bug fixes
- Removed the unused
tabledomain key from batch and column-map expectations, eliminating the noisy log messages it produced during metric resolution. (#10951)
Docs
- Documentation search configuration now uses environment variables in place of hardcoded search keys. (#10940)
Maintenance
- Metric classes now require an explicit
namerather than having one inferred from the class and domain names, making metric naming predictable. (#10953) - Dropped support for jinja2 2.x; great_expectations now requires jinja2 3 or newer. (#10941)
Metric.configcan no longer be instantiated directly and is hidden from editor auto-complete. (#10938)
1.3.6 (2025-02-14)
Highlights
-
ExpectTableRowCountToBeBetween works again with runtime parameters — Creating or running ExpectTableRowCountToBeBetween with
min_valueormax_valuesupplied as runtime parameters no longer fails validation. Values are only compared to each other when both are concrete; a parameter dictionary is instead checked for a$PARAMETERkey. (#10925)gxe.ExpectTableRowCountToBeBetween(
min_value={"$PARAMETER": "min_rows"},
max_value={"$PARAMETER": "max_rows"},
) -
Snowflake connections accept passwords with special characters — Passwords are now URL-quoted before the Snowflake connection URL is built, so credentials containing special characters connect successfully. (#10919)
-
Unexpected rows queries tolerate trailing whitespace and semicolons — An unexpected rows query that ends with trailing whitespace or a
;is now trimmed and accepted instead of being rejected. (#10923)gxe.UnexpectedRowsExpectation(
unexpected_rows_query="SELECT * FROM {batch} WHERE passenger_count > 6;"
) -
Clear error when cloud mode is requested without credentials — Requesting a cloud context without the required environment variables now produces the intended, explicit error message instead of an opaque message about the Data Context being
None. (#10916)import great_expectations as gx
context = gx.get_context(mode="cloud") -
Documentation for AI-recommended Expectations — The GX Cloud documentation now covers AI-recommended Expectations. (#10913)
Changes
Bug fixes
- ExpectTableRowCountToBeBetween can again be created and run when
min_valueormax_valueis supplied as a runtime parameter; the min/max comparison is only applied when both values are concrete, and parameter dictionaries are validated for a$PARAMETERkey. (#10925) - Fixed an incorrect import in the diagnostic checklist test that pulled from the test package. (#10934)
- Metric configuration identifiers are now immutable, preventing identifiers from changing partway through metric computation. (#10929)
- Unexpected rows queries with trailing whitespace or a trailing
;are now trimmed and accepted. (#10923) - Snowflake passwords are URL-quoted when building the connection URL, so passwords containing special characters no longer prevent connecting. (#10919)
Docs
- Restored a missing test mock for the documentation site's location hook so the "Was this helpful?" component renders and tests pass again. (#10939)
- Removed in-page subsection entries from the documentation sidebar so the correct page is highlighted when selected; the right-hand table of contents continues to provide in-page navigation. (#10903)
- Documentation feedback submissions now create tickets that remain in "Intake" status instead of moving to "To-do". (#10933)
- Moved code examples out of parameter descriptions in the checkpoint action API reference, so email and Slack notification action docs render with correct formatting. (#10918)
- Added documentation for AI-recommended Expectations. (#10913)
- Fixed
*being rendered as an escaped HTML entity in API reference code blocks. (#10915)
Maintenance
- Introduced a general set of metric result types covering the majority of commonly requested metrics. (#10932)
- Removed documentation snippet files that were no longer referenced by any docs page. (#10937)
- Added
MetricandDomainbase classes for defining and instantiating metrics, such asColumnValuesBetweenfromgreat_expectations.metrics. (#10920) - Removed the concurrency block from the GitHub CI workflow that was causing jobs to be cancelled. (#10930)
- Requesting a cloud context without the necessary environment variables now raises the intended, clear error instead of an opaque message; existing behavior for
cloud_modeand explicitmodeprecedence is unchanged. (#10916)
Contributors
Thanks to @eric-brady (first contribution).
1.3.5 (2025-02-03)
Changes
Docs
- Fixed documentation site search behavior. (#10907)
- Documentation admonitions (notes, tips, warnings) now display new icons. (#10899)
Maintenance
- Validation results produced by running a Validation Definition now consistently carry a run identifier. (#10909)
- The Window type now accepts a
strictsetting so it can be used with dynamic-parameter Expectations. (#10906) - BigQuery test resources are now cleaned up every three hours. (#10900)
- Expanded
row_conditiondatetime test coverage for Pandas and Spark, added Spark support forcolumn_typesand Pandas/Spark I/O options in the Expectation testing framework, corrected handling of Spark partition filenames that contain but do not end in a file name, and documented how to run Spark tests locally. (#10892)
1.3.4 (2025-01-29)
Highlights
-
Datetime
row_conditionvalues no longer truncated to dates — Arow_conditionthat filters on a datetime column now compares the full timestamp instead of being truncated to a date, so expectations validated against Postgrestimestampcolumns filter the rows you asked for. (#10891) -
Clearer API reference pages — API reference pages now render method signatures as Python code blocks and class properties as tables, making them easier to scan. (#10882, #10880)
-
Migration guide available in the 0.18 docs — The 0.18 documentation now includes the migration guide, so users still on 0.18 can find upgrade instructions without leaving the versioned docs. (#10885)
Changes
Bug fixes
- Fixed
row_conditiondatetime values being truncated to dates against Postgrestimestampcolumns, and expanded date-type test coverage across backends. (#10891)
Docs
- Removed incorrectly versioned 0.18 copies of the docs home page and integration support policy page, and hid the version dropdown on the Integration support policy and Get support pages. (#10893)
- Documented dynamic parameters for completeness expectations in the expectation management docs. (#10873)
- API reference pages now display method signatures as Python code blocks. (#10882)
- API reference pages now display class properties as tables. (#10880)
- Restored the lychee link check for the documentation. (#10889)
- Added the migration guide to the 0.18 documentation. (#10885)
Maintenance
1.3.3 (2025-01-22)
Compatibility: databricks-sql-connector removed (extra databricks); databricks-sqlalchemy added (extra databricks)
Highlights
-
Expectations with identical attributes can now coexist in a Suite — Adding two Expectations of different types that happen to have identical attributes to the same Suite now works as expected — previously the second Expectation was silently not added. (#10884)
suite.add_expectation(gxe.ExpectColumnValuesToNotBeNull(column="passenger_count"))
suite.add_expectation(gxe.ExpectColumnValuesToBeUnique(column="passenger_count")) -
Validation result descriptions are JSON-serializable —
describe_dict()on suite and expectation validation results now returns a plain, JSON-serializable dictionary, so the output ofdescribe()can be passed straight tojson.dumpswithout errors. (#10863)result = batch.validate(suite)
print(json.dumps(result.describe_dict())) -
Databricks SQLAlchemy support via
databricks-sqlalchemy— Databricks connectivity now relies on thedatabricks-sqlalchemypackage instead ofdatabricks-sql-connector, which dropped SQLAlchemy support in its 4.0.0 release. Installing thedatabricksextra pulls in the new dependency. (#10886)
Changes
Bug fixes
- Expectations of different types with identical attributes can now both be added to the same Suite. (#10884)
describe_dict()on suite and expectation validation results now returns a JSON-serializable dictionary, sodescribe()output can be passed tojson.dumps. (#10863)
Docs
- Corrected and clarified the documentation on choosing a result format. (#10875)
- Updated the documentation about batch parameters and linked to the updated API docs. (#10877)
- API Reference pages now show titles for the properties and methods sections. (#10821)
Maintenance
- Databricks support now uses the
databricks-sqlalchemypackage instead ofdatabricks-sql-connector, which removed SQLAlchemy support in version 4.0.0. (#10886) - Reworked the batch test setup helpers so tests create their own assets instead of sharing one, avoiding duplicate batch definition names across tests. (#10864)
- Added a method for setting the analytics user agent string. (#10883)
- Analytics events and contexts now carry a user agent string, allowing callers such as GX operators to identify themselves. (#10869)
- The S3 store backend now correctly handles objects returned with
aws-chunkedcontent encoding. (#10861)
1.3.2 (2025-01-17)
Highlights
-
Strict bounds for table row count expectations —
ExpectTableRowCountToBeBetweennow acceptsstrict_minandstrict_max, so you can require the row count to be strictly greater than the minimum and strictly less than the maximum. (#10845)import great_expectations.expectations as gxe
expectation = gxe.ExpectTableRowCountToBeBetween(
min_value=10,
max_value=100,
strict_min=True,
strict_max=True,
) -
Add or update a Checkpoint in one call — The Checkpoint factory now offers
add_or_update, which creates a Checkpoint if it does not exist yet and replaces the stored configuration if it does. (#10856)checkpoint = context.checkpoints.add_or_update(checkpoint) -
Faster feedback on invalid Expectation arguments — Several Expectations now validate their input arguments when you create them, raising an error immediately instead of failing partway through validation. Multicolumn map Expectations also now require at least two entries in
column_list. (#10833, #10850)
Changes
Features
ExpectTableRowCountToBeBetweennow supports thestrict_minandstrict_maxparameters. (#10845)- Added
add_or_updateto the Checkpoint factory so a Checkpoint can be created or replaced in a single call. (#10856)
Bug fixes
- Several Expectations now validate their input arguments up front and raise an error immediately rather than failing during validation. (#10833)
- Expectations backed by pandas
Series.between()now handle all combinations of inclusive bounds correctly across supported pandas versions. (#10837) ExpectColumnUniqueValueCountToBeBetweennow honorsstrict_minandstrict_max, which were previously ignored. (#10835)
Docs
- Updated a documentation screenshot to reflect the current handling of observed values in the validation run history view. (#10867)
- Corrected the documented approach for defining a custom SQL Expectation in GX Cloud. (#10844)
- Added explicit anchor IDs to repeated headings in the documentation so that direct links to a section now land on the intended section. (#10846)
- Corrected typos and removed an outdated reference to suites in the GX Cloud UI from the data quality use case pages. (#10847)
- Documented how to request the GX Agent from within the GX Cloud app on the agent deployment page. (#10836)
- Updated the documented location of the "generate snippet" button in the Airflow connection instructions. (#10854)
- Consolidated the documentation about analytics and usage statistics into a single place. (#10853)
- Corrected the capitalization of admonition titles throughout the documentation. (#10813)
- Reorganized the Expectation selection documentation so Expectations are grouped by the data quality issue they address. (#10806)
Maintenance
- Multicolumn map Expectations now reject a
column_listwith fewer than two columns when the Expectation is created. (#10850) - Continuous integration now skips the slow quoted-identifier tests that were already expected to fail. (#10857)
- Unpinned
snowflake-sqlalchemy, excluding only the broken 1.7.0 release. (#10838) - Applied a temporary fix to get past a failing test schema cleanup step. (#10860)
- Microsoft SQL Server tests now run against the version 18 ODBC driver, with connection strings updated and consolidated accordingly. (#10868)
- Pinned
boto3to avoid a behavior change in a newer release. (#10862) - Removed an expected-to-fail Databricks test case for
ExpectColumnValuesToBeInTypeListfrom the test suite. (#10843) - Updated the
responsesversion pin to avoid a type-checking error in its latest release. (#10842) - The
invoke depsdevelopment task now accepts a--force-reinstallflag and has clearer help text. (#10834)
1.3.1 (2025-01-08)
Compatibility: posthog minimum 2.1.0 removed
Highlights
-
Suite parameters in the
mostlyfield — Column map expectations now accept a suite parameter formostly, so the threshold can be supplied at validation time instead of being fixed when the expectation is defined. (#10829)import great_expectations as gx
expectation = gx.expectations.ExpectColumnValuesToNotBeNull(
column="passenger_count",
mostly={"$PARAMETER": "my_mostly"},
)
result = batch.validate(expectation, expectation_parameters={"my_mostly": 0.9}) -
add_or_updatefor suites and validation definitions — You can now add a suite or a validation definition if it does not exist, or update it in place if it does, in a single call. (#10796, #10818)suite = context.suites.add_or_update(suite)
validation_definition = context.validation_definitions.add_or_update(validation_definition) -
Observed values render again for expectations with descriptions — Validation results in Data Docs and GX Cloud now show the observed value for an expectation that has a description, instead of rendering the description in its place. (#10826)
-
datetime.timevalues serialize to JSON — Values of typedatetime.timecan now be serialized, and are written out as ISO-format strings rather than raising a serialization error. (#10795)
Changes
Features
- Column map expectations accept a suite parameter for the
mostlyfield, so the threshold can be provided at validation time. (#10829) - Added
context.suites.add_or_update, which adds a suite or updates the existing one with the same name. (#10796)
Bug fixes
- An expectation's description no longer replaces the observed value in rendered validation results. (#10826)
datetime.timevalues are now serialized to JSON as ISO-format strings instead of failing. (#10795)
Docs
- Reworked the Learn data pipeline tutorial page to present it as a general guide to integrating GX into a data pipeline rather than an Airflow-specific tutorial. (#10828)
- Updated the list of other supported databases in the documentation. (#10812)
- Added the Common Room web tracking snippet to the documentation site. (#10805)
- Admonition titles in the documentation are no longer forced to uppercase. (#10800)
- Updated the buttons in the documentation home page banner. (#10804)
- Added an architecture decision record describing the docstring requirements for public API objects. (#10798)
- Replaced remaining references to
context.sourceswithcontext.data_sourcesacross the documentation, code comments, and error messages. (#10794) - Restored Lychee link checking for the documentation site. (#10797)
Maintenance
- Restored
context.validation_definitions.add_or_update, which adds a validation definition or updates the existing one. (#10818) - Improved logging in the BigQuery cleanup job and skipped the cleanup query when there are no stale schemas to remove. (#10824)
- Lowered a noisy SQLAlchemy-related log message from warning to debug when validating column-type expectations. (#10790)
- Suppressed Marshmallow V4 migration warnings. (#10825)
- Added a recent formatting-only commit to the git blame ignore list. (#10822)
- Added a lint check requiring an explanatory comment alongside
# type: ignoreand# noqa:suppressions, and annotated existing suppressions. (#10817) - Fixed the BigQuery test-resource cleanup script. (#10820)
- Installed the BigQuery requirements file when running the BigQuery cleanup script. (#10819)
- Added a check that every object marked as public API carries a docstring. (#10799)
- Added a nightly job that cleans up stray BigQuery schemas left behind by CI. (#10815)
- Updated the remaining expectations to reference the canonical data quality issue names. (#10807)
- Upgraded the
posthoganalytics dependency to version 3. (#10814)
1.3.0 (2024-12-19)
Highlights
-
Databricks column type expectations now evaluate correctly —
ExpectColumnValuesToBeInTypeandExpectColumnValuesToBeInTypeListnow translate Databricks column types correctly, so type checks against Databricks tables evaluate as expected instead of failing on unrecognized type names. (#10791, #10787)import great_expectations as gx
suite.add_expectation(
gx.expectations.ExpectColumnValuesToBeInTypeList(
column="passenger_count", type_list=["BIGINT", "INT"]
)
) -
table.column_typeresolves correctly on Snowflake and Postgres — Column type evaluation against Snowflake and Postgres now reports the correct type, so expectations that depend on column types produce accurate results on these backends. (#10776, #10793, #10786) -
UnexpectedRowsExpectationresults render in Data Docs —UnexpectedRowsExpectationnow renders a readable summary in Data Docs, including an observed value that is reported as an integer count for consistency with other expectations. (#10758, #10779, #10777) -
Expectation descriptions display correctly in Data Docs — Custom expectation descriptions now appear as proper table cells in Data Docs validation results rather than rendering as internal renderer keys, and descriptions supplied from GX Cloud are handled as well. (#10789, #10768)
-
Simpler imports for writing custom validation actions —
CheckpointResultandActionContextcan now be imported directly from the top-level checkpoint module, and theValidationActionbuilding blocks needed to write a custom action are documented as public API alongside a new guide. (#10788, #10752, #10772)from great_expectations.checkpoint import ActionContext, CheckpointResult
Deprecations
DataContext.add_or_update_datasourceis deprecated. Removal in 2.0.0. (#10784)
Changes
Bug fixes
- The
table.column_typemetric now evaluates correctly against Postgres. (#10793) ExpectColumnValuesToBeInTypeListandExpectColumnValuesToBeInTypenow translate column types correctly on Databricks. (#10791)- Expectation descriptions now render as proper cells in Data Docs validation result tables instead of exposing internal renderer keys. (#10789)
- The
table.column_typemetric now evaluates correctly against Snowflake. (#10776) - The observed value for
UnexpectedRowsExpectationis now reported as an integer, consistent with other expectations. (#10777) UnexpectedRowsExpectationnow renders a readable summary in Data Docs. (#10758)- Expectation descriptions supplied from GX Cloud are now handled when rendering results. (#10768)
Docs
ValidationActionand the related components needed to build a custom action are now documented as part of the public API. (#10752)- Added documentation on detecting schema changes in your data. (#10755)
- Added a guide for creating a custom action that runs based on validation results. (#10772)
- Removed an unnecessary escape character from an Expectation docstring so it renders correctly in the Expectation Gallery. (#10780)
- Fixed the underline styling of links on inline code in the documentation so they are easier to read. (#10783)
- Reorganized and updated the core documentation for setting up and using GX. (#10665)
- Removed a documentation tip that suggested printing
validation_results.result_url, which is not supported. (#10760) - Clarified the Connect GX Cloud landing page. (#10761)
Maintenance
- Added Databricks-specific type definitions so Databricks column types are recognized when evaluating expectations. (#10787)
- Cleaned up environment variables used by the cloud test suite. (#10792)
CheckpointResultandActionContextcan now be imported directly from the top-level checkpoint module, simplifying custom action code. (#10788)DataContext.add_or_update_datasourceis now marked as deprecated. (#10784)- Added EventBridge Scheduler service coverage to the cloud test suite. (#10774)
- The public API report tooling now verifies that referenced file paths exist. (#10754)
- Removed the stale
isortreferences from the developer task definitions now that linting is handled byruff. (#10782) - Removed the outdated GX Cloud onboarding script. (#10785)
- Added more test coverage for Snowflake column types. (#10786)
- Core Expectation docstrings and schemas now use a shared set of data quality issue names, with several typos corrected. (#10759)
- Removed the hand-rolled documentation link checker in favor of the existing Lychee-based check. (#10781)
- Added an observed value renderer for
UnexpectedRowsExpectation. (#10779) - Added a diagram explaining how the multi-datasource test setup works. (#10766)
- Cleaned up and refactored the code behind column type expectations with no change in behavior. (#10764)
- Reverted the continuous integration change that ran pull request workflows with elevated triggers and an actor permissions check; CI once again runs on standard pull request events, with credentialed jobs restricted to the main repository. (#10773)
- Continuous integration workflows were changed to run on pull request targets with an actor permissions check so that CI can run on pull requests from forks; this change was reverted later in this release. (#10467)
1.2.6 (2024-12-11)
Highlights
-
Define your own custom validation actions — You can now define custom actions and use them in Great Expectations validation workflows. Custom action classes are picked up automatically and serialize and deserialize correctly alongside built-in actions. (#10743)
from great_expectations.checkpoint.actions import ValidationAction
class MyCustomAction(ValidationAction):
type: str = "my_custom_action"
def run(self, checkpoint_result, action_context=None):
... -
Pattern-matching expectations no longer require optional SQL dependencies — LikePattern expectations now run in environments where the MySQL, MsSQL, or PostgreSQL SQLAlchemy libraries are not installed, instead of failing on a faulty attribute check. (#10745)
-
ExpectTableColumnsToMatchSet now defaults to exact matching — The exact_match parameter of ExpectTableColumnsToMatchSet now defaults to True, matching the behavior described in the Expectation Gallery documentation. (#10746)
import great_expectations.expectations as gxe
# exact_match now defaults to True
expectation = gxe.ExpectTableColumnsToMatchSet(column_set=["id", "name"])
Changes
Features
- You can now define your own custom validation actions; they are registered automatically and serialize and deserialize correctly. (#10743)
Bug fixes
- Fetching metrics for multiple data assets in a single call no longer returns metrics from a previously cached asset; the batch is now checked against the incoming batch request. (#10744)
- ExpectTableColumnsToMatchSet now defaults exact_match to True, matching its documented behavior. (#10746)
- LikePattern expectations now work in environments without the MySQL, MsSQL, or PostgreSQL SQLAlchemy libraries installed. (#10745)
Docs
- Documented key-pair authentication for connecting to Snowflake. (#10751)
- Updated the content of the documentation site banner. (#10747)
- Refreshed the Row Condition guidance, with consistent punctuation and corrected indentation in the examples. (#10736)
Maintenance
- Loosened a BigQuery test assertion so it tolerates BigQuery's updated error message wording. (#10750)
- Added an atomic diagnostic observed-value renderer for ExpectTableColumnsToMatchSet that highlights unexpected and missing columns whether or not the Expectation passed. (#10748)
- Test schemas are now created with a common prefix so they are easier to identify and clean up manually. (#10742)
- The expectation testing framework now allows developers to override the randomly generated table name when using SQL data sources. (#10724)
- Added integration test coverage for UnexpectedRowsExpectation, including JOIN queries against a second table and partitioned batches, across the supported SQL and Spark data sources. (#10733)
1.2.5 (2024-12-04)
Highlights
-
Observed-value rendering for value-set Expectations — Validation results for value-set Expectations — including expect_column_distinct_values_to_be_in_set, expect_column_distinct_values_to_contain_set, and expect_column_most_common_value_to_be_in_set — now render their observed values as atomic content, with each observed item marked as expected or unexpected so it is clear which values fell outside the configured set. (#10718, #10697)
result = batch.validate(gxe.ExpectColumnDistinctValuesToBeInSet(column="species", value_set=["setosa", "virginica"]))
rendered = result.render() -
Observed-value renderer for expect_table_columns_to_match_ordered_list — Validation results for expect_table_columns_to_match_ordered_list now include a rendered observed value, so the actual column list is displayed alongside the expected ordered list. (#10683)
-
The {batch} keyword works with partitioned batches across more backends — UnexpectedRowsExpectation queries that reference the {batch} keyword now resolve correctly when the batch comes from a partitioner, including queries that use JOIN clauses, where previously some SQL backends raised errors or produced invalid SQL. (#10721)
gxe.UnexpectedRowsExpectation(unexpected_rows_query="SELECT * FROM {batch} WHERE passenger_count > 7") -
Version check no longer fails on network errors — Great Expectations now handles connection failures while checking for a newer released version instead of surfacing an error to the user, so the library keeps working when there is no network access. (#10720)
Changes
Features
- Value-set Expectations now render their observed values as atomic content, marking each observed value as expected or unexpected relative to the configured value set. (#10718)
- Validation results for expect_table_columns_to_match_ordered_list now render the observed column list. (#10683)
Bug fixes
- UnexpectedRowsExpectation queries using the {batch} keyword now resolve correctly for partitioned batches on more SQL backends, including queries containing JOIN clauses. (#10721)
- Connection errors raised while checking for the latest released version of Great Expectations are now handled gracefully. (#10720)
Docs
- Corrected a typo in the documentation. (#10725)
- Fixed incorrect data types shown in the batch definition examples and removed an unused code snippet from the retrieve-a-batch-of-test-data docs. (#10723)
- Added a data quality article covering freshness. (#10612)
- Corrected the dependency listed in the Set Up a GX Environment documentation. (#10722)
- The documentation site announcement bar can no longer be dismissed. (#10719)
- Fixed a set of broken links throughout the documentation. (#10716)
- Restored the close button on the documentation site announcement bar, which was not displaying on the published site. (#10717)
- Added titles to documentation code blocks so they no longer overlap in display, and removed an unused snippet. (#10708)
- Removed published documentation pages that were no longer reachable from the site navigation. (#10704)
- Added a data quality article covering uniqueness. (#10584)
- Updated the announcement banner on the documentation site. (#10703)
- Updated the Manage Data Assets page to match the current UI and removed duplicated content. (#10695)
- Listed Databricks as a supported data source for the Expectations that support it in the Expectation gallery. (#10691)
- Added documentation redirects and fixed existing redirects that pointed to a retired legacy docs site. (#10692)
- Updated the "Connect GX Cloud to ..." pages to reflect the current workflow. (#10689)
- Applied the non-versioned section styling consistently across the GX Cloud documentation section. (#10694)
- Added documentation for Expectation conditions in GX Cloud. (#10690)
Maintenance
- Added test coverage for Expectation behavior against PostgreSQL column types. (#10727)
- Removed a log message from the datasource store that could include sensitive information. (#10729)
- Added tests for the remaining Expectations that were not yet covered by the new test suite. (#10715)
- Added tests that exercise Expectations against Snowflake column types. (#10706)
- Added tests asserting that misconfigured Expectations fail with informative error messages. (#10696)
- Added a new per-Expectation test suite structure with broader coverage of Expectation behavior. (#10688)
- Added an observed-value renderer for expect_column_most_common_value_to_be_in_set and a render state on rendered content parameters so individual set items can be shown as expected or unexpected. (#10697)
- Pinned snowflake-sqlalchemy to avoid a breaking change in that dependency. (#10698)
1.2.4 (2024-11-20)
Highlights
-
Duplicate expectations are no longer added to a suite — Adding an expectation that already exists in a suite no longer creates a duplicate entry: uniqueness checks now compare the expectation itself, ignoring its identifier and the volatile
notesandmetafields. Suite docstrings also point to suite indexing when deleting an expectation. (#10662)for _ in range(10):
suite.add_expectation(gxe.ExpectColumnValuesToBeBetween(column="passenger_count", min_value=0, max_value=6))
print(len(suite.expectations)) # 1 -
Expectation conditions documentation refreshed — The Expectation conditions documentation has been rewritten with clearer language and separate, runnable examples for pandas, Spark, and SQL in every case. (#10661)
-
Passing a plain string as a condition parser — Supplying a string where the
ConditionParserenum was previously required no longer raises a type error. (#10667)gxe.ExpectColumnValuesToBeBetween(
column="passenger_count",
min_value=0,
row_condition='col("pickup_datetime") > "2019-01-01"',
condition_parser="great_expectations",
)
Changes
Docs
- Added data quality documentation covering integrity. (#10583)
- Incorporated several community documentation contributions from November 2024. (#10681)
- Rewrote the Expectation conditions documentation with clearer language and separate pandas, Spark, and SQL examples throughout. (#10661)
- Documented an architecture decision record explaining why meta fields are not used. (#10672)
Maintenance
- Adding an expectation that duplicates one already in a suite no longer produces a second entry, expectation equality ignores the
notesandmetametadata fields, and the suite docstring now shows deleting expectations by suite index. (#10662) - Passing a string in place of the
ConditionParserenum no longer raises a type error, and row condition coverage was added to the Expectation testing framework. (#10667) - Removed commented-out code from the codebase. (#10686)
- Added tests confirming that SQLite partitioners behave as expected. (#10676)
- Updated CODEOWNERS to name an owner for requirements files. (#10684)
- Added a fixture that exposes data assets to the Expectation test framework, with an asset property on batch test setups. (#10673)
- Extended the Expectation testing framework to run against BigQuery. (#10675)
- Added BigQuery to the marker-based test suites. (#10674)
- Added datetime type inference to the Expectation test framework and moved shared configuration into constants. (#10666)
- Added Databricks SQL coverage to Expectation testing. (#10653)
- Added Spark integration testing support to the Expectation test framework. (#10670)
- Reduced the workload of a flaky timing test so it fails on its own assertion rather than the CI timeout. (#10663)
- Standardized the atomic diagnostic observed-value renderer to use template strings and parameters like other atomic renderers, with better inference of the observed value's type. (#10643)
Contributors
Thanks to @vovavili (first contribution), @yogabonito (first contribution).
1.2.3 (2024-11-14)
Highlights
-
Double-sided Z-score expectations render their threshold value — Expectations using a double-sided Z-score now render the inverse threshold as its numeric value instead of showing the literal placeholder text "$inverse_threshold". (#10648)
-
No more spurious warnings when masking config strings without SQLAlchemy — Configuration strings are no longer masked, so users without SQLAlchemy support installed (for example, when using Azure Blob Storage) no longer see unnecessary warnings. (#10625)
Changes
Bug fixes
- Configuration strings are no longer masked, removing warnings for users who do not have SQLAlchemy support installed (for example with Azure Blob Storage). (#10625)
- Double-sided Z-score expectations now render the numeric inverse threshold instead of the literal string "$inverse_threshold". (#10648)
Docs
- Removed installation instructions for Redshift and Trino, which are no longer officially supported. (#10660)
- Updated the Microsoft Teams Action documentation. (#10655)
- Documentation now notes that Actions are not currently open for contributions while custom Action support is being restored. (#10646)
Maintenance
- Integration tests now generate randomized schema names, with data sources opting in via a
use_schemaflag. (#10658) - Added SQLite coverage to integration testing, and test table names no longer include the data source type as a prefix. (#10657)
- Moved Checkpoint utility helpers alongside the actions they support, removing the separate utils module. (#10649)
- Added a shared constant listing all unparameterized data sources used in tests. (#10654)
- Cleaned up the
MicrosoftTeamsNotificationActiondocstring so it no longer references YAML configuration, and made its import patterns consistent. (#10642) - Added an integration test for
MicrosoftTeamsNotificationAction. (#10628) - Bumped ruff to 0.7.2. (#10629)
- Bumped docstring-parser to 0.16. (#10608)
- Added a new maintainer to the teams file. (#10641)
- Cleaned up unused Azure CI configuration. (#10638)
1.2.2 (2024-11-07)
Highlights
-
Row conditions accept column names containing spaces — Row conditions whose column names contain spaces are now parsed correctly instead of raising an exception. (#10611)
gxe.ExpectColumnValuesToNotBeNull(
column="passenger_count",
row_condition='col("pickup location")=="A"',
condition_parser="great_expectations",
) -
Renderer parameters restored when using row_condition — Expectation keyword arguments are once again included as renderer parameters, so rendered output for Expectations that use a row condition shows the full set of parameters. (#10632)
-
Batch definitions validate the column type they partition on — Adding a batch definition to a SQL data asset now checks that the named column is a valid date/datetime column and raises a clear error otherwise, instead of failing later at validation time. (#10590)
asset.add_batch_definition_daily(name="daily", column="event_date") -
Connection strings masked in configuration output — The
conn_strfield used by Azure Blob Storage data sources is now masked when configuration is displayed or serialized, keeping credentials out of output. (#10626)
Changes
Features
- Expectation tests run against SQL backends now infer column types from the test data. (#10622)
- Adding a batch definition to a SQL data asset now validates that the specified column is a supported type and raises an error when it is not. (#10590)
Bug fixes
- Expectation keyword arguments are again passed through as renderer parameters, restoring missing parameters when a row condition is used. (#10632)
- The
conn_strfield used by Azure Blob Storage data sources is now masked in configuration output. (#10626) - Batch Expectations now correctly handle
datevalues for minimum and maximum bounds. (#10613) - Row conditions now parse column names that contain spaces instead of raising an exception. (#10611)
Docs
- Removed unsupported actions (Opsgenie, PagerDuty, SNS) from the API documentation. (#10624)
- Fixed an incorrect column name in the failing example for ExpectColumnValuesToBeBetween. (#10620)
- Added documentation for dynamic parameters. (#10483)
- Updated documentation of which actions are supported in GX Cloud to match current behavior. (#10609)
Maintenance
- Added Microsoft SQL Server coverage to the Expectation testing framework. (#10634)
- Hardened the pull request title checker workflow against injection. (#10636)
- Added MySQL coverage to the Expectation testing framework. (#10633)
- Simplified the internal test framework with clearer table lookups and more immutable setup objects. (#10631)
- Extra table names used by tests are now randomly generated, and keys in extra test data are labels for correlation rather than table names. (#10630)
- Test setup and teardown are now reused across compatible test configurations, avoiding unneeded database setup work. (#10619)
- Expectation JSON schemas are now verified against the Draft-7 meta-schema, with
multiple_ofcorrected tomultipleOfand a regression test added. (#10627) - Added another member to the repository teams configuration. (#10616)
- Mocked Posthog in action tests to stop intermittent CI failures. (#10615)
- Bumped http-proxy-middleware from 2.0.6 to 2.0.7 in the documentation site. (#10566)
- Bumped mermaid from 10.9.0 to 10.9.3 in the documentation site. (#10549)
1.2.1 (2024-10-31)
Highlights
-
Microsoft Teams notifications work end to end — The Microsoft Teams notification action is now functional and supported as a first-class Checkpoint action: notification cards render correctly, Data Docs links are reachable from the card (Teams does not support
file:///links in buttons, so the results are shown in an expandable card instead), and configuration values such as the webhook can be supplied through config substitution the same way Slack and Email actions allow. (#10593, #10599, #10606, #10595)import great_expectations as gx
from great_expectations.checkpoint import MicrosoftTeamsNotificationAction
context = gx.get_context()
action = MicrosoftTeamsNotificationAction(
name="teams_notification",
teams_webhook="${MY_TEAMS_WEBHOOK}",
notify_on="all",
) -
Accurate unexpected row counts for UnexpectedRowsExpectation —
UnexpectedRowsExpectationnow reports the true number of unexpected rows in itsobserved_valueeven when the query returns more than 200 rows, instead of capping the reported count. (#10604) -
Email action supports config substitution —
EmailActionconfiguration values now resolve string substitutions (for example${SMTP_PASSWORD}), so credentials can be kept out of your configuration files. (#10600, #10602) -
Expectation integration tests run against PostgreSQL and Snowflake — The Expectation integration test framework can now exercise Expectations against PostgreSQL and Snowflake backends, broadening the backends covered by Expectation test suites. (#10582, #10586)
Changes
Features
- Expectations can now be tested against a Snowflake backend in the Expectation integration test framework. (#10586)
- Expectations can now be tested against a PostgreSQL backend in the Expectation integration test framework. (#10582)
Bug fixes
UnexpectedRowsExpectationnow reports the correct unexpected row count when the query returns more than 200 rows. (#10604)- Data Docs results are now accessible from Microsoft Teams notifications via an expandable card, since Teams does not support
file:///links. (#10599) EmailActionconfiguration values now support string substitution, so credentials can be referenced instead of inlined. (#10600)MicrosoftTeamsNotificationActionnow works with GX 1.x and sends a redesigned notification card. (#10593)- Two
ExpectationSuiteobjects with the same Expectations in a different order now compare as equal, so suites no longer fail freshness checks because of ordering. (#10562) - Corrected the type hints for the
mostlyandvalue_setExpectation parameters so plain values such asmostly=1type-check cleanly while the generated schemas stay unchanged. (#10571) - Added a redirect so the deploy-gx-agent documentation URL resolves instead of 404ing. (#10573)
Docs
- Documentation builds now check for broken URLs with lychee. (#10585)
- Documentation now lists
MicrosoftTeamsNotificationActionas a first-class, supported action. (#10595) - Fixed additional small documentation issues found while following the getting-started material. (#10598)
- Documentation now states Python 3.12 as the highest supported Python version. (#10596)
- Removed duplicated content from the GCP Secret Manager instructions on the Access secrets managers page. (#10591)
- Numerous documentation refinements: more relevant links, corrected list indentation, spelling and grammar fixes, code samples that match their surrounding prose, and clearer wording. (#10560)
- Fixed broken links in the 0.18 changelog and in several API reference pages. (#10588)
- Added a working draft guide on data quality distribution analysis. (#10440)
- Internal links in the API reference now use root-relative URLs, preventing intermittent 404s. (#10528)
Maintenance
- Checkpoint creation and Microsoft Teams action runs now emit analytics events. (#10597)
- Expectation test framework supports data sources with multiple assets by accepting extra tables and their data. (#10592)
MicrosoftTeamsNotificationActionnow resolves configuration substitutions, matching the Slack and Email notification actions. (#10606)- Consolidated the configuration-substitution handling used by Slack notifications. (#10602)
- An in-product docs link for configuring credentials now points at the current Core documentation instead of redirecting to the 0.18 content. (#10580)
- Cleaned up miscellaneous internal utility code. (#10581)
- Added more canonical Expectation test coverage. (#10578)
- Updated the 0.18.x changelog for the 0.18.22 release. (#10575)
- Updated the devrel membership listed in
teams.yml. (#10567) - Integration test framework now covers pandas filesystem CSV assets. (#10556)
- Saving an Expectation Suite that cannot be persisted now raises a more informative error. (#10570)
- Bumped the
ruffandmypydevelopment dependencies to 0.7.1 and 1.13.0. (#10565) - Added a test ensuring that public API methods only appear on classes that are themselves marked public. (#10529)
- Re-enabled previously skipped end-to-end tests and updated them to 1.x syntax. (#10555)
1.2.0 (2024-10-24)
Highlights
-
The
great_expectationsrow condition parser is no longer experimental — Row conditions written with thegreat_expectationsparser are now a supported, non-experimental way to filter the rows an Expectation evaluates, and the parser now understands==comparisons. Documentation has been updated to match. (#10524)gxe.ExpectColumnValuesToNotBeNull(
column="passenger_count",
row_condition='col("vendor_id") == 1',
condition_parser="great_expectations",
) -
Row conditions rejected on Expectations where they have no effect — Expectations that operate on table structure rather than rows —
ExpectColumnToExist,ExpectTableColumnCountToBeBetween,ExpectTableColumnCountToEqual,ExpectTableColumnsToMatchOrderedList,ExpectTableColumnsToMatchSet, andUnexpectedRowsExpectation— no longer accept arow_condition, so a condition can no longer be silently ignored.condition_parseris now expressed as an enum of the supported parsers. (#10519) -
Faster validation result rendering — Rendering validation results and Data Docs is noticeably faster. (#10530)
-
New Learn page for running GX in an Airflow data pipeline — The Learn documentation now includes a page pointing to the end-to-end tutorial for using GX inside an Airflow data pipeline, alongside cleaned-up tutorial landing and table-of-contents pages. (#10534)
Changes
Bug fixes
- Fixed file path Batch Definitions so they are serialized correctly and round-trip as expected. (#10543)
- Ensured file-backed domain objects are persisted in JSON files. (#10523)
- Improved rendering performance of validation results. (#10530)
- Removed
row_conditionfrom Expectations where it has no effect (ExpectColumnToExist,ExpectTableColumnCountToBeBetween,ExpectTableColumnCountToEqual,ExpectTableColumnsToMatchOrderedList,ExpectTableColumnsToMatchSet, andUnexpectedRowsExpectation), introduced an enum forcondition_parser, and dropped the special-casedpandasdefault parser for three Expectations. (#10519)
Docs
- Added documentation redirects for docs subdomains. (#10558)
- Added references to the community issues board in the Get Support and community resources docs, and removed mention of the GX-supported label from the contributing doc. (#10548)
- Fixed broken documentation links so they point at their current URLs. (#10541)
- Changed dynamically generated links in the 0.18 API reference from relative paths to root-based paths so they resolve correctly. (#10507)
- Added the base
Datasourceclass to the public API documentation. (#10527) - Added a Learn page linking to the GX-in-the-data-pipeline Airflow tutorial, plus tense and wording cleanup on the tutorial landing and table-of-contents pages. (#10534)
- Updated the Data Docs site configuration page to reflect that GX 1.x only supports writing Data Docs sites to a local filesystem. (#10536)
- Added redirects for retired documentation URLs so bookmarked and search-result links land on the corresponding versioned or closest-matching page instead of a 404. (#10516)
- Fixed assorted typos in the documentation. (#10521)
- Bumped the maximum supported Python version stated in the documentation. (#10522)
Maintenance
- Added a testing framework for exercising Expectations against data sources, initially supporting pandas DataFrame data sources. (#10554)
- Removed assorted utility functions from the documented public API surface. (#10557)
- Enabled the AWS/Spark docs tests to run on pull requests, updated the remaining test for GX 1.x, and removed three outdated tests. (#10550)
- Updated the Airflow documentation snippet to look up a Checkpoint by name instead of iterating over all Checkpoints. (#10551)
- Documentation site builds on Netlify now use Python 3.12. (#10531)
- Removed the experimental designation from the
great_expectationsrow condition parser, added support for the==condition, and updated the related documentation. (#10524) - Cleaned up redundant try/except blocks flagged by the TRY203 lint rule. (#10540)
- Added
DataAsset.get_batch_definitionto the public API documentation. (#10533) - Upgraded the project's ruff linter to 0.7.0 and updated the corresponding lint suppression codes. (#10535)
- Updated static analysis tooling: ruff 0.6.8 to 0.6.9 and mypy 1.11.1 to 1.12. (#10525)
1.1.3 (2024-10-15)
Compatibility: Python <3.12,>=3.9 → <3.13,>=3.9; snapshottest removed (extra test) (python_version < "3.12")
Highlights
-
Python 3.12 support — Great Expectations now supports Python 3.12; the supported range is Python >=3.9,<3.13. (#10503)
-
Data Docs icons render again — Icons in Data Docs now load correctly instead of failing to appear, after switching to a working icon source. (#10511)
Changes
Bug fixes
- Fixed missing icons in Data Docs by serving them from a working CDN source. (#10511)
Docs
- Corrected an incorrect label in the migration guide. (#10518)
- Documented object factories as part of the public API reference. (#10513)
Maintenance
- Ran the ClickHouse test suite under its own isolated CI marker, since it is not yet compatible with Python 3.12. (#10512)
- Extended the pact contract test to cover all expectation suites. (#10506)
- Corrected how the release-related GitHub Actions install the release tooling. (#10509)
- Added support for running Great Expectations on Python 3.12. (#10503)
- Added manually triggered GitHub Actions workflows for the release process. (#10502)
- Removed the
snapshottesttest dependency. (#10498)
1.1.2 (2024-10-10)
Highlights
-
Turn analytics on or off per project from code — Data Contexts now expose an
enable_analyticsmethod that explicitly records whether analytics are enabled in the project config. When the project config holds a value, it takes precedence over the analytics environment variable, so you can keep a global environment default and still override it for a specific project. (#10385)import great_expectations as gx
context = gx.get_context()
context.enable_analytics(False) -
Result format dicts are no longer mutated by the Validator — Passing a result format dict into a Validator no longer modifies the dict you provided, so checkpoints are no longer incorrectly considered stale and their validations run as expected. (#10496)
-
V0 to V1 migration guide — The documentation now includes a guide for migrating a project from Great Expectations V0 to V1. (#10477)
Deprecations
context.get_datasourceis deprecated; usecontext.data_sources.get. Removal in 2.0.0. (#10471)
Changes
Features
- Added
context.enable_analyticsto explicitly enable or disable analytics for a project; a value stored in the project config now takes precedence over the analytics environment variable. (#10385)
Bug fixes
- A result format dict passed to a Validator is no longer mutated, fixing checkpoint validations that failed because the checkpoint was treated as stale. (#10496)
Docs
- Updated the minimum supported version shown in the documentation. (#10494)
- Added a V0 to V1 migration guide to the documentation. (#10477)
Maintenance
1.1.1 (2024-10-08)
Compatibility: Python <3.12,>=3.8 → <3.12,>=3.9; ipython removed; ipywidgets removed; makefun removed; numpy removed (python_version == "3.8"); pandas removed (python_version <= "3.8"); pytz removed; urllib3 removed; removed extra test
Highlights
-
Python 3.9 is now the minimum supported Python version — Python 3.8 reached end of life, so GX Core no longer supports it. Supported versions are now Python 3.9 through 3.11, with experimental support for 3.12 and later available via the GX_PYTHON_EXPERIMENTAL environment variable. The README now states the updated support policy. (#10441, #10474)
-
Leaner install footprint — Installing great_expectations now pulls in fewer third-party packages: the top-level urllib3, pytz, ipython, ipywidgets, and makefun requirements have been removed, and the requirements files were tidied up. (#10488, #10489, #10487, #10472, #10485)
-
Slack webhook credentials no longer leak into serialized configuration — SlackNotificationAction now substitutes configured credentials just in time when the action runs, so your token or webhook URL is no longer written out when the action is serialized. (#10476)
import great_expectations as gx
from great_expectations.checkpoint import SlackNotificationAction
action = SlackNotificationAction(
name="notify_slack",
slack_webhook="${SLACK_WEBHOOK}",
)
print(action.json()) # the substituted secret is no longer included -
Validation results from GX Cloud carry their backend-assigned IDs — Validation results produced against a Cloud-backed Data Context now come back with the IDs generated by the Cloud backend, so you can reference and look them up reliably. (#10478)
-
New tutorial for dbt, Airflow, and Postgres with GX — The documentation now includes an end-to-end tutorial showing how dbt, GX, Airflow, and Postgres work together to validate data in a pipeline. (#10458)
Changes
Bug fixes
- Validation results generated against a Cloud-backed Data Context now receive the IDs assigned by the Cloud backend. (#10478)
- SlackNotificationAction credentials are no longer serialized: variable substitution now happens when the action runs rather than when it is constructed. (#10476)
Docs
- Glossary term links in the 0.18 documentation now point at the versioned URLs instead of returning 404s. (#10479)
- Added a tutorial demonstrating how dbt, GX, Airflow, and Postgres can be used together. (#10458)
- The README integration support policy now states that GX Core supports Python 3.9 through 3.11, dropping the reference to Python 3.8. (#10474)
Maintenance
- The top-level
urllib3requirement was removed; it is already installed as part ofrequests. (#10488) - The
pytzrequirement was removed from the installed dependency set. (#10489) - The experimental metric repository was updated to work with the V1 backend API. (#10486)
- The
ipythonandipywidgetsrequirements were removed from the installed dependency set. (#10487) - The requirements files were cleaned up, reducing what gets installed alongside great_expectations. (#10485)
- The public API check runs in CI again, restoring coverage that had previously been turned off. (#10449)
- The outdated
makefunrequirement, used only by the removed data assistants, is no longer installed. (#10472) - The contrib pipeline was removed from the repository's build tooling. (#10470)
- Stale teams and non-employee entries were removed from the repository's teams.yml ownership file. (#10469)
- Bumped
micromatchfrom 4.0.5 to 4.0.8 in the documentation site build, picking up fixes for CVE-2024-4067 and CVE-2024-4068. (#10466) - Bumped
webpackfrom 5.88.2 to 5.94.0 in the documentation site build, including a DOM-clobbering security fix. (#10463) - Bumped
dompurifyfrom 3.0.11 to 3.1.7 in the documentation site build, picking up several sanitizer bypass fixes. (#10465) - Bumped
expressfrom 4.19.2 to 4.21.0 in the documentation site build. (#10464) - Python 3.8 is no longer a supported version now that it has reached end of life; Python 3.9 is the minimum supported version and CI no longer tests 3.8. (#10441)
1.1.0 (2024-10-03)
Highlights
-
Pass expectation parameters to
Batch.validate()—Batch.validate()now accepts expectation parameters, so you can supply runtime parameter values when validating a single expectation or an expectation suite against a batch. (#10456)batch.validate(expectation, expectation_parameters={"min_value": 1}) -
Better autocomplete for
context.data_sources— Additional method signatures are now published forcontext.data_sources, so editors and type checkers offer complete autocomplete and type information for data source methods. (#10447)context.data_sources.add_snowflake(name="my_ds", connection_string="...") -
Environment variable substitution in Slack notifications —
SlackNotificationActionnow supports${VAR}substitution, so Slack webhooks and tokens can be supplied through environment variables or config variables instead of being hard-coded. (#10443)SlackNotificationAction(name="slack", slack_webhook="${SLACK_WEBHOOK}")
Changes
Features
Batch.validate()accepts expectation parameters, letting you pass runtime parameter values when validating against a batch. (#10456)- Autocomplete and type hints for
context.data_sourcesnow cover previously missing methods. (#10447)
Bug fixes
SlackNotificationActionnow resolves${VAR}-style substitutions in its configuration values. (#10443)- Data Sources added, updated, or deleted at runtime are now reflected when you print the Data Context. (#10438)
- Fixed an outdated link in the README that pointed to a page that has moved. (#10446)
Docs
- The integration support table now lists Databricks (SQL) as a GX Cloud supported Data Source. (#10452)
- Added a Data Source credential management section with an example of using environment variable substitution. (#10417)
- Documentation now states Python 3.9 as the supported minimum version. (#10453)
Maintenance
- Result format and query-based metrics now return at most 200 unexpected records, and the docs state this limit. (#10432)
ExpectColumnUniqueValueCountToBeBetweenno longer accepts themostlyparameter, which does not apply to column aggregate expectations. (#10450)- Expectation
min_value/max_valueparameters use a shared comparable type and now acceptdatevalues. (#10448) - Great Expectations is now published as a stable release on PyPI. (#10457)
- Added Alena Hutchinson to the core developers team. (#10459)
1.0.6 (2024-10-01)
Highlights
-
Clear error when opening Data Docs that haven't been built — Calling
context.open_data_docs()when no Data Docs have been built now raises a descriptiveNoDataDocsErrorinstead of failing opaquely. (#10439)import great_expectations as gx
context = gx.get_context()
context.open_data_docs() # raises NoDataDocsError if no Data Docs exist -
Expectation windows for dynamic parameters — Expectations accept a new optional
windowsfield that describes temporal window definitions, enabling dynamic parameters. When empty, the field is omitted from dict serialization and serialized asnullin JSON. (#10402)import great_expectations.expectations as gxe
expectation = gxe.ExpectColumnValuesToNotBeNull(column="passenger_count", windows=None) -
Suites render reliably when loaded — Suites are now rendered when they are loaded, removing the runtime exceptions that came up when adding a validation definition for a freshly created suite or running checkpoints loaded from GX Cloud. (#10434)
Changes
Features
open_data_docs()now raises a descriptiveNoDataDocsErrorwhen no Data Docs have been built. (#10439)- Expectations accept a new optional
windowsfield for configuring temporal window definitions used by dynamic parameters. (#10402)
Bug fixes
- Fixed runtime errors caused by unrendered suites: suites are now rendered when loaded, so adding a validation definition for a newly created suite and running checkpoints loaded from GX Cloud no longer fail. (#10434)
Docs
- Added a data quality technical documentation page covering Volume. (#10362)
- Improved the documentation search bar styling and added a hover border to the color mode toggle for visual consistency. (#10436)
- Reverted the documentation search bar on desktop screens to the previous design after searches dropped with the minimalistic version. (#10409)
- Fixed typos in the GX Cloud overview and deployment pattern documentation. (#10429)
- Reorganized and updated the GX Cloud deployment and architecture pattern content into a single GX Cloud overview page. (#10345)
- Excluded internal template pages from the documentation sitemap so they no longer appear in site search results. (#10401)
- Updated the
UnexpectedRowsExpectationdocumentation to clarify that subclassing is not required, that the{batch}keyword is optional, and to add a GX Cloud section on Custom SQL Expectations. (#10391)
Maintenance
- Expectation equality comparisons ignore rendered content, so otherwise-identical expectations compare as equal regardless of whether they have been rendered. (#10444)
- Added test coverage for expectation parameters being passed through to checkpoints. (#10435)
- Updated the ruff linter from 0.5.3 to 0.6.8, including formatting and linting of Jupyter notebook files. (#10442)
1.0.5 (2024-09-19)
Compatibility: databricks-sql-connector added (extra databricks); removed extra databricks; new extra spark-connect
Highlights
-
Spark Connect DataFrames are now accepted — You can now pass Spark Connect DataFrames to Great Expectations wherever a Spark DataFrame is expected; previously only classic Spark DataFrames were accepted and Spark Connect DataFrames were rejected. Note that sessions created through the Spark Connect session factory methods are still not supported. (#10420)
-
Regex and LIKE Expectations work on Databricks SQL — Expectations such as expect_column_values_to_match_regex and expect_column_values_to_match_like_pattern now run correctly against Databricks SQL. (#10406)
batch.validate(
gxe.ExpectColumnValuesToMatchRegex(column="name", regex=".*")
) -
{batch}keyword works in UnexpectedRowsExpectation queries — Queries that use the{batch}keyword now run successfully on Postgres, which requires subquery aliases in SELECT and WHERE clauses, and on all backends when the batch uses a splitter, where batch parameters are now rendered as literal values. (#10392)gxe.UnexpectedRowsExpectation(
unexpected_rows_query="SELECT * FROM {batch} WHERE passenger_count > 6"
) -
Documentation for connecting GX Cloud to Databricks SQL — The GX Cloud documentation now includes a "Connect to Databricks SQL" page, listed in the documentation table of contents. (#10394, #10423)
Changes
Bug fixes
- Connecting to Databricks SQL no longer fails with an AttributeError when the installed
databrickspackage does not provide asqlalchemysub-module, and the minimum supporteddatabricks-sql-connectorversion has been raised. (#10424) - Spark Connect DataFrames are now accepted wherever Spark DataFrames are, instead of being rejected as an unsupported type; DataFrames from sessions created via the Spark Connect session factory methods remain unsupported. (#10420)
- Regex- and LIKE-based Expectations, including expect_column_values_to_match_regex and expect_column_values_to_match_like_pattern, now work against Databricks SQL. (#10406)
- Using the
{batch}keyword in an unexpected-rows query no longer fails on Postgres due to missing subquery aliases, and no longer fails on any backend when the batch uses a splitter, since batch parameters are now rendered as literal values. (#10392)
Docs
- The "Connect to Databricks SQL" page is now listed in the GX Cloud documentation table of contents. (#10423)
- The published changelog now includes the 0.18.18 through 0.18.21 releases. (#10422)
- Added a "Connect to Databricks SQL" page to the GX Cloud documentation. (#10394)
Maintenance
FabricPowerBIDatasourcenow lives outside thegreat_expectations.experimentalsub-package, removing confusion with the separate contributor experimental package. (#10419)- Corrected the type annotations for
SQLAlchemyExecutionEngine.get_connection()and updated column identifier tests to match fixes carried over from the 0.18.x branch. (#10399)
1.0.4 (2024-09-16)
Highlights
-
Checkpoints with Slack and email actions run again — Checkpoints configured with Slack or email notification actions no longer fail during setup; these actions now compare as equal when they are configured identically. (#10393)
-
More reliable Data Docs links in checkpoint actions — Checkpoint actions that reference Data Docs pages now retrieve those pages correctly in additional configurations, so notifications and updates include the expected Data Docs links. (#10400)
Changes
Bug fixes
- Fixed additional cases where checkpoint actions failed to retrieve the correct Data Docs pages. (#10400)
- Fixed action comparison so checkpoints using Slack or email notification actions can be run. (#10393)
Docs
- Added "request a demo" calls to action to the GX Cloud sidebar, the resources dropdown, and the Why GX Cloud and Get Support pages. (#10389)
Maintenance
- Diagnostics for every nested validation definition are now emitted from the parent checkpoint run. (#10386)
1.0.3 (2024-09-12)
Compatibility: sqlalchemy minimum set to 1.4.0 (extra snowflake)
Highlights
-
List available batches without loading data —
BatchDefinitionnow offers a publicget_batch_identifiers_list()method that returns the batch identifiers available for that batch definition. It replaces the oldget_batch_list_from_batch_requestworkflow for inspecting available batches, and because it does not read the underlying data it is considerably faster. (#10383, #10295)batch_definition = asset.get_batch_definition("daily")
for identifiers in batch_definition.get_batch_identifiers_list():
print(identifiers) -
Fetch a single batch with
get_batch—get_batch_list_from_batch_requesthas been replaced byget_batch, which retrieves only the batch you actually need instead of reading every matching batch. For Pandas filesystem datasources in particular, this removes the long-standing cost of loading data for batches that were never used. (#10295)batch = batch_definition.get_batch()
result = batch.validate(expectation) -
Checkpoint results no longer break Data Docs links in actions — Checkpoint actions such as the Microsoft Teams notification no longer raise a
TypeErrorwhen building Data Docs links from a checkpoint run; the links are rendered correctly again. (#10374)
Changes
Features
BatchDefinition.get_batch_identifiers_list()is now available as a public, non-data-reading way to see which batches a batch definition covers. (#10383)- Running a Checkpoint now emits usage analytics for the run. (#10382)
get_batch_list_from_batch_requestis replaced byget_batch, which fetches only the batch you need, and byget_batch_identifiers_listfor inspecting available batch metadata; documentation has been updated to the new methods. (#10295)
Bug fixes
- Checkpoint actions no longer fail with
TypeError: list indices must be integerswhen rendering Data Docs page links. (#10374)
Docs
- The feedback survey is no longer shown on the documentation homepage. (#10378)
- Data quality use case articles in the Learn section now use small text instead of superscript for footnotes. (#10377)
- Documentation now lists BigQuery in the GX Core support posture. (#10375)
- Documentation now describes the support posture for Data Docs. (#10373)
- The GX Core introduction page now includes an embedded overview video. (#10366)
- Changelog attributions for the 1.0 releases now credit external contributors. (#10348)
Maintenance
- Removed unused miscellaneous helper functions from the internal test utilities. (#10357)
- Added test coverage for up-to-date (freshness) checks on validation definitions and checkpoints. (#10381)
- Added test coverage for up-to-date (freshness) checks on batch definitions and expectation suites. (#10380)
- Validation definitions and checkpoints are now checked for being up to date with their stored versions, raising a dedicated error when they are not. (#10365)
- Rendering an expectation's description no longer risks a
KeyErrorwhen configuration or result values are absent. (#10353) - Errors raised when a resource is not added or not up to date now live in a dedicated module with a clearer class hierarchy. (#10359)
- Cleaned up test fixtures. (#10358)
- Batch definitions and expectation suites are now checked for being up to date before they are saved. (#10277)
- Removed error types left over from legacy versions to simplify the set of exceptions the library raises. (#10356)
- An expectation's
description, when set, is now always rendered in place of the default rendered text, and it is omitted from serialized expectation suites when unset. (#10347) - Expectation equality comparison now handles
metaandnotesmore simply and consistently. (#10349) - Type checking now runs against SQLAlchemy 2, while both SQLAlchemy 1 and 2 remain supported at runtime. (#10112)
1.0.2 (2024-09-05)
Highlights
-
Choose a result format when validating a Batch — You can now pass a result format when validating a Batch or Expectation directly, so you control how much detail comes back without changing your suite or checkpoint configuration. (#10281)
result = batch.validate(expectation, result_format="COMPLETE") -
Value sets are no longer mangled into dictionaries — Expectations that take a value set now keep lists of strings intact — a value set such as ["HI", "AK"] is no longer coerced into a dictionary like {"H": "I", "A": "K"}. (#10325)
gxe.ExpectColumnValuesToBeInSet(column="state", value_set=["HI", "AK"]) -
Data Docs show the Data Asset name for fluent Data Sources — Data Docs pages now display the Data Asset name for fluent Data Sources, making it clear which asset a set of Validation Results came from. (#9953)
-
Clearer UnexpectedRowsExpectation results and rendering — UnexpectedRowsExpectation now renders its query as a code block, reports an observed value with contextual information instead of a bare row count, and treats the {batch} keyword in unexpected_rows_query as optional while telling you when it is missing. (#10334, #10311)
gxe.UnexpectedRowsExpectation(
unexpected_rows_query="SELECT * FROM {batch} WHERE passenger_count > 6"
) -
Light and dark theme selector in the documentation site — The documentation site now offers a theme selector so you can read the docs in light or dark mode. (#10181)
Changes
Features
- You can now set the result format when validating a Batch, and a single result-format type and default constant are available for reuse. (#10281)
Bug fixes
- Data Docs now show the Data Asset name for fluent Data Sources. (#9953)
- Slack and email notifications no longer fail when rendering Validation Results that have no active batch definition. (#10344)
- Validation Results no longer carry the queried dataframe in their result payload. (#10338)
- Value sets passed to Expectations are no longer coerced into dictionaries, so lists such as ["HI", "AK"] are preserved as given. (#10325)
- Requesting a Batch from a Fabric Power BI Data Source no longer raises a TypeError about an unexpected 'options' keyword argument. (#10318)
Docs
- GX Cloud alerting documentation now covers email alerts instead of Slack alerts. (#10320)
- Superscript footnote markers in the application integration support tables now render consistently. (#10337)
- Added a data quality reference article on missingness. (#10134)
- The configure credentials guide now explains how to persist environment variables in Z Shell. (#10330)
- Removed dead links to older documentation from Expectation docstrings and updated the accompanying schema files. (#10317)
- Fixed a typo in the documentation. (#10329)
- The "Connect to GX Cloud with Python" guide now shows how to list available Data Sources and retrieve a sample Batch of data. (#10315)
- The reference table now includes value types so named parameters are easier to identify. (#10299)
- The Airflow tutorial now works with both GX 0.18.x and GX Core 1.0. (#10319)
- Data Context descriptions now include general use cases for each type of Data Context. (#10292)
- The create a Validation Definition guide now lists a Batch Definition, rather than a Data Asset, as its prerequisite. (#10288)
- Documentation now correctly describes printed Validation Results as JSON rather than YAML. (#10287)
- The documentation site now has a light/dark theme selector, and the navigation bar no longer uses a translucent background. (#10181)
- Removed the legacy version 0.17 documentation files, which are now served from a standalone site. (#10279)
- Documentation feedback tickets now record the page path the feedback came from. (#10312)
- Corrected a typo in the description of the min_value argument for ExpectColumnMaxToBeBetween. (#10285)
- Updated the allow-list IP addresses documented for the fully hosted GX Cloud deployment pattern. (#10308)
- Fixed a failing GX Core documentation build. (#10300)
- The GX Core documentation sidebar and version dropdown now stay consistent and keep the tab highlighted when switching between versions 0.18 and 1.0. (#10302)
- Updated the project README. (#10294)
Maintenance
- UnexpectedRowsExpectation renders its query as a code block, reports a descriptive observed value instead of a row count, and accepts an unexpected_rows_query without the {batch} keyword while warning when it is missing. (#10334)
- UnexpectedRowsExpectation carries metadata and a docstring consistent with core Expectations, and its description is now an instance attribute. (#10311)
Contributors
Thanks to @masfworld (first contribution).
1.0.1 (2024-08-29)
Highlights
-
Checkpoints now hold onto the exact Validation Definition you pass in — A Checkpoint now references the same
ValidationDefinitioninstance it was given, so changes you make to that object are reflected when the Checkpoint runs instead of acting on a separate copy. (#10274)validation_definition = context.validation_definitions.add(
gx.ValidationDefinition(name="my_vd", data=batch_definition, suite=suite)
)
checkpoint = gx.Checkpoint(name="my_checkpoint", validation_definitions=[validation_definition])
assert checkpoint.validation_definitions[0] is validation_definition -
Validation Definition API reference documentation —
ValidationDefinitionand its methods are now marked as public API, so they appear in the published API reference documentation. (#10282) -
Docs now show a tested way to check your installed GX Core version — The documentation's instructions for verifying which version of GX Core is installed have been updated and the example is now covered by tests. (#10286)
import great_expectations as gx
print(gx.__version__) -
Direct links to full code examples in the GX Core docs — Every procedure and sample-code tab group in the GX Core docs now has a header and a query string, so you can link straight to the full code example for any given procedure. (#10258)
Changes
Bug fixes
- A Checkpoint now references the same Validation Definition instance that was passed to it rather than a copy, so later edits to that object take effect when the Checkpoint runs. (#10274)
Docs
- Removed orphaned documentation pages and leftover content from the previous documentation structure, and updated links that pointed to them. (#10260)
- Updated the documented method for checking the version of the installed GX Core library and put the example under test. (#10286)
- Updated the support and contribution documentation to match the current support posture, clarifying issue prioritization, pointing community discussion to Discourse, and documenting the issue labels. (#10298)
- Removed the examples directory from the repository. (#10293)
- Corrected a typo in the result format documentation, which referred to
results_urlinstead ofresult_urlwhen retrieving a GX Cloud result link. (#10283) - Updated the instructions for adding data assets to reflect the current workflow. (#10200)
- Corrected the Databricks SQL docstring, which incorrectly referred to Postgres. (#10148)
- Removed Redshift from the community-supported integrations listed in the application integration support documentation. (#10280)
- Removed the misleading
/databasepath element from Databricks SQL connection strings in the documentation and test examples, since it is ignored by the connector. (#10273) - Docstrings and some error messages now refer to Expectations by their class names instead of the older validator method names. (#10268)
- Fixed the code block shown in the review Validation Results step of the guide to testing an Expectation. (#10267)
- Replaced references to "GX OSS" and "GX 1.0" throughout the documentation with the current product name, GX Core. (#10255)
- Added headers and query strings to the procedure and sample-code tab groups in the GX Core docs so full code examples can be linked to directly. (#10258)
- Fixed a broken internal link to the available Expectations table in the GX Cloud documentation for v1.0 and v0.18. (#10247)
- Promoted the 1.0 documentation to be the latest published version. (#10261)
Maintenance
- Simplified
ValidationDefinitionconstruction by removing a custom initializer override; behavior is unchanged. (#10278) - Upgraded the type checker to mypy 1.11.2 and resolved the new typing errors it surfaced; no runtime behavior changed. (#10142)
- Checkpoint creation analytics events now include the ids of the associated validation definitions. (#10290)
- Analytics events are no longer emitted from Azure CI runs. (#10291)
- Marked
ValidationDefinitionas public API so it is included in the published API reference documentation. (#10282) - Analytics events are no longer emitted from CI runs. (#10263)
- Loosened the
ruamelversion pin to allow 0.18 or greater, which resolves CVE-2019-20478. (#10266)
1.0.0 (2024-08-22)
Highlights
- Rendered content stays up to date — Rendered content is now regenerated every time rather than reused from a previous render, so descriptions and rendered output always reflect the current expectations and validation results. (#10257)
Changes
Bug fixes
- Content is now always re-rendered, so rendered output reflects the latest state instead of stale previously rendered content. (#10257)
- Error messages raised when running a Checkpoint include the diagnostics for all of its child validation definitions, not just the first problem found. This change was subsequently reverted in this release. (#10250)
Docs
- Updated the project README to describe GX Core. (#10252)
Maintenance
- Reverted the previous change to Checkpoint and Validation Definition error reporting, restoring the earlier behavior where running an unsaved Checkpoint or Validation Definition is saved automatically when its children are already saved and otherwise raises the prior error message. (#10256)
- Introduced an internal diagnostics helper used by the checks that determine whether a Checkpoint, Validation Definition, Expectation Suite, or Batch Definition has been saved, with no change to expected behavior. (#10249)
1.0.0a6
- [FEATURE] Add the public api to context.data_source and context.data_source.get (#10180)
- [FEATURE] Remove order_by from Asset API (#10187)
- [FEATURE] Rename name_* params to name (#10188)
- [FEATURE] Rename suite_param to expectation_param in validation_definitition (#10196)
- [FEATURE] Delete batch definition by name. (#10197)
- [FEATURE] Filter bad validation definitions and checkpoints coming back through stores. (#10219)
- [BUGFIX] Allow 0 ValidationDefinitions on a Checkpoint (#10194)
- [BUGFIX] Add directive to control generation of reader methods. (#10198)
- [BUGFIX] Ensure that data source and nested objects obtain IDs on add for all environments (#10221)
- [BUGFIX] Add StoreBackendError to missing exception list. (#10224)
- [BUGFIX] Use
is_addedchecks inidentifier_bundleserialization logic (#10245) - [BUGFIX] Filter and log bad expectations when loading a suite (#10248)
- [DOCS] Updated feedback modal (#10168)
- [DOCS] Fix syntax around getting batch definitions (#10189)
- [DOCS] Update file system batch params sample to use strings (#10190)
- [DOCS] DSB-796: Fix syntax highlighting (#10192)
- [DOCS] Puts 1.0 connect to SQL data code snippets in the documentation under test. (#10203)
- [DOCS] cloud UI v0 updates (#10205)
- [DOCS] Update GX version support in support posture (#10208)
- [DOCS] Transition feedback Jira tickets to kanban board (#10212)
- [DOCS] Updated deprecation policy (#10223)
- [DOCS] GX 1.0: Put documentation code under test for connect to filesystem data guides (#10186)
- [DOCS] Update README.md to remove out dated info on how to contribute to docs (#10226)
- [DOCS] Puts 1.0 documentation example code for how to run validations under test (#10230)
- [DOCS] Puts 1.0 example scripts for connecting to dataframe data under test. (#10225)
- [DOCS] puts 1.0 code under test for how to define Expectations (#10229)
- [DOCS] Revises the glossary for 1.0 (#10209)
- [DOCS] Puts scripts for 1.0 "create a Data Context" docs under test (#10228)
- [DOCS] Puts 1.0 example code for Checkpoints, Actions, and Result Format under test. (#10232)
- [DOCS] Puts 1.0 examples for how to customize Expectations under test. (#10235)
- [DOCS] Puts 1.0 example code for how to configure project settings under test (#10240)
- [DOCS] Puts 1.0 doc examples for how to configure Data Docs into scripts under test (#10243)
- [DOCS] Add docs tests step to CI (#10220)
- [DOCS] DOC-818: Update GX Core Overview and Try GX (#10237)
- [DOCS] Update README.md to reflect contribution posture (#10244)
- [MAINTENANCE] Update
teams.yml(#10178) - [MAINTENANCE] Remove
notify_onfrom base Action (#10179) - [MAINTENANCE] Remove
SuiteParameterStore(#10191) - [MAINTENANCE] Use context manager to close session in CloudDataContext (#10195)
- [MAINTENANCE] Ensure GXCloudStoreBackend session is closed (#10204)
- [MAINTENANCE] Delete CloudMigrator and ConfigurationBundle (#10207)
- [MAINTENANCE] Ensure CloudDataStore session is closed (#10206)
- [MAINTENANCE] Update Posthog payloads (#10183)
- [MAINTENANCE] Ensure that
context.validation_definitions.all()works with Cloud (#10216) - [MAINTENANCE] Add required keys to SuiteValidationResult.meta (#10214)
- [MAINTENANCE] Remove cascading saves within Checkpoint hierarchy (#10218)
- [MAINTENANCE] Get tests around rendered content passing (#10215)
- [MAINTENANCE] Raise informative errors if child objects are not persisted before parent (#10217)
- [MAINTENANCE] Update import path for UnexpectedRowsExpectation (#10234)
- [MAINTENANCE] Add posthog event for all deserialization error. (#10239)
- [MAINTENANCE] Enable Codecov Test Result Reporting (#10211)
- [MAINTENANCE] Add batch_parameters to validation results payload (#10236)
- [MAINTENANCE] Cut over analytics to prod (#10241)
- [MAINTENANCE] Add
AddedDiagnosticshelper class tois_addedflows (#10249)
1.0.0a5
- [FEATURE] add slack analytics for cloud (#9944)
- [FEATURE] Add serialization logic to Expectation models (#9949)
- [FEATURE] Add get data context mercury v1 integration test. (#9978)
- [FEATURE] SnowflakeDatasource update (#10005)
- [FEATURE] SnowflakeDatasource make
role+warehouserequired (#10021) - [FEATURE] Experimental Python 3.12 support (#8862)
- [FEATURE] Add atomic renderer for
ExpectMulticolumnSumToEqual(#10076) - [FEATURE] Add missing atomic renderers to Expectations (#10079)
- [FEATURE] Snowflake - Key-Pair auth updates from
0.18.x(#10095) - [FEATURE] Add sentence case titles to Expectation schemas (#10097)
- [FEATURE] Use v1 data context endpoint (cloud) (#10093)
- [FEATURE] SnowflakeDatasource - AccountIdentifier error improvments (#10104)
- [FEATURE] use v1 cloud api for data sources (#10094)
- [FEATURE] Make save method for data context variables public (#10057)
- [FEATURE] Add context.data_sources.all (#10116)
- [FEATURE] Misc Data Source cleanup (#10126)
- [FEATURE] Clean up import structure for gx (#10146)
- [FEATURE] Turn on remaining v1 endpoints (#10155)
- [FEATURE] Update dataframe batch.validate workflow (#10165)
- [BUGFIX] Migrate back to github hosted runners until docker issue is fixed (#10011)
- [BUGFIX] Fix parsing of account/me response. (#10015)
- [BUGFIX] Handle OSError during save on read-only file system. (#10024)
- [BUGFIX] add ecr caching to trino and spark images (#10037)
- [BUGFIX] Avoid writing to great_expectations.yml during init (#10038)
- [BUGFIX] Z-score renderer when
double_sided(#10084) - [BUGFIX] SQLDatasource (V1) - lowercase unquoted schema_names for SQLAlchemy case-sensitivity compatibility (#10109)
- [BUGFIX] Revert package update (#10118)
- [BUGFIX] Remove illegible duplicate local Data Docs link from Slack renderer (#10130)
- [BUGFIX] Fix type of StoreBackend._manually_initialize_store_backend_id (#10159)
- [BUGFIX] On store add, add id to input model (#10167)
- [BUGFIX] Add checkpoint_id to validation result meta (#10169)
- [BUGFIX] Update binary path in mssql docker image (#10171)
- [DOCS] Revises and reorganizes content for installing additional dependencies per the GX 1.0 ToC (#9934)
- [DOCS] Initial revision and reorg of "Create a Data Context" content for revised GX 1.0 ToC (#9938)
- [DOCS] Removes content for integrating with GCP from the BigQuery SQL connect to data topic in the 0.18.x docs (#9955)
- [DOCS] Clarify SQL Expectation Support in GX Cloud Docs (#9951)
- [DOCS] core expectation model metadata (#9967)
- [DOCS] Update Table and Multi Column Expectation docstrings (#9990)
- [DOCS] Add Alerts Content to the GX Cloud Documentation (#9880)
- [DOCS] Updates Expectations docstrings with supported OSS Data Sources for gallery (#10030)
- [DOCS] Adds GX 1.0 preview docs for Run Validations topic (#10026)
- [DOCS] Connect to data using SQL for GX 1.0 (#9971)
- [DOCS] Remove splitter from data asset docs and add batch definition documentation to expectation docs (#10032)
- [DOCS] Update path to config_variables.yml file in docs. (#10044)
- [DOCS] Add data quality use case TOC skeleton under Learn (#10049)
- [DOCS] GX 1.0 updated docs for Expectations (#10048)
- [DOCS] Updates broken links to code examples in github (#10059)
- [DOCS] Update feedback modal (#10054)
- [DOCS] Included all new expectations, grouped by DQ issue (#10062)
- [DOCS] 0.18.9 -> 0.18.17 changelogs (#10068)
- [DOCS] GX 1.0 Checkpoint guides (#10055)
- [DOCS] 1.0 Customize Expectations guides (#10066)
- [DOCS] Updated integrated support policy for 1.0 (#10064)
- [DOCS] Fix typo (#10083)
- [DOCS] Fix styles for hovering button in terminal (#10090)
- [DOCS] update gx cloud and airflow doc (#10025)
- [DOCS] Updated documentation for the GX Scheduler (#10103)
- [DOCS] 1.0 connect to filesystem data guides (#10115)
- [DOCS] 1.0 guides for connecting to data in dataframes (#10133)
- [DOCS] 1.0 guide for getting sample data for testing or data exploration (#10136)
- [DOCS] Added more expectations for Cloud, sorted by DQ issue (#10137)
- [DOCS] Incorporating review feedback (#10138)
- [DOCS] first draft for Data Quality: Schema tech doc (#10022)
- [DOCS] Update docs to include Runner and suppress Agent (#10139)
- [DOCS] Typo corrections in GX Cloud docs (#10156)
- [DOCS] Integrate feedback modal with Jira (#10110)
- [DOCS] DSB-961: Fix table of contents highlighting (#10152)
- [DOCS] Add dedicated page for scheduler (#10158)
- [DOCS] 1-0 guide: how to toggle analytics collection (#10166)
- [DOCS] 1.0 preview docs: Configure project Stores (#10150)
- [DOCS] 1.0 guide for securely storing and accessing credentials and tokens (#10157)
- [DOCS] updated older support policy (#10174)
- [MAINTENANCE] Exclude patterns from codecov reports (#9941)
- [MAINTENANCE] Temporary: xfail tests that hit fastapi (#9946)
- [MAINTENANCE] Clean up extraneous GX Cloud enums (#9947)
- [MAINTENANCE] Add fastapi to docker-compose for mercury (#9948)
- [MAINTENANCE] Changes to allow local testing using mercury's docker-compose (#9976)
- [MAINTENANCE] Ensure that validation definitions and checkpoints save before running (#9963)
- [MAINTENANCE] core expectation metadata (#9985)
- [MAINTENANCE] Export types for all of GX (V1 pre-release) (#9987)
- [MAINTENANCE] Add
metadataproperty to Expectation schemas (#9993) - [MAINTENANCE] Add schemas for Table and Multi-Column Expectations (#9991)
- [MAINTENANCE] Migrate ci to enterprise-arc runners (#9757)
- [MAINTENANCE] Upgrade to pytest 8 (#10006)
- [MAINTENANCE] ruff
0.4.8(#10009) - [MAINTENANCE] Add custom types to Expectation schemas (#9994)
- [MAINTENANCE] Remove unused properties on single Expectation (#10004)
- [MAINTENANCE] Patch for CVE-2024-36039 (#10016)
- [MAINTENANCE] Bump context config version to 4.0 (#10013)
- [MAINTENANCE] Clean up top-level
conftest.py(#10014) - [MAINTENANCE] Refactor metadata for ColumnAggregate Expectations (#10019)
- [MAINTENANCE] Rename
ExpectationConfigurationexpectation_typetotype(#10018) - [MAINTENANCE] Define JSON Schemas for ColumnAggregate Expectations (#10020)
- [MAINTENANCE] configure images to pull through our ecr cache (#10001)
- [MAINTENANCE] Move
mostlyto correct Expectation classes (#10027) - [MAINTENANCE] Add metadata to
ColumnMapExpectations(#10034) - [MAINTENANCE] : change expectation kwarg types (breaking change) (#10051)
- [MAINTENANCE] add json schema field description (#10065)
- [MAINTENANCE] update ignore panda db client warning (#10071)
- [MAINTENANCE] Improve Expectation schemas (#10099)
- [MAINTENANCE] Have DCV point at V1 (#10102)
- [MAINTENANCE] Update
ConfigStr+ConfigUrijson schema definition (#10023) - [MAINTENANCE] Parametrize
TestConnectionError(#10105) - [MAINTENANCE] Loosen
ruamel.yamlpin (v1) (#10106) - [MAINTENANCE] Remove public api decorator from non-public V1 code. (#10111)
- [MAINTENANCE] Update yarn.lock to handle vanta vulnerbilities. (#10114)
- [MAINTENANCE] Pin setuptools, we error with the latest. (#10119)
- [MAINTENANCE] Revert "[MAINTENANCE] Pin setuptools, we error with the latest." (#10123)
- [MAINTENANCE] Allow numpy 2 (#10122)
- [MAINTENANCE] Ruff
0.5.3(#10124) - [MAINTENANCE] Forbid extra attrs on V1 Pydantic models (#10127)
- [MAINTENANCE] Add context.data_sources.get (#10125)
- [MAINTENANCE] mypy -
possibly-undefined(#10092) - [MAINTENANCE] Remove immutability from validation definition (#10141)
- [MAINTENANCE] Add a clause when we reraise exceptions in tuple_store_backend.py (#10160)
- [MAINTENANCE] update_datasource returns the updated datasource (#10170)
- [MAINTENANCE] Temporarily update Pandas pins to unblock V1 prerelease (#10175)
1.0.0a4
- [FEATURE] Remove ExpectationSuite.execution_engine_type (#9841)
- [FEATURE] Directory Asset BatchDefinition API (#9874)
- [FEATURE] DirectoryAsset BatchDefinition API (#9888)
- [FEATURE] update slack renderer to new design (#9919)
- [BUGFIX] Make column_index optional (#9860)
- [BUGFIX] fix sqlalchemy import (#9872)
- [BUGFIX] Ensure that
SlackNotificationActionrenders properly (#9885) - [BUGFIX] Patch issue with
SlackNotificationActionheader rendering (#9903) - [DOCS] Remove Instances of Test Connection from the GX Cloud Docs (#9815)
- [DOCS] Remove Query Asset Content from GX Cloud Docs (#9802)
- [DOCS] added discourse to OSS support (#9847)
- [DOCS] Update get support (#9852)
- [DOCS] Minor Updates to GX Cloud Expectations Topics (#9884)
- [DOCS] Gx 1.0 Introductory content initial reorganization (take 2) (#9869)
- [DOCS] Minor GX Cloud Docs Fixes (#9892)
- [DOCS] Revises the GX component overview for GX 1.0 (#9896)
- [DOCS] Change the texts of the "Was this Helpful?" widget (#9905)
- [DOCS] Updates to About Great Expectations and Community Resources (OSS) (#9912)
- [DOCS] Update 0.18 changelog (#9914)
- [DOCS] Minor Edits to Connect GX Cloud to PostgreSQL (GX Cloud) (#9927)
- [DOCS] Revise "Try GX" for GX 1.0 (#9897)
- [DOCS] reorganizes content under the 1.0 Set up a GX environment topic (#9930)
- [MAINTENANCE] Ruff 0.4.2 (#9833)
- [MAINTENANCE] Enable SIM110 (#9836)
- [MAINTENANCE] Enable SIM211 (#9832)
- [MAINTENANCE] Enable SIM300 (#9834)
- [MAINTENANCE] Enable SIM201 (#9835)
- [MAINTENANCE] Delete dataset directory. (#9842)
- [MAINTENANCE] Finish removing data asset top level package (#9843)
- [MAINTENANCE] Make
SerializableDataContext.createprivate (#9853) - [MAINTENANCE] mypy 1.10 (#9857)
- [MAINTENANCE] Make
ExpectationSuiteimportable from the top level GX namespace (#9854) - [MAINTENANCE] Remove block style datasource and batch from public api (#9858)
- [MAINTENANCE] Remove LegacyDatasource (#9848)
- [MAINTENANCE] set marker tests to not fail fast (#9862)
- [MAINTENANCE] Ensure Spark can start (#9866)
- [MAINTENANCE] Remove test_yaml_config and all integration tests that … (#9861)
- [MAINTENANCE] Actually remove LegacyDatasource (#9867)
- [MAINTENANCE] Remove
DataAssistants(#9859) - [MAINTENANCE] Remove public decorator from anything BatchRequest related (#9871)
- [MAINTENANCE] Skip unsupported time metric (1.0) (#9856)
- [MAINTENANCE] enable tests (#9865)
- [MAINTENANCE] Integration test around pandas ABS partitioning (#9837)
- [MAINTENANCE] Integration tests around s3 batches (#9846)
- [MAINTENANCE] GCS Integration tests around partitioning (#9839)
- [MAINTENANCE] Update context factories to delete by name (#9870)
- [MAINTENANCE]
ExpectationSuiteAPI cleanup (#9875) - [MAINTENANCE] Remove yaml config validator again (#9877)
- [MAINTENANCE] Remove dataconnector tests that reference block style D… (#9879)
- [MAINTENANCE] Remove some references to block style datasource (#9868)
- [MAINTENANCE] Remove URN support (#9886)
- [MAINTENANCE] Rename core partitioners (#9894)
- [MAINTENANCE] Remove legacy
GeCloudStoreBackend(#9893) - [MAINTENANCE] FileDataAsset BatchDefinition API accepts either
strorre.Pattern(#9895) - [MAINTENANCE] Instrument validation workflows (#9889)
- [MAINTENANCE] Remove remaining references to block style datasources (#9881)
- [MAINTENANCE] Refactor legacy
anonymous_usage_statisticsinto new top-level fields (#9891) - [MAINTENANCE] Remove suite CRUD from data_context (#9890)
- [MAINTENANCE] Ensure that actions have names (#9902)
- [MAINTENANCE] Remove simple sqlalchemy datasource (#9900)
- [MAINTENANCE] Remove references to suite crud (#9907)
- [MAINTENANCE] Improve error message around instantiating and saving s… (#9908)
- [MAINTENANCE] Remove BaseDatasource (#9901)
- [MAINTENANCE] Remove DatasourceConfig (#9916)
- [MAINTENANCE] Ruff
0.4.4(#9918) - [MAINTENANCE] Update packaging pipeline to work on 1.0 (#9922)
- [MAINTENANCE] Remove legacy DataConnectors (#9923)
- [MAINTENANCE] Remove batch kwargs (#9932)
- [MAINTENANCE] Move
convert_to_json_serializableto top-level utils package (#9933) - [MAINTENANCE] Ban future use of
convert_to_json_serializable(#9935) - [MAINTENANCE] Remove batching regex from FilePathDataConnector (#9898)
1.0.0a3
- [FEATURE] Add Regex Partitioner (#9792)
- [FEATURE] Fluent BatchDefinition API for Pandas Assets (#9820)
- [FEATURE] Add fluent-style BatchDefinition API to file-backed DataAssets (#9823)
- [FEATURE] BatchDefinition API for Directory DataAsset (#9827)
- [FEATURE] Remove [cloud] optional dependency (#9813)
- [BUGFIX] limit unexpected count if include_unexpected_rows is set (#9781)
- [BUGFIX] Pass in partitioner + batching_regex when creating batch_def… (#9798)
- [BUGFIX] Do not persist interactive batch defs (#9816)
- [BUGFIX]
scrapycompatibility - handledir()inconsistencies (#9830) (#9831) - [DOCS] Link Fix (#9772)
- [DOCS] Adds clarification of
discard_failed_expectationsto 0.18.x OSS quickstart (#9782) - [DOCS] Remove Feedback Widget from Landing Pages (#9780)
- [DOCS] Learn TOC Updates (#9784)
- [DOCS] Update About GX Cloud (#9751)
- [DOCS] Update Docs for GX-Agent Versioning (#9783)
- [DOCS] Add GX Cloud Logs Content (#9766)
- [DOCS] Update agent deploy docs to specify imagePullPolicy of Always (#9805)
- [DOCS] Updates to how to get support (#9809)
- [DOCS] Update docs for Agent Active icon (#9808)
- [DOCS] More updates to the how to get support page (#9818)
- [MAINTENANCE] Update codecov so PRs start passing. (#9764)
- [MAINTENANCE] Make CheckpointAction Annotated (#9761)
- [MAINTENANCE] Rename validations -> validation_results (#9774)
- [MAINTENANCE] Convert QuantileRange from TypedDict to BaseModel (#9767)
- [MAINTENANCE] Remove add_sorters methods (#9773)
- [MAINTENANCE] Clean up legacy checkpoint tests and components (#9749)
- [MAINTENANCE] Generic type for Partitioner (#9785)
- [MAINTENANCE] Retire ColumnDescriptiveMetrics - Develop (#9790)
- [MAINTENANCE] Integration tests around SQL validation workflows (#9788)
- [MAINTENANCE] Remove Spark Partitioners (#9796)
- [MAINTENANCE] Make codecov informational (#9797)
- [MAINTENANCE] Delete legacy checkpoint (#9791)
- [MAINTENANCE] Add unexpected rows expectation code snippet for docs (#9800)
- [MAINTENANCE] Turn on numpy 2 prerelease tests. (#9707)
- [MAINTENANCE] Promote V1 Checkpoint objects (#9803)
- [MAINTENANCE] Remove
include_rendered_contentflag (#9807) - [MAINTENANCE] Remove gallery build pipeline (#9777)
- [MAINTENANCE] Add script to generate public api list. (#9712)
- [MAINTENANCE] Bring back sql_datasource integration tests for backend… (#9812)
- [MAINTENANCE] Ensure that V1 Validator works with Cloud rendered content (#9810)
- [MAINTENANCE] Remove xfail from checkpoint and data docs integration tests (#9811)
- [MAINTENANCE] Enable SIM103 (#9801)
- [MAINTENANCE] Prework for implementing fluent batch definition api for file path assets (#9817)
- [MAINTENANCE] Enable SIM118 (#9819)
- [MAINTENANCE] Delete legacy checkpoint config and result (#9824)
- [MAINTENANCE] Rename
sourcestodata_sources(#9825) - [MAINTENANCE] Update Pandas DataAsset type (#9826)
- [MAINTENANCE] file system integration tests (#9793)
- [MAINTENANCE] Update Pandas Types (#9828)
- [MAINTENANCE] Backfill checkpoint ID/PK integration tests (#9821)
- [MAINTENANCE] SQL backend integration tests (#9822)
1.0.0a2
- [FEATURE]
TableAsset.test_connection()should fail if table is not queryable. (#9198) (#9475) - [FEATURE] Add backend-agnostic partitioners (#9460)
- [FEATURE] v1 59/suite evaluation parameter options (#9474)
- [FEATURE] Add Partitioner to BatchRequest (#9482)
- [FEATURE]
CheckpointFactory(#9413) - [FEATURE] V1 Validation scaffolding (#9508)
- [FEATURE] DataAsset uses partitioner from BatchConfig (#9499)
- [FEATURE]
ValidationConfigStore(#9523) - [FEATURE] Add evaluation parameter support to v1 validator (#9552)
- [FEATURE] Don't break context for invalid datasource configs (#9486)
- [FEATURE] Add ValidationConfig::run (#9571)
- [FEATURE] Enable
ValidationConfigCRUD (#9566) - [FEATURE]
ValidationConfig.save()(#9579) - [FEATURE] Save validation results on ValidationDefinition run (#9599)
- [FEATURE] MetricListMetricRetriever - develop (#9620)
- [FEATURE] V1 Checkpoint (#9590)
- [FEATURE]
Checkpoint.save()(#9676) - [FEATURE] Add support for V1 Cloud Backend endpoints (#9651)
- [FEATURE] Implement TupleFilesystemStoreBackend::get_all (#9687)
- [FEATURE] Implement TupleS3StoreBackend::get_all (#9692)
- [FEATURE] Implement InlineStoreBackend::get_all (#9686)
- [FEATURE] Refactor FilePathDataConnector (#9704)
- [FEATURE] TupleGCSStoreBackend::get_all (#9703)
- [FEATURE] TupleAzureBlobStoreBackend::get_all (#9708)
- [FEATURE] Add BatchRequest.batching_regex (#9710)
- [FEATURE] Implement LegacyBatchDefinition.batching_regex (#9717)
- [FEATURE] Update expectations and checkpoints v1 stores to implement gx_cloud_response_json_to_object_collection (#9718)
- [FEATURE] Add BatchDefinition.batching_regex (#9721)
- [FEATURE] Factory iterators (#9682)
- [FEATURE] BatchDefinition fluent API for SQL Assets (#9732)
- [FEATURE] Batch definition sorting (#9720)
- [FEATURE]
BatchDefinition.get_batch(#9753) - [FEATURE] Add sort_ascending to BatchDefinition fluent API (#9756)
- [BUGFIX] Databricks shared compute fix (#9490)
- [BUGFIX] Fix tabs to reference correct versions for 0.18 and 1.0 (#9489)
- [BUGFIX] Fix test setup to get ephemeral context (#9504)
- [BUGFIX] - Prevent duplicate Expectations in Validation Results when Exceptions are triggered (#9456)
- [BUGFIX] Ensure that
concurrencyis ignored in V1 Cloud contexts (#9553) - [BUGFIX] fix ExpectationConfiguration import in snippet (#9567)
- [BUGFIX] Misconfigured Expectations affecting unassociated Checkpoints (#9491)
- [BUGFIX] Remove counts when showing a sample (#9638)
- [BUGFIX] Patch
ValidationDefinitionround trip serialization/deserialization (#9700) - [BUGFIX] Ensure that
Checkpointdeserializes proper action subclass (#9701) - [BUGFIX] Exclude batch_definitions from _EXCLUDE_FROM_READER_OPTIONS (#9702)
- [DOCS] Update Edit a Checkpoint Configuration (#9484)
- [DOCS] Add 0.18.9 release to docs versions (#9488)
- [DOCS] Corrected and simplified CTAs for getting customer support (#9492)
- [DOCS] Add a Procedure for Adding a Validation to a Checkpoint to the GX Cloud Docs (#9487)
- [DOCS] Pin sphinx extensions (#9505)
- [DOCS] Fix links style (#9503)
- [DOCS] Update the README in the Great Expectations Repository (#9498)
- [DOCS] updating docs cta for workshops DO NOT MERGE UNTIL 2/1 (#9497)
- [DOCS] Remove Beta from GX Cloud Account References (#9506)
- [DOCS] Adds titles to all codeblocks (#9447)
- [DOCS] Fix regex when checking for snippet names (#9509)
- [DOCS] Update styles for autogenerated index pages (#9481)
- [DOCS] Remove GitHub badge for mobile (#9467)
- [DOCS] Fix interactions with versioning dropdown (#9493)
- [DOCS] Resources dropdown should be visible at all times (#9514)
- [DOCS] Highlight section docs in sidebar (#9417)
- [DOCS] Was This Helpful section (#9426)
- [DOCS] Archive 0.17 (#9520)
- [DOCS] Add "Was it Helpful?" section to the Setup overview page (#9526)
- [DOCS] Update README.md (#9555)
- [DOCS] Updating breadcrumbs styles (#9554)
- [DOCS] Feedback Modal (#9525)
- [DOCS] Update terminal and code snippets style (#9419)
- [DOCS] Update font size of left navigation (#9561)
- [DOCS] Adds titles to code blocks in v0.18.x docs (#9563)
- [DOCS] Add Missing Prerequisites Content (#9575)
- [DOCS] Build out 1.0 docs ToC with stub pages for sections in progress (#9564)
- [DOCS] Changes the default ToC when a page match isn't found on version change. (#9581)
- [DOCS] Update Account Identifier Field Description (#9583)
- [DOCS] Add Snowflake Connection Syntax Example (#9588)
- [DOCS] Docs announcement bar copy update (#9595)
- [DOCS] Posthog Instance (#9592)
- [DOCS] Revise OSS Installation and Setup Guidance for Google Cloud Storage (#9600)
- [DOCS] Hide duplicate tabs (#9570)
- [DOCS] Update Instances of
python title="Jupyter Notebook"(#9604) - [DOCS] Removes remaining OSS docs from the prerelease version (#9582)
- [DOCS] Revise OSS Installation and Setup Guidance for SQL Data Sources (#9609)
- [DOCS] Consolidate Install Additional Dependencies Content (#9611)
- [DOCS] Changes to the docs API page (#9613)
- [DOCS] Bring back 1.0 changelog (#9621)
- [DOCS] remove extraneous expectation docs (#9623)
- [DOCS] Update and Edit Manage Data Contexts (#9628)
- [DOCS] mdx Error Updates (#9548)
- [DOCS] Revises the guidance under the 1.0 prerelease Manage Expectation topic (#9639)
- [DOCS] Update and Edit Manage Credentials (#9642)
- [DOCS] Move expectations gallery link inside navbar (#9662)
- [DOCS] Adds 1.0 Validation Definitions guide (#9663)
- [DOCS] Remove CE templates & examples (#9672)
- [DOCS] GX Cloud Proof of Concept (#9635)
- [DOCS] Adds guidance around Checkpoints in 1.0 (#9675)
- [DOCS] Corrects broken import for prerequisites in v0.18 connect to Filesystem Data Assets page (#9679)
- [DOCS] Update Core Expectation Docstrings w/ Inline Examples for Gallery (#9603)
- [DOCS] Update and Revise Manage Data Docs (#9699)
- [DOCS] Upgrade docusaurus 3.0 (#9667)
- [DOCS] GX OSS Quickstart Updates (#9726)
- [DOCS] Update
add_expectation_configurationmethod in Create and edit Expectations (#9728) - [DOCS] Update Template Link in Create a Custom Batch Expectation (#9731)
- [DOCS] Update GX Cloud Docs to Reflect UI Updates (#9729)
- [DOCS] Make left navigation responsive (#9652)
- [DOCS] Fix Overlay Bug on Desktop (#9741)
- [DOCS] Update GX Cloud Documentation to Reflect New Data Asset Workflow (#9694)
- [DOCS] Add Installation and Setup Guidance for Amazon S3 to Install Additional Dependencies (#9719)
- [DOCS] Adds Changelog to the 1.0 ToC (#9754)
- [DOCS] GX Cloud Content Adjustments (#9746)
- [MAINTENANCE] Run marker tests on python 3.11 (#9455)
- [MAINTENANCE] Customize coderabbit (#9479)
- [MAINTENANCE] Remove change file dependency for running doc tests (#9448)
- [MAINTENANCE] Ensure that
DataContextConfighas a consistent shape when args are omitted (#9469) - [MAINTENANCE] Run docs tests on merge queue. (#9496)
- [MAINTENANCE] Update KlDivergence to KLDivergence. (#9501)
- [MAINTENANCE] Revert Add batch_configs to context schema (#9511)
- [MAINTENANCE] Remove hashed column partitioner (#9510)
- [MAINTENANCE] Remove
context.get_expectation_suitein favor of factory method (#9513) - [MAINTENANCE] Remove
DataContextdependency fromExpectationSuite(#9512) - [MAINTENANCE] Start refactoring codebase to use checkpoint factory CRUD (#9507)
- [MAINTENANCE] Backfill test around validator::validate taking evaluation parameters (#9516)
- [MAINTENANCE] Turn off publishing pact contracts for 1.0 API (#9531)
- [MAINTENANCE] Rename
ge_cloud_idtoid(#9529) - [MAINTENANCE] Sample getting a file passing mdx check (#9532)
- [MAINTENANCE] Remove experimental concurrency support (#9519)
- [MAINTENANCE] Improve typing and comment (#9534)
- [MAINTENANCE]
ruff0.2.2(#9538) - [MAINTENANCE] Make Checkpoint's context dependency optional (#9521)
- [MAINTENANCE] Update referential integrity test so DB is only created once -
develop(#9544) - [MAINTENANCE] Remove fluent partitioner methods from DataAssets (#9517)
- [MAINTENANCE] Backfill test around BatchConfig partitioners being used by validators (#9547)
- [MAINTENANCE] Remove context from v1 Validator and add helper to project manager (#9560)
- [MAINTENANCE] Remove manual validation around evaluation parameters in core expecta… (#9537)
- [MAINTENANCE] Lower allowed max
C901mccabecomplexity score (#9569) - [MAINTENANCE] Prettier yaml formatting (#9562)
- [MAINTENANCE] Rename ExpectationSuite.expectation_suite_name and ExpectationSuiteIdentifier.expectation_suite_name to name (#9559)
- [MAINTENANCE] Ensure proper
ValidationConfigserialization (#9558) - [MAINTENANCE] CDMs - Metrics as ENUM -
develop(#9573) - [MAINTENANCE] Ensure proper ID support within
ValidationConfigStore(#9574) - [MAINTENANCE] Replace
blackformatter withruff format(#9536) - [MAINTENANCE] Formatting, lint ignores
.git-blame-ignore-revs(#9578) - [MAINTENANCE] Delete ExpectationSuite attribute data_asset_type (#9591)
- [MAINTENANCE] Ban direct
unittest.mock.Mock/MagicMockusage (#9586) - [MAINTENANCE] Temporarily disable public_api check during V1 development (#9587)
- [MAINTENANCE] Fix cloud e2e test (#9601)
- [MAINTENANCE] Delete extraneous validation actions (#9598)
- [MAINTENANCE] Make Validation definitions immutable (#9606)
- [MAINTENANCE] Refactor
ColumnDescriptiveMetricsMetricRetrieverto parent class (develop) (#9614) - [MAINTENANCE] Remove context dependency from Validation Actions (#9605)
- [MAINTENANCE] Add
assetanddatasourceproperties toValidationDefinition(#9619) - [MAINTENANCE] Refactor
ValidationActionto use Pydantic (#9617) - [MAINTENANCE] Rename legacy batch definitions (#9629)
- [MAINTENANCE] Add invoke docs --clear command. (#9636)
- [MAINTENANCE] Remove dataset (#9608)
- [MAINTENANCE] Reduce cyclo complexity in some functions. (#9634)
- [MAINTENANCE] Delete great_expectations/data_asset/ (except for util.py) (#9637)
- [MAINTENANCE] Reduce max-complexity from
10->8(#9622) - [MAINTENANCE] Change line-length to 100 (#9584)
- [MAINTENANCE] TableMetrics - BatchInspector updates (develop) (#9646)
- [MAINTENANCE]
Checkpoint.run()(#9647) - [MAINTENANCE] Rename batch_definition_options to batch_parameters (#9653)
- [MAINTENANCE] Rename BatchConfig to BatchDefinition (#9645)
- [MAINTENANCE] Rename ValidationConfig to ValidationDefinition (#9654)
- [MAINTENANCE] Add organization ID to analytics payloads (#9643)
- [MAINTENANCE] Add validation result URL support within V1 Checkpoint (#9656)
- [MAINTENANCE] V1 Checkpoint Store (#9659)
- [MAINTENANCE] Rename context.validations to context.validation_definitions (#9660)
- [MAINTENANCE] Use Codecov for test coverage reports (#9664)
- [MAINTENANCE] Bump webpack-dev-middleware from 5.3.3 to 5.3.4 in /docs/docusaurus (#9655)
- [MAINTENANCE] add
.git-blame-ignore-revsfor formatting and noqa additions (#9668) - [MAINTENANCE] Decouple checkpoint factory from v0.18 checkpoint (#9665)
- [MAINTENANCE] Bump express from 4.18.2 to 4.19.2 in /docs/docusaurus (#9666)
- [MAINTENANCE] Cloud tests - don't error on
GxInvalidDatasourceWarning-package_resourcesdeprecation (#9673) - [MAINTENANCE] Wire up V1 Checkpoint with factory (#9670)
- [MAINTENANCE] Bump follow-redirects from 1.15.4 to 1.15.6 in /docs/docusaurus (#9631)
- [MAINTENANCE] Add
suite_nametoExpectationSuiteValidationResult(#9677) - [MAINTENANCE] Lint Docs (#8936)
- [MAINTENANCE]
mypy 1.9+ begin wider tests type-checking (#9678) - [MAINTENANCE] Typing improvements in
test_metadatasource(#9681) - [MAINTENANCE] Clean up
ValidationActionAPI (#9680) - [MAINTENANCE] enable TRYceratops linting rules (#9684)
- [MAINTENANCE] Update git-blame-ignore-revs file to ignore changes in #9684 (#9688)
- [MAINTENANCE] Add after_n_builds to codecov default rules (#9691)
- [MAINTENANCE] Cleanup Unused Comments (#9697)
- [MAINTENANCE] Refactor FilePathDataConnector (#9706)
- [MAINTENANCE] Provide default empty action list in V1 Checkpoint (#9709)
- [MAINTENANCE] Migrate misc actions to V1 pattern (#9689)
- [MAINTENANCE] Migrate
OpsgenieNotificationAction(#9716) - [MAINTENANCE] Refactor
EmailActionfor V1 (#9725) - [MAINTENANCE] Bump katex from 0.16.9 to 0.16.10 in /docs/docusaurus (#9722)
- [MAINTENANCE] Improve mechanism to share results between checkpoint actions (#9730)
- [MAINTENANCE] Rename BatchRequestOptions to BatchParameters (#9736)
- [MAINTENANCE] pre-commit autoupdate (ruff 0.3.5) (#9685)
- [MAINTENANCE] Make actions sortable (#9733)
- [MAINTENANCE] Pin
snowflake-sqlalchemydue to1.5.2runtime bug (#9744) - [MAINTENANCE] ruff
0.3.7(#9747) - [MAINTENANCE] Remove
docs_rtd(#9737) - [MAINTENANCE] Migrate
SlackNotificationActionto V1 pattern (#9734) - [MAINTENANCE] Rename Evaluation Parameter to Suite Parameter (#9743)
- [MAINTENANCE] Migrate
MicrosoftTeamsNotificationActionto V1 (#9745) - [MAINTENANCE] Enable
SIM101+SIM114(#9758) - [MAINTENANCE] Type checking
test_metadataource(#9759) - [MAINTENANCE] Enable
run_idoverrides forCheckpointandValidationDefinition(#9760)
1.0.0a1
- [FEATURE] EVR/SVR describe (#9277)
- [FEATURE] Update how-to docs to use describe() (#9280)
- [FEATURE] Handle distinct_id inside analytics config (#9266)
- [FEATURE] Script to move doc code snippets out of tests and into docs (#9297)
- [FEATURE] Example run for the SnippetMover (10) (#9337)
- [FEATURE] ExpectationSuite accepts Expectations on init (#9364)
- [FEATURE] Use SuiteFactory API in
tests/actions(#9353) - [FEATURE]
UnexpectedRowsExpectation(#9377) - [FEATURE]
unexpected_rows_query.tablemetric (#9412) - [FEATURE] Allow using EmailAction with email servers that require no authentication (fixes #9379) (#9388) (thanks @MarcelBeining)
- [FEATURE] Add Partitioner field to BatchConfig (#9432)
- [FEATURE]
TableAsset.test_connection()should fail if table is not queryable. (#9198) (#9475) - [BUGFIX] Remove a stray git pull (#9229)
- [BUGFIX] Fix docs build for 0.17 as a prior version (#9234)
- [BUGFIX] Remove unneeded and problematic git wrangling in docs build (#9288)
- [BUGFIX] Close quotes in snippet references (#9309)
- [BUGFIX] Revert relative links (#9343)
- [BUGFIX] remove connection log for v1 (#9135)
- [BUGFIX] Move script_example from 0.17.23 -> 0.17 (#9403)
- [BUGFIX] Fix algolia facetFilters (#9415)
- [BUGFIX] Find/replace localhost with path relative to host (#9429)
- [BUGFIX] Fix sphinx linx (#9434)
- [BUGFIX] Add 0.17 to docs links for 0.17 (#9439)
- [BUGFIX] Get docs tests passing (#9449)
- [BUGFIX] Patch Pandas/SQLAlchemy Snowflake issue (#9459)
- [BUGFIX] Fix pandas dependency issues for Snowflake and Clickhouse (#9465)
- [DOCS] Expectation Management Script (#9213)
- [DOCS] Update docs versioning readme (#9230)
- [DOCS] Update Connect to Generic SQL Database Data Assets to Include Creating an Asset (#9240)
- [DOCS] Update README.md for broken links (#9184) (thanks @cnabro)
- [DOCS] Remove References to GX_CLOUD_SNOWFLAKE_PASSWORD (#9251)
- [DOCS] Add CTA announcement bar for public preview to docs (#9274)
- [DOCS] Update GX Cloud Documentation to Reflect Move to Org Agent (#9204)
- [DOCS] Reduce Button Text (#9313)
- [DOCS] Corrects invalid redirects (#9321)
- [DOCS] Hot fix for docs cta bar (#9320)
- [DOCS] Add Redirect for GX Cloud Documentation (#9333)
- [DOCS] update or remove outdated integrations, links; components (#9307)
- [DOCS] Adds redirect rule for an outdated link (#9342)
- [DOCS] updates relative href to absolute (#9344)
- [DOCS] adds additional bulk redirects for
learnpages (#9350) - [DOCS] Remove outdated integrations and links from versioned docs (#9355)
- [DOCS] adds redirect for outdated glossary path (#9358)
- [DOCS] DOC-648: Update About GX Cloud to reflect GX Agent running in deployment environment (#9327)
- [DOCS] Typography updates (#9236)
- [DOCS] corrects mislabeled element in top navbar (#9369)
- [DOCS] Quick fix: styles for left navigation (#9372)
- [DOCS] Remove Missingness Assistant Content from GX Cloud Documentation (#9315)
- [DOCS] Updating Tabs' Styles (#9287)
- [DOCS] Consolidate GX Cloud and GX OSS Support Topics (#9367)
- [DOCS] Cut v 0.18 docs (#9395)
- [DOCS] Customization of Header (#9243)
- [DOCS] Add resources dropdown to navbar (#9349)
- [DOCS] remove explicit facet (#9416)
- [DOCS] update docs readme (#9409)
- [DOCS] Convert reference/api to relative links for 0.18.8 (#9442)
- [DOCS] Remove version prefix from 0.18 docs (#9443)
- [DOCS] Adds Expectation API guides for GX Core prerelease (#9424)
- [DOCS] Fix links style in tables (#9427)
- [DOCS] Update Broken Icon Link (#9451)
- [DOCS] Add Content for Connecting to a PostgreSQL Data Asset (#9356)
- [DOCS] Update alerts (#9407)
- [DOCS] Update overview pages style (#9418)
- [DOCS] Add Result Format Content to the GX Cloud Docs (#9461)
- [MAINTENANCE] convert docs build scripts from bash to python (#9222)
- [MAINTENANCE] Add core Expectations to Public API (#9232)
- [MAINTENANCE] Remove broken util function (#9238)
- [MAINTENANCE] Update Expectation Gallery for 1.0 (#9239)
- [MAINTENANCE] Another docs build fix (#9235)
- [MAINTENANCE] Update code to use SuiteFactory pt 1 (#9242)
- [MAINTENANCE] Expectation Gallery only builds from success test cases (#9247)
- [MAINTENANCE] move prepare_prior_versions to allow one version at a time (#9246)
- [MAINTENANCE] Sequence diagrams around the docs build (#9248)
- [MAINTENANCE] BUGFIX Add template_dict to domain_keys: fixes #8998 (#9249) (thanks @Chr96er)
- [MAINTENANCE] Bump jinja2 from 2.11.3 to 3.1.3 in /docs_rtd (#9228)
- [MAINTENANCE] Add upper bound for numpy (#9256)
- [MAINTENANCE] Add typevar around add_expectation (#9254)
- [MAINTENANCE] Run docs build file processing during versionsing, rather than build (#9258)
- [MAINTENANCE] Switch over docs build flow and update readme (#9261)
- [MAINTENANCE]
ruff0.1.14(#9271) - [MAINTENANCE] Enable ruff preview rules (#9273)
- [MAINTENANCE] Move Markdown rendering logic to top-level notes field in Expectation and ExpectationSuite (#9270)
- [MAINTENANCE] Numpy 2 compatibility (initial PR) (#9272)
- [MAINTENANCE] Migrate remaining Expectations to be V1-compatible for Expectation Gallery (#9275)
- [MAINTENANCE] Add data context group for posthog (#9284)
- [MAINTENANCE] allow absolute file links (#9282)
- [MAINTENANCE] fix absolute md links (#9281)
- [MAINTENANCE] replace absolute hrefs in docs (#9279)
- [MAINTENANCE] Add instrumentation for V1 Expectation management APIs (#9241)
- [MAINTENANCE] Revert 1.0 doc changes until we separate out 0.18 and 1.0 doc builds (#9289)
- [MAINTENANCE] Block gallery build (#9290)
- [MAINTENANCE] Remove deprecated fixture mark usage (#9298)
- [MAINTENANCE] Add VersionedLink component (#9300)
- [MAINTENANCE] Remove stray logging (#9302)
- [MAINTENANCE] Remove unused mdx file that had an absolute link. (#9299)
- [MAINTENANCE] Remove salt from V1 analytics anonymizer (#9306)
- [MAINTENANCE] Use verson safe links (#9301)
- [MAINTENANCE] Move react imports to be relative (#9294)
- [MAINTENANCE] Check for snippets in docs (#9310)
- [MAINTENANCE] Fix python max version (#9264)
- [MAINTENANCE] Add Cloud user id to analytics calls (#9260)
- [MAINTENANCE] remove data asset field for exp suite (#9318)
- [MAINTENANCE] Add redirect for old docs (#9319)
- [MAINTENANCE] Move redirect to top and add force flag (#9322)
- [MAINTENANCE] Clean docs before build (#9323)
- [MAINTENANCE] Add renderer to ignore list for public api (#9335)
- [MAINTENANCE] version control 0 17 (#9326)
- [MAINTENANCE] Convert jsx imports to be relative (#9332)
- [MAINTENANCE] Relative mdx imports (#9331)
- [MAINTENANCE] Stop using relative path to docs from 0.17 docs (#9338)
- [MAINTENANCE] Remove unused files (#9347)
- [MAINTENANCE] Delete tests for legacy usage stats platform (#9357)
- [MAINTENANCE] Only use @site/src for CardLink and CardLinkGrid (#9345)
- [MAINTENANCE] Add
descriptiontoExpectationto enable simpler renderered content (#9308) - [MAINTENANCE] Use consistent snakecase when referencing
ExpectColumnPairValuesAToBeGreaterThanB(#9360) - [MAINTENANCE] Update public api report to show both over- and under- … (#9348)
- [MAINTENANCE] Rename expectation to match 0.18.x version (#9362)
- [MAINTENANCE] Fix 2 image links (#9352)
- [MAINTENANCE] Update LinkCard to wrap VersionedLink (#9346)
- [MAINTENANCE] Fix /docs/ references in 0.17 (#9351)
- [MAINTENANCE] Convert 0.17 to use relative imports (#9354)
- [MAINTENANCE] Use VersionedLink instead of where appropriate in 0.17 (#9339)
- [MAINTENANCE] Merge changelog/release updates from v0.18 into
develop(#9376) - [MAINTENANCE] Update snippet script to check versioned_docs (#9383)
- [MAINTENANCE] update pact test for datasources (#9380)
- [MAINTENANCE] Log all duplicate snippets at the same time (#9386)
- [MAINTENANCE] Simplify create_version task (#9384)
- [MAINTENANCE] Move snippets to snippet directory (#9385)
- [MAINTENANCE] Enable
ruffnumpylinting rules (#9390) - [MAINTENANCE] Rename and move V17 snippets to legacy docs dir (#9374)
- [MAINTENANCE] Copy over snippet that was defined in docs/ but referen… (#9391)
- [MAINTENANCE] Remove legacy usage statistics (#9398)
- [MAINTENANCE] Set retry to 0 on CloudDataStore (#9295)
- [MAINTENANCE] namespace snippets (#9399)
- [MAINTENANCE] Update versions.json and the docusaurus build to reflect 0.17 (#9393)
- [MAINTENANCE] Update docs create version script to omit patch (#9394)
- [MAINTENANCE] Only look for snippets in docs directories (#9392)
- [MAINTENANCE] block contrib pipeline from deploying on develop. (#9402)
- [MAINTENANCE] ExpectationSuite.name is source of truth (#9396)
- [MAINTENANCE] Support Markdown formatting within Expectation description rendering (#9375)
- [MAINTENANCE] Use
{batch}instead of{active_batch}in SQL-based Expectation queries (#9411) - [MAINTENANCE] Remove more refs to usage statistics (#9401)
- [MAINTENANCE] docs build: throw on broken markdown link (#9404)
- [MAINTENANCE] Rename Splitter to Partitioner (#9408)
- [MAINTENANCE] Remove old file-processing code no longer needed for docs build (#9410)
- [MAINTENANCE] Remove unused docs_pending directory (#9414)
- [MAINTENANCE] Clean up Checkpoint run API (#9433)
- [MAINTENANCE] Remove more params from Checkpoint API (#9435)
- [MAINTENANCE] Remove
context.run_checkpoint(#9438) - [MAINTENANCE] Re-add v1 doc snippet tests (revert 9289) (#9437)
- [MAINTENANCE] Start deleting uses of
test_yaml_config(#9445) - [MAINTENANCE] Update CI trigger to recognize pre-release candidates (#9450)
- [MAINTENANCE] Update CI trigger regex again (#9452)
- [MAINTENANCE] Add Pandas/SQLAlchemy warning to ignores list to unblock V1 prerelease (#9453)
- [MAINTENANCE] Only do docs checks and build on develop. (#9454)
- [MAINTENANCE] Ignore pandas
DeprecationWarningfor legacyPandasDataset(#9472)
Older Changelist
Older changelist can be found at docs/docusaurus/versioned_docs/version-0.18/oss/changelog.md