diff --git a/great_expectations/execution_engine/sqlalchemy_execution_engine.py b/great_expectations/execution_engine/sqlalchemy_execution_engine.py index f14c281dad26..1b90a97c95c2 100644 --- a/great_expectations/execution_engine/sqlalchemy_execution_engine.py +++ b/great_expectations/execution_engine/sqlalchemy_execution_engine.py @@ -1187,9 +1187,20 @@ def _organize_metrics_by_domain( # noqa: C901 # FIXME ) domain_batches[domain_id]["metric_ids"].append(metric_to_resolve.id) else: - domain_batches[domain_id]["select"].append( - metric_fn.label(metric_to_resolve.metric_name) - ) + 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]["metric_ids"].append(metric_to_resolve.id) for domain_id in list(domain_batches.keys()):