From a5d2b69c9fdce1ad7f304208779f06f018c1b7fd Mon Sep 17 00:00:00 2001 From: Temidayo Akindahunsi <98013820+TemidayoA@users.noreply.github.com> Date: Thu, 4 Jun 2026 11:10:30 +0100 Subject: [PATCH 1/2] fix: deduplicate sql metric aliases to prevent view schema collisions (#10926) --- .../sqlalchemy_execution_engine.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/great_expectations/execution_engine/sqlalchemy_execution_engine.py b/great_expectations/execution_engine/sqlalchemy_execution_engine.py index f14c281dad26..8ed2a18bf227 100644 --- a/great_expectations/execution_engine/sqlalchemy_execution_engine.py +++ b/great_expectations/execution_engine/sqlalchemy_execution_engine.py @@ -1187,8 +1187,21 @@ def _organize_metrics_by_domain( # noqa: C901 # FIXME ) domain_batches[domain_id]["metric_ids"].append(metric_to_resolve.id) else: + alias = metric_to_resolve.metric_name + + # Prevent "Duplicated field name in view schema" SQL errors by deduplicating aliases + existing_aliases = { + col.name for col in domain_batches[domain_id]["select"] if hasattr(col, "name") + } + + if alias in existing_aliases: + suffix = 1 + while f"{alias}_{suffix}" in existing_aliases: + suffix += 1 + alias = f"{alias}_{suffix}" + domain_batches[domain_id]["select"].append( - metric_fn.label(metric_to_resolve.metric_name) + metric_fn.label(alias) ) domain_batches[domain_id]["metric_ids"].append(metric_to_resolve.id) From 6c8957f8104bc7b51010757969f23d581ae82061 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 4 Jun 2026 10:18:12 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../execution_engine/sqlalchemy_execution_engine.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/great_expectations/execution_engine/sqlalchemy_execution_engine.py b/great_expectations/execution_engine/sqlalchemy_execution_engine.py index 8ed2a18bf227..1b90a97c95c2 100644 --- a/great_expectations/execution_engine/sqlalchemy_execution_engine.py +++ b/great_expectations/execution_engine/sqlalchemy_execution_engine.py @@ -1188,21 +1188,19 @@ def _organize_metrics_by_domain( # noqa: C901 # FIXME domain_batches[domain_id]["metric_ids"].append(metric_to_resolve.id) else: alias = metric_to_resolve.metric_name - + # Prevent "Duplicated field name in view schema" SQL errors by deduplicating aliases existing_aliases = { col.name for col in domain_batches[domain_id]["select"] if hasattr(col, "name") } - + if alias in existing_aliases: suffix = 1 while f"{alias}_{suffix}" in existing_aliases: suffix += 1 alias = f"{alias}_{suffix}" - domain_batches[domain_id]["select"].append( - metric_fn.label(alias) - ) + domain_batches[domain_id]["select"].append(metric_fn.label(alias)) domain_batches[domain_id]["metric_ids"].append(metric_to_resolve.id) for domain_id in list(domain_batches.keys()):