Great Expectations version 1.23.2 was published on September 28, 2026. This patch release addresses runtime failures triggered by SQLAlchemy 2.1 on Python 3.11 environments, capping specific SQL extras while restoring query execution across multiple database backends. It also resolves regex evaluation inconsistencies on Snowflake and ClickHouse, and restores nested struct metric resolution on Spark.
The full release notes and downloads are on the GitHub release page.
SQLAlchemy 2.1 compatibility and dialect capping ¶
The release of SQLAlchemy 2.1.0 on September 24, 2026, broke Great Expectations 1.23.1 and earlier releases when running on Python 3.11 or newer. Because SQL extras resolved the new major SQLAlchemy release by default, several backend integrations failed during execution or module import.
In 1.23.2, Great Expectations pins the snowflake and databricks extras below 2.1 via sqlalchemy<2.1 (#12269). This cap remains active until downstream dialect drivers add full SQLAlchemy 2.1 support. All other SQL extras now execute directly against SQLAlchemy 2.1 on Python 3.11 and Python 3.12.
This fix resolves several specific engine failures caused by SQLAlchemy 2.1:
- Importing
great_expectationsno longer fails whensnowflake-sqlalchemyis installed. - Databricks queries no longer fail during session initialization.
- Postgres connections without explicit driver designations in
postgresql://URIs fall back gracefully topsycopg2whenpsycopgis absent. - BigQuery queries comparing floating point values no longer fail due to type rendering mismatches (
Doublenow maps toFLOAT64). - SQL Server table reflection correctly detects mixed case and upper case table identifiers.
- Type evaluation for
ExpectColumnValuesToBeOfTypeusingNumericcorrectly matches floating point columns. - Database URL masking preserves raw database paths and query parameters without unwanted character stripping.
Python 3.10 environments are unaffected by this change because SQLAlchemy 2.1 requires Python 3.11 or later.
Regex expectation fixes for ClickHouse and Snowflake ¶
Release 1.23.2 aligns regex Expectation behavior across SQL backends, specifically targeting ClickHouse and Snowflake.
On ClickHouse, regex Expectations previously failed because the underlying engine lacks the regexp_like() SQL function. PR #12222 updates all four regex Expectations to execute on ClickHouse using native regex match primitives, backed by automated integration test coverage. Additionally, PR #12219 strips the Nullable(T) type wrapper on ClickHouse nullable columns prior to type comparison, enabling ExpectColumnValuesToBeOfType and ExpectColumnValuesToBeInTypeList to evaluate underlying SQL types directly.
On Snowflake, the native REGEXP operator automatically anchors patterns to full column string values. This caused unanchored regex patterns in Expectations like ExpectColumnValuesToMatchRegex to evaluate as full string matches rather than substring matches. PR #12221 updates Snowflake regex generation to enforce substring matching semantics while preserving user patterns, bringing Snowflake in line with all other database engines supported by Great Expectations.
Spark nested struct metrics and query parsing ¶
Data engineering pipelines using Apache Spark encounter improved metric resolution for complex data types in 1.23.2.
Expectations relying on the column.value_counts metric, such as ExpectColumnMostCommonValueToBeInSet and ExpectColumnKLDivergenceToBeLessThan, previously failed on dotted nested struct paths such as address.city. Spark queries returned empty evaluation results alongside unresolved column errors. PR #12231 fixes metric field resolution so dotted struct attributes resolve correctly.
This release also resolves several cross engine execution bugs:
- Query parsing in
UnexpectedRowsExpectationno longer misinterprets SQL strings containingJOINinside string literals, comments, quoted identifiers, or column names likejoin_dateas actual table joins (#12249). - Validation results with infinite numeric values, such as PostgreSQL
numericaggregations orpandasDecimalcalculations returning infinity, serialize as float infinity rather than raisingdecimal.InvalidOperation(#12254). - Multithreaded validator construction on Python 3.10 and 3.11 no longer deadlocks or serializes globally across threads (#12232).
Upgrade notes ¶
Teams running Great Expectations on Python 3.11 with Snowflake or Databricks should upgrade using their respective extra flags so dependency resolution enforces the SQLAlchemy cap:
pip install --upgrade 'great_expectations[snowflake]'
If your project installs snowflake-sqlalchemy or databricks-sqlalchemy outside Great Expectations extras, pin sqlalchemy<2.1 manually in your dependency specifications until those dialect packages publish SQLAlchemy 2.1 compatibility.
Note also that deprecation schedules in the documentation now track explicit removal targets for the gx-redshift extra alias as well as cloud context methods (#12225).
Where to get it ¶
- The release notes and wheel packages are on the GitHub release page.
- Source code is available in the great_expectations repository.
- Update your requirements to specify tag
1.23.2.