NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #852 most downloaded on PyPI
Always know what to expect from your data.
Last release 6 days ago
25 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
11 versions withdrawn
withdrawn after publishing
9 years old
369 releases · first in 2017
[FEATURE] Add ColumnSampleValues metric
ColumnSampleValues metric (#11083)ColumnValuesMatchRegexCount metric (#11091)One column per quarter.
Compatibility: new extra gx-redshift
Redshift support via a new gx-redshift extra — 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 for value_set instead 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_context honors context_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")
gx-redshift install extra so Redshift dependencies can be installed with pip install 'great_expectations[gx-redshift]'. (#11092)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_context now respects context_root_dir when scaffolding and reloading a file-backed Data Context, and the overload accepts mode="file" together with context_root_dir. (#11078)<details> <summary>Maintenance</summary>
compute_metrics when called with a single metric, so the result type is known without extra casting. (#11089)</details>
[FEATURE] Fix ExpectColumnValuesToBeOfType bug and also work with sqla2
Compatibility: sqlalchemy minimum set to 1.4.0 (extra bigquery); sqlalchemy minimum set to 1.4.0 (extra gcp)
New gx-redshift extra 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 both redshift and gx-redshift together will fail to resolve, because their SQLAlchemy requirements do not overlap. (#11063)
pip install great_expectations[gx-redshift]
ExpectColumnValuesToBeOfType corrected and SQLAlchemy 2 compatible — ExpectColumnValuesToBeOfType now 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 gx namespace — Importing great_expectations as gx no longer suggests the recursive gx.great_expectations attribute in IDE autocompletion, so the public API is easier to navigate. Accessing gx.great_expectations now raises an AttributeError, while gx.get_context, gx.data_context, gx.core, gx.ExpectationSuite and 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
gx-redshift extra so Redshift support can be installed with pip install great_expectations[gx-redshift]; installing it alongside the older redshift extra will fail to resolve due to non-overlapping SQLAlchemy requirements. (#11063)ExpectColumnValuesToBeOfType and made it work with SQLAlchemy 2. (#11062)<details> <summary>Maintenance</summary>
BatchColumnTypes metric for reporting the column types of a batch. (#11069)great_expectations as gx no longer exposes a recursive gx.great_expectations attribute, improving IDE autocompletion; accessing it now raises an AttributeError while the rest of the public API is unchanged. (#11070)</details>
[FEATURE] Add initial RedShift datasource
<details> <summary>Maintenance</summary>
</details>
[DOCS] KL divergence gallery fix
<details> <summary>Maintenance</summary>
</details>
[FEATURE] Add the ability to run checkpoints with cloud windowed expectations
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))],
)
<details> <summary>Maintenance</summary>
</details>
[MAINTENANCE] refactor to use data_context fixture
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)
<details> <summary>Maintenance</summary>
</details>
[FEATURE] Remove batch_id parameter from Metric classes
QueryRowCount metric (#10964)Domain mixin from Metrics API (#10966)Compatibility: pandas-gbq added (extra bigquery); pandas-gbq added (extra gcp)
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)
<details> <summary>Maintenance</summary>
</details>
Thanks to @data-han (first contribution).
[FEATURE] Batch.compute_metrics()
Batch.compute_metrics() (#10950)ColumnValuesNonNull and ColumnValuesNonNullCount metrics (#10959)table parameter from all Metric Domains (#10954)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 ColumnValuesNonNull and ColumnValuesNonNullCount, 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)
ColumnValuesNonNull and ColumnValuesNonNullCount metrics for inspecting which column values are populated and how many there are. (#10959)Batch.compute_metrics() for requesting metrics from a batch, with typed metric results. (#10950)<details> <summary>Maintenance</summary>
table parameter from metric domains in the new metrics API. (#10954)</details>
Thanks to @VolkovGeoPhy (first contribution).
[BUGFIX] remove unused domain key
Metric.config un-instantiable and excluded from auto-complete (#10938)Metric.name instead of using name inference (#10953)Compatibility: jinja2 minimum 2.10 → 3
New batch-level row count metric — A new BatchRowCount metric computes the number of rows in a batch and works against pandas, Spark, and SQL (Postgres) data sources. Its result is returned as a typed BatchRowCountResult, alongside a new Batch metric 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 table domain key, so resolving metrics no longer emits a flood of unnecessary log messages. (#10951)
BatchRowCount metric and its BatchRowCountResult, plus a Batch metric domain, for computing row counts over an entire batch on pandas, Spark, and SQL data sources. (#10944)table domain key from batch and column-map expectations, eliminating the noisy log messages it produced during metric resolution. (#10951)<details> <summary>Maintenance</summary>
name rather than having one inferred from the class and domain names, making metric naming predictable. (#10953)Metric.config can no longer be instantiated directly and is hidden from editor auto-complete. (#10938)</details>
[BUGFIX] Quote password before passing to SnowflakeURL
MetricConfiguration.id immutable (#10929)test_diagnostic_checklist import error (#10934)Metric and Domain base classes (#10920)Metric.config un-instantiable and excluded from auto-complete (#10938)ExpectTableRowCountToBeBetween works again with runtime parameters — Creating or running ExpectTableRowCountToBeBetween with min_value or max_value supplied 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 $PARAMETER key. (#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)
min_value or max_value is supplied as a runtime parameter; the min/max comparison is only applied when both values are concrete, and parameter dictionaries are validated for a $PARAMETER key. (#10925); are now trimmed and accepted. (#10923)* being rendered as an escaped HTML entity in API reference code blocks. (#10915)<details> <summary>Maintenance</summary>
Metric and Domain base classes for defining and instantiating metrics, such as ColumnValuesBetween from great_expectations.metrics. (#10920)cloud_mode and explicit mode precedence is unchanged. (#10916)</details>
Thanks to @eric-brady (first contribution).
[DOCS] New icons for admonitions
row_condition datetime testing for Pandas and Spark (#10892)strict to Window type (#10906)<details> <summary>Maintenance</summary>
strict setting so it can be used with dynamic-parameter Expectations. (#10906)row_condition datetime test coverage for Pandas and Spark, added Spark support for column_types and 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)</details>
[BUGFIX] row_condition datetimes getting tuncated to dates
row_condition datetimes getting tuncated to dates (#10891)Datetime row_condition values no longer truncated to dates — A row_condition that filters on a datetime column now compares the full timestamp instead of being truncated to a date, so expectations validated against Postgres timestamp columns 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)
row_condition datetime values being truncated to dates against Postgres timestamp columns, and expanded date-type test coverage across backends. (#10891)<details> <summary>Maintenance</summary>
</details>
[BUGFIX] Make validation results' describe_dict return a serializable dict
aws-chunked encoding type data in TupleS3StoreBackend (#10861)databricks-sql-connector to databricks-sqlalchemy in tests (#10886)Compatibility: databricks-sql-connector removed (extra databricks); databricks-sqlalchemy added (extra databricks)
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 of describe() can be passed straight to json.dumps without errors. (#10863)
result = batch.validate(suite)
print(json.dumps(result.describe_dict()))
Databricks SQLAlchemy support via databricks-sqlalchemy — Databricks connectivity now relies on the databricks-sqlalchemy package instead of databricks-sql-connector, which dropped SQLAlchemy support in its 4.0.0 release. Installing the databricks extra pulls in the new dependency. (#10886)
describe_dict() on suite and expectation validation results now returns a JSON-serializable dictionary, so describe() output can be passed to json.dumps. (#10863)<details> <summary>Maintenance</summary>
databricks-sqlalchemy package instead of databricks-sql-connector, which removed SQLAlchemy support in version 4.0.0. (#10886)aws-chunked content encoding. (#10861)</details>
[MAINTENANCE] Pin boto3 due to breaking change
ExpectColumnUniqueValueCountToBeBetween strict_min and strict_max not getting set (#10835)series.between() inclusive to missing conditions (#10837)--force-reinstall flag to invoke deps and update help text (#10834)responses pin due to mypy error with latest release (#10842)boto3 due to breaking change (#10862)snowflake-sqlalchemy (#10838)column_list (#10850)Strict bounds for table row count expectations — ExpectTableRowCountToBeBetween now accepts strict_min and strict_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)
ExpectTableRowCountToBeBetween now supports the strict_min and strict_max parameters. (#10845)add_or_update to the Checkpoint factory so a Checkpoint can be created or replaced in a single call. (#10856)Series.between() now handle all combinations of inclusive bounds correctly across supported pandas versions. (#10837)ExpectColumnUniqueValueCountToBeBetween now honors strict_min and strict_max, which were previously ignored. (#10835)<details> <summary>Maintenance</summary>
column_list with fewer than two columns when the Expectation is created. (#10850)snowflake-sqlalchemy, excluding only the broken 1.7.0 release. (#10838)boto3 to avoid a behavior change in a newer release. (#10862)ExpectColumnValuesToBeInTypeList from the test suite. (#10843)responses version pin to avoid a type-checking error in its latest release. (#10842)invoke deps development task now accepts a --force-reinstall flag and has clearer help text. (#10834)</details>
[BUGFIX] Ensure datetime.time can be serialized to JSON
context.sources with context.data_sources (#10794)mostly field (#10829)posthog to V3 (#10814)context.validation_definitions.add_or_update support (#10818)Compatibility: posthog minimum 2.1.0 removed
Suite parameters in the mostly field — Column map expectations now accept a suite parameter for mostly, 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_update for 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.time values serialize to JSON — Values of type datetime.time can now be serialized, and are written out as ISO-format strings rather than raising a serialization error. (#10795)
mostly field, so the threshold can be provided at validation time. (#10829)context.suites.add_or_update, which adds a suite or updates the existing one with the same name. (#10796)datetime.time values are now serialized to JSON as ISO-format strings instead of failing. (#10795)context.sources with context.data_sources across the documentation, code comments, and error messages. (#10794)<details> <summary>Maintenance</summary>
context.validation_definitions.add_or_update, which adds a validation definition or updates the existing one. (#10818)# type: ignore and # noqa: suppressions, and annotated existing suppressions. (#10817)posthog analytics dependency to version 3. (#10814)</details>
[MAINTENANCE] Deprecate DataContext.add_or_update_datasource
Databricks Fix Type Translation - ExpectColumnValuesToBeInTypeList and ExpectColumnValuesToBeInType (#10791)table.column_type should properly evaluate for Postgres (#10793)print(validation_results.result_url) as it isn't supported (#10760)ValidationAction components (#10752)UnexpectedRowsExpectation observed value renderer (#10779)docs_link_checker.py (#10781)tasks.py to remove reference to isort (#10782)cloud-tests (#10774)DataContext.add_or_update_datasource (#10784)CheckpointResult and ActionContext to be importable from top-level checkpoint module (#10788)cloud-tests environment variables (#10792)databricks compatibility types (#10787)Databricks column type expectations now evaluate correctly — ExpectColumnValuesToBeInType and ExpectColumnValuesToBeInTypeList now 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_type resolves 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)
UnexpectedRowsExpectation results render in Data Docs — UnexpectedRowsExpectation now 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 — CheckpointResult and ActionContext can now be imported directly from the top-level checkpoint module, and the ValidationAction building 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
DataContext.add_or_update_datasource is deprecated. Removal in 2.0.0. (#10784)table.column_type metric now evaluates correctly against Postgres. (#10793)ExpectColumnValuesToBeInTypeList and ExpectColumnValuesToBeInType now translate column types correctly on Databricks. (#10791)table.column_type metric now evaluates correctly against Snowflake. (#10776)UnexpectedRowsExpectation is now reported as an integer, consistent with other expectations. (#10777)UnexpectedRowsExpectation now renders a readable summary in Data Docs. (#10758)ValidationAction and the related components needed to build a custom action are now documented as part of the public API. (#10752)validation_results.result_url, which is not supported. (#10760)<details> <summary>Maintenance</summary>
CheckpointResult and ActionContext can now be imported directly from the top-level checkpoint module, simplifying custom action code. (#10788)DataContext.add_or_update_datasource is now marked as deprecated. (#10784)isort references from the developer task definitions now that linting is handled by ruff. (#10782)UnexpectedRowsExpectation. (#10779)</details>
[BUGFIX] Enable custom actions in V1
exact_match to True for ExpectTableColumnsToMatchSet (#10746)JOIN test cases for UnexpectedRowsExpectation (#10733)Expect table columns to match set (#10748)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"])
<details> <summary>Maintenance</summary>
</details>
[MAINTENANCE] Pin snowflake-sqlalchemy due to breaking change
expect_table_columns_to_match_ordered_list observed value renderer (#10683)UnexpectedRowsExpectation - Unable to use {batch} keyword with partitioner for some backends (#10721)snowflake-sqlalchemy due to breaking change (#10698)ExpectColumnMostCommonValueToBeInSet (#10697)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)
<details> <summary>Maintenance</summary>
</details>
[DOCS] ADR around not using meta fields
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 notes and meta fields. 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 ConditionParser enum 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",
)
<details> <summary>Maintenance</summary>
notes and meta metadata fields, and the suite docstring now shows deleting expectations by suite index. (#10662)ConditionParser enum no longer raises a type error, and row condition coverage was added to the Expectation testing framework. (#10667)</details>
Thanks to @vovavili (first contribution), @yogabonito (first contribution).
[BUGFIX] double-sided z score renderer
0.7.2 (#10629)docstring-parser to 0.16 (#10608)MicrosoftTeamsNotificationAction (#10628)MicrosoftTeamsNotificationAction docstring and import patterns (#10642)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)
<details> <summary>Maintenance</summary>
use_schema flag. (#10658)MicrosoftTeamsNotificationAction docstring so it no longer references YAML configuration, and made its import patterns consistent. (#10642)MicrosoftTeamsNotificationAction. (#10628)</details>
[FEATURE] Add check for valid column type when calling add_batch_def in a sql asset
date min and max values (#10613)row_condition is used (#10632)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_str field used by Azure Blob Storage data sources is now masked when configuration is displayed or serialized, keeping credentials out of output. (#10626)
conn_str field used by Azure Blob Storage data sources is now masked in configuration output. (#10626)date values for minimum and maximum bounds. (#10613)<details> <summary>Maintenance</summary>
multiple_of corrected to multipleOf and a regression test added. (#10627)</details>
[BUGFIX] Add redirect for deploy-gx-agent
mostly and value_set fields (#10571)ExpectationSuite equality should ignore expectation ordering (#10562)MicrosoftTeamsNotificationAction working with V1 (#10593)UnexpectedRowsExpectation returns more than 200 rows (#10604)MicrosoftTeamsNotificationAction as first-class (#10595)ruff and mypy versions to 0.7.1 and 1.13.0, respectively (#10565)MicrosoftTeamsNotificationAction (#10606)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 — UnexpectedRowsExpectation now reports the true number of unexpected rows in its observed_value even when the query returns more than 200 rows, instead of capping the reported count. (#10604)
Email action supports config substitution — EmailAction configuration 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)
UnexpectedRowsExpectation now reports the correct unexpected row count when the query returns more than 200 rows. (#10604)file:/// links. (#10599)EmailAction configuration values now support string substitution, so credentials can be referenced instead of inlined. (#10600)MicrosoftTeamsNotificationAction now works with GX 1.x and sends a redesigned notification card. (#10593)ExpectationSuite objects with the same Expectations in a different order now compare as equal, so suites no longer fail freshness checks because of ordering. (#10562)mostly and value_set Expectation parameters so plain values such as mostly=1 type-check cleanly while the generated schemas stay unchanged. (#10571)MicrosoftTeamsNotificationAction as a first-class, supported action. (#10595)<details> <summary>Maintenance</summary>
MicrosoftTeamsNotificationAction now resolves configuration substitutions, matching the Slack and Email notification actions. (#10606)teams.yml. (#10567)ruff and mypy development dependencies to 0.7.1 and 1.13.0. (#10565)</details>
[BUGFIX] Remove row_condition from Expectations for which it does not apply
row_condition from Expectations for which it does not apply (#10519)Datasource to Public API (#10527)ruff to 0.7.0 (#10535)DataAsset.get_batch_definition to public API docs (#10533)TRY203 Ruff violations (#10540)The great_expectations row condition parser is no longer experimental — Row conditions written with the great_expectations parser 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, and UnexpectedRowsExpectation — no longer accept a row_condition, so a condition can no longer be silently ignored. condition_parser is 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)
row_condition from Expectations where it has no effect (ExpectColumnToExist, ExpectTableColumnCountToBeBetween, ExpectTableColumnCountToEqual, ExpectTableColumnsToMatchOrderedList, ExpectTableColumnsToMatchSet, and UnexpectedRowsExpectation), introduced an enum for condition_parser, and dropped the special-cased pandas default parser for three Expectations. (#10519)Datasource class to the public API documentation. (#10527)<details> <summary>Maintenance</summary>
great_expectations row condition parser, added support for the == condition, and updated the related documentation. (#10524)DataAsset.get_batch_definition to the public API documentation. (#10533)</details>
[DOCS] Add public_api decorators to object factories
public_api decorators to object factories (#10513)snapshottest dependency (#10498)ge_releaser installation pattern in released-related GH Actions (#10509)clickhouse marker in CI (#10512)Compatibility: Python <3.12,>=3.9 → <3.13,>=3.9; snapshottest removed (extra test) (python_version < "3.12")
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)
<details> <summary>Maintenance</summary>
snapshottest test dependency. (#10498)</details>
[MAINTENANCE] Deprecate context.get_datasource
Turn analytics on or off per project from code — Data Contexts now expose an enable_analytics method 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)
context.get_datasource is deprecated; use context.data_sources.get. Removal in 2.0.0. (#10471)context.enable_analytics to explicitly enable or disable analytics for a project; a value stored in the project config now takes precedence over the analytics environment variable. (#10385)<details> <summary>Maintenance</summary>
context.get_datasource is deprecated in favor of context.data_sources.get; it now delegates to that method while keeping its existing error behavior. (#10471)result_url attribute from CheckpointResult. (#10493)</details>
[BUGFIX] Ensure that SlackNotificationAction credentials don't get serialized
SlackNotificationAction credentials don't get serialized (#10476)makefun dependency (#10472)public-api check back to CI (#10449)ipython dependency (#10487)pytz dependency (#10489)urllib3 dependency (#10488)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
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)
<details> <summary>Maintenance</summary>
urllib3 requirement was removed; it is already installed as part of requests. (#10488)pytz requirement was removed from the installed dependency set. (#10489)ipython and ipywidgets requirements were removed from the installed dependency set. (#10487)makefun requirement, used only by the removed data assistants, is no longer installed. (#10472)micromatch from 4.0.5 to 4.0.8 in the documentation site build, picking up fixes for CVE-2024-4067 and CVE-2024-4068. (#10466)webpack from 5.88.2 to 5.94.0 in the documentation site build, including a DOM-clobbering security fix. (#10463)dompurify from 3.0.11 to 3.1.7 in the documentation site build, picking up several sanitizer bypass fixes. (#10465)express from 4.19.2 to 4.21.0 in the documentation site build. (#10464)</details>
[FEATURE] Update Batch.validate() API to accept expectation parameters
Batch.validate() API to accept expectation parameters (#10456)SlackNotificationAction variable substitution (#10443)Databricks (SQL) to Cloud supported list (#10452)Comparable type alias for Expectation min/max value (#10448)mostly from ExpectColumnUniqueValueCountToBeBetween (#10450)QueryMetricProvider total unexpected records (#10432)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 for context.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 — SlackNotificationAction now 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}")
Batch.validate() accepts expectation parameters, letting you pass runtime parameter values when validating against a batch. (#10456)context.data_sources now cover previously missing methods. (#10447)SlackNotificationAction now resolves ${VAR}-style substitutions in its configuration values. (#10443)<details> <summary>Maintenance</summary>
ExpectColumnUniqueValueCountToBeBetween no longer accepts the mostly parameter, which does not apply to column aggregate expectations. (#10450)min_value/max_value parameters use a shared comparable type and now accept date values. (#10448)</details>
[FEATURE] Add windows attribute to support experimental gx-cloud feature
UnexpectedRowsExpectation (#10391)0.5.3 -> 0.6.8 (#10442)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 descriptive NoDataDocsError instead 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 windows field that describes temporal window definitions, enabling dynamic parameters. When empty, the field is omitted from dict serialization and serialized as null in 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)
open_data_docs() now raises a descriptive NoDataDocsError when no Data Docs have been built. (#10439)windows field for configuring temporal window definitions used by dynamic parameters. (#10402)UnexpectedRowsExpectation documentation 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)<details> <summary>Maintenance</summary>
</details>
[BUGFIX] Using {batch} keyword in UnexpectedRowsQuery
{batch} keyword in UnexpectedRowsQuery (#10392)0.18.18 -> 0.18.21 (#10422)SQLAlchemyExectionEngine.get_connection() typing + update column identifier tests (#10399)Compatibility: databricks-sql-connector added (extra databricks); removed extra databricks; new extra spark-connect
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)
databricks package does not provide a sqlalchemy sub-module, and the minimum supported databricks-sql-connector version has been raised. (#10424){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)<details> <summary>Maintenance</summary>
FabricPowerBIDatasource now lives outside the great_expectations.experimental sub-package, removing confusion with the separate contributor experimental package. (#10419)SQLAlchemyExecutionEngine.get_connection() and updated column identifier tests to match fixes carried over from the 0.18.x branch. (#10399)</details>
[BUGFIX] Patch additional issues with data docs page retrieval in checkpoint actions
SQLAlchemyExectionEngine.get_connection() typing + update column identifier tests (#10399)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)
<details> <summary>Maintenance</summary>
</details>
[FEATURE] Replace get_batch_list_from_batch_request with get_batch and get_batch_identifiers_list
Expectation equality to simplify meta and notes checks (#10349)description field to ExpectationConfigurationSchema and render always description over template_str (#10347)BatchDefinitions and ExpectationSuites are up-to-date before saving (#10277)KeyErrors (#10353)BatchDefinition and ExpectationSuite freshness (#10380)test_utils (#10357)ValidationDefinition and Checkpoint freshness (#10381)Compatibility: sqlalchemy minimum set to 1.4.0 (extra snowflake)
List available batches without loading data — BatchDefinition now offers a public get_batch_identifiers_list() method that returns the batch identifiers available for that batch definition. It replaces the old get_batch_list_from_batch_request workflow 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_request has been replaced by get_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 TypeError when building Data Docs links from a checkpoint run; the links are rendered correctly again. (#10374)
BatchDefinition.get_batch_identifiers_list() is now available as a public, non-data-reading way to see which batches a batch definition covers. (#10383)get_batch_list_from_batch_request is replaced by get_batch, which fetches only the batch you need, and by get_batch_identifiers_list for inspecting available batch metadata; documentation has been updated to the new methods. (#10295)TypeError: list indices must be integers when rendering Data Docs page links. (#10374)<details> <summary>Maintenance</summary>
KeyError when configuration or result values are absent. (#10353)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)meta and notes more simply and consistently. (#10349)</details>
[FEATURE] Allow setting result format when calling batch.validate
SlackRenderer and EmailRenderer active_batch_definition issues (#10344) (thanks @masfworld)UnexpectedRowsExpectation renderer and validation improvements (#10334)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)
<details> <summary>Maintenance</summary>
</details>
Thanks to @masfworld (first contribution).
[MAINTENANCE] Loosen raumel pin for CVE-2019-20478
/database path in connection string. (#10273)results_url to result_url (#10283)ValidationDefinition init (#10278)Checkpoints now hold onto the exact Validation Definition you pass in — A Checkpoint now references the same ValidationDefinition instance 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 — ValidationDefinition and 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)
results_url instead of result_url when retrieving a GX Cloud result link. (#10283)/database path element from Databricks SQL connection strings in the documentation and test examples, since it is ignored by the connector. (#10273)<details> <summary>Maintenance</summary>
ValidationDefinition construction by removing a custom initializer override; behavior is unchanged. (#10278)ValidationDefinition as public API so it is included in the published API reference documentation. (#10282)ruamel version pin to allow 0.18 or greater, which resolves CVE-2019-20478. (#10266)</details>
[MAINTENANCE] Revert "[BUGFIX] Ensure that all diagnostics for a Checkpoint's children validation definitions appear in error messages"
<details> <summary>Maintenance</summary>
</details>
[DOCS] Updated deprecation policy
is_added checks in identifier_bundle serialization logic (#10245)teams.yml (#10178)notify_on from base Action (#10179)SuiteParameterStore (#10191)context.validation_definitions.all() works with Cloud (#10216)AddedDiagnostics helper class to is_added flows (#10249)[MAINTENANCE] Patch for CVE-2024-36039
role + warehouse required (#10021)ExpectMulticolumnSumToEqual (#10076)0.18.x (#10095)double_sided (#10084)metadata property to Expectation schemas (#9993)0.4.8 (#10009)conftest.py (#10014)ExpectationConfiguration expectation_type to type (#10018)mostly to correct Expectation classes (#10027)ColumnMapExpectations (#10034)ConfigStr + ConfigUri json schema definition (#10023)TestConnectionError (#10105)ruamel.yaml pin (v1) (#10106)0.5.3 (#10124)possibly-undefined (#10092)[FEATURE] Remove ExpectationSuite.execution_engine_type
SlackNotificationAction renders properly (#9885)SlackNotificationAction header rendering (#9903)SerializableDataContext.create private (#9853)ExpectationSuite importable from the top level GX namespace (#9854)DataAssistants (#9859)ExpectationSuite API cleanup (#9875)GeCloudStoreBackend (#9893)str or re.Pattern (#9895)anonymous_usage_statistics into new top-level fields (#9891)0.4.4 (#9918)convert_to_json_serializable to top-level utils package (#9933)convert_to_json_serializable (#9935)[FEATURE] Add Regex Partitioner
scrapy compatibility - handle dir() inconsistencies (#9830) (#9831)discard_failed_expectations to 0.18.x OSS quickstart (#9782)include_rendered_content flag (#9807)sources to data_sources (#9825)[MAINTENANCE] Cloud tests - don't error on GxInvalidDatasourceWarning - package_resources deprecation
TableAsset.test_connection() should fail if table is not queryable. (#9198) (#9475)CheckpointFactory (#9413)ValidationConfigStore (#9523)ValidationConfig CRUD (#9566)ValidationConfig.save() (#9579)Checkpoint.save() (#9676)BatchDefinition.get_batch (#9753)concurrency is ignored in V1 Cloud contexts (#9553)ValidationDefinition round trip serialization/deserialization (#9700)Checkpoint deserializes proper action subclass (#9701)python title="Jupyter Notebook" (#9604)add_expectation_configuration method in Create and edit Expectations (#9728)DataContextConfig has a consistent shape when args are omitted (#9469)context.get_expectation_suite in favor of factory method (#9513)DataContext dependency from ExpectationSuite (#9512)ge_cloud_id to id (#9529)ruff 0.2.2 (#9538)develop (#9544)C901 mccabe complexity score (#9569)ValidationConfig serialization (#9558)develop (#9573)ValidationConfigStore (#9574)black formatter with ruff format (#9536).git-blame-ignore-revs (#9578)unittest.mock.Mock/MagicMock usage (#9586)ColumnDescriptiveMetricsMetricRetriever to parent class (develop) (#9614)asset and datasource properties to ValidationDefinition (#9619)ValidationAction to use Pydantic (#9617)10->8 (#9622)Checkpoint.run() (#9647).git-blame-ignore-revs for formatting and noqa additions (#9668)GxInvalidDatasourceWarning - package_resources deprecation (#9673)suite_name to ExpectationSuiteValidationResult (#9677)mypy 1.9 + begin wider tests type-checking (#9678)test_metadatasource (#9681)ValidationAction API (#9680)OpsgenieNotificationAction (#9716)EmailAction for V1 (#9725)snowflake-sqlalchemy due to 1.5.2 runtime bug (#9744)0.3.7 (#9747)docs_rtd (#9737)SlackNotificationAction to V1 pattern (#9734)MicrosoftTeamsNotificationAction to V1 (#9745)SIM101 + SIM114 (#9758)test_metadataource (#9759)run_id overrides for Checkpoint and ValidationDefinition (#9760)Feb 15, 2024 2 files
Feb 15, 2024 2 files
tests/actions (#9353)UnexpectedRowsExpectation (#9377)unexpected_rows_query.table metric (#9412)TableAsset.test_connection() should fail if table is not queryable. (#9198) (#9475)learn pages (#9350)ruff 0.1.14 (#9271)description to Expectation to enable simpler renderered content (#9308)ExpectColumnPairValuesAToBeGreaterThanB (#9360)develop (#9376)ruff numpy linting rules (#9390){batch} instead of {active_batch} in SQL-based Expectation queries (#9411)context.run_checkpoint (#9438)test_yaml_config (#9445)DeprecationWarning for legacy PandasDataset (#9472)[BUGFIX] Fix datadocs icons (v0.18)
[BUGFIX] Using {batch} keyword in UnexpectedRowsQuery
[FEATURE] Add UnexpectedRowsExpectation
[FEATURE] Snowflake test for the presence of a schema in test_connection()
test_connection() (#10100)double_sided (#10085)schema_names for SQLAlchemy case-sensitivity compatibility (#10107)great_expectations.compatibility types (#10089)possibly-undefined (#10091)[FEATURE] Add atomic renderer for ExpectMulticolumnSumToEqual
[FEATURE] Snowflake - Better Account Identifier related TestConnectionErrors
[FEATURE] Add new ConfigUri type
[BUGFIX] fix checkpoint name in slack notif
[FEATURE] update slack notifications design
[FEATURE] Remove [cloud] optional dependency
[FEATURE] MetricListMetricRetriever - 0.18.x
[FEATURE] (0.18.x) Don't break context for invalid datasource configs
0.18 (#9545)ColumnDescriptiveMetricsMetricRetriever to parent class (0.18.x) (#9612)[BUGFIX] - Prevent duplicate Expectations in Validation Results
[MAINTENANCE] Ignore Pandas DeprecationWarning for legacy PandasDataset
Pandas DeprecationWarning for legacy PandasDataset (#9471)DeprecationWarning for legacy CustomPandasDataset (#9473)DeprecationWarning (#9478)docs-snippets tests for 0.18.x (#9480)[FEATURE] Add min and max of timestamp cols to Column Descriptive Met…
TableAsset.test_connection() should fail if table is not queryable. (#9198)0.18.x Update get_context() overload to for EphemeralDataContext (#9183)0.18 branch (#9182)0.18.x mypy & ruff updates (#9191)unexpected_value table non-case sensitive (#9224)[BUGFIX] 0.18.x - Apply QueryAsset splitting fix
[BUGFIX] 0.18.x: Microsoft Fabric Semantic Link API update
0.18.x cherrypick create_temp_tables fixes from develop (#9124)create_temp_table=False (#9148)create_temp_table=True with QueryAsset (#9137)how_to_connect_to_postgresql_data uses create_temp_table=True (#9140)test_run_multibatch_data_assistant_and_checkpoint (#9128)[BUGFIX] validator head query limit
[BUGFIX] Fix clickhouse like operators
[FEATURE] Update SnowflakeDatasource connection details
Your coding agent can read these notes before it upgrades. Set up the MCP server →