apache/beam · error · ValueError
Unsupported database adapter type
Error message
Unsupported database adapter type: {self.name} What it means
DatabaseTypeAdapter.to_sqlalchemy_dialect maps the adapter enum (POSTGRESQL, MYSQL, SQLSERVER) to a sqlalchemy dialect prefix; an unrecognized enum member falls through and raises ValueError. This happens only if a new enum value was added without a corresponding dialect mapping.
Solutions
- Use one of the supported values: POSTGRESQL, MYSQL, or SQLSERVER
- Add the new member to to_sqlalchemy_dialect's mapping if you control the code
- Check installed apache-beam version for enum compatibility with your config
Example fix
// before DB_TYPE = DatabaseTypeAdapter.ORACLE # unmapped member // after DB_TYPE = DatabaseTypeAdapter.POSTGRESQL # supported adapter
Defensive patterns
Strategy: validation
Validate before calling
supported = {DatabaseTypeAdapter.POSTGRESQL, DatabaseTypeAdapter.MYSQL, DatabaseTypeAdapter.SQLSERVER}
if adapter not in supported:
raise ValueError(f'{adapter} not supported; use one of {supported}') Try / catch
try:
dialect = adapter.to_sqlalchemy_dialect()
except ValueError as e:
log.error('falling back to postgresql: %s', e)
dialect = DatabaseTypeAdapter.POSTGRESQL.to_sqlalchemy_dialect() Prevention
- Only use enum members documented as supported
- If extending the enum, add the dialect mapping and a test in the same change
- Pin apache-beam versions when configs reference enum members
When it happens
Trigger: Calling to_sqlalchemy_dialect (directly or via start_sql_db_container) on a DatabaseTypeAdapter member not covered by the if/elif chain.
Common situations: Extending the enum with a new adapter (e.g. Oracle) in a fork or newer Beam version without updating the mapping; monkeypatching/constructing a fake enum member in tests.
Related errors
- change_function must be 'CHANGES' or 'APPENDS', got
- Create disposition has to be one of the following…
- CustomQueryConfig must provide a valid query_fn
- Database host cannot be empty
- Instance connection URI cannot be empty
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/449473a54ce5730a.
Report an issue: GitHub.
Appendix: source
Thrown at sdks/python/apache_beam/transforms/enrichment_handlers/cloudsql.py:110
class DatabaseTypeAdapter(Enum):
POSTGRESQL = "pg8000"
MYSQL = "pymysql"
SQLSERVER = "pytds"
def to_sqlalchemy_dialect(self):
"""Map the adapter type to its corresponding SQLAlchemy dialect.
Returns:
str: SQLAlchemy dialect string.
"""
if self == DatabaseTypeAdapter.POSTGRESQL:
return f"postgresql+{self.value}"
elif self == DatabaseTypeAdapter.MYSQL:
return f"mysql+{self.value}"
elif self == DatabaseTypeAdapter.SQLSERVER:
return f"mssql+{self.value}"
else:
raise ValueError(f"Unsupported database adapter type: {self.name}")
class ConnectionConfig(ABC):
@abstractmethod
def get_connector_handler(self) -> Callable[[], DBAPIConnection]:
pass
@abstractmethod
def get_db_url(self) -> str:
pass
@dataclass
class CloudSQLConnectionConfig(ConnectionConfig):
"""Connects to Google Cloud SQL using Cloud SQL Python Connector.
Args:
db_adapter: The database adapter type (PostgreSQL, MySQL, SQL Server).View on GitHub (pinned to 12126d8942)