Description
sqlalchemy-bigquery does not support sa.JSON() column type. BigQuery has natively supported the JSON type since 2022, but the SQLAlchemy dialect's BigQueryTypeCompiler has no visit_JSON method.
Error
sqlalchemy.exc.UnsupportedCompilationError: Compiler <sqlalchemy_bigquery.base.BigQueryTypeCompiler>
can't render element of type JSON
This occurs when running Alembic migrations that include sa.Column("my_col", sa.JSON(), ...) against BigQuery.
Reproduction
from sqlalchemy import create_engine, MetaData, Table, Column, JSON, String
engine = create_engine("bigquery://my-project/my_dataset")
metadata = MetaData()
Table("test", metadata, Column("id", String()), Column("data", JSON()))
metadata.create_all(engine) # UnsupportedCompilationError
Expected behavior
sa.JSON() should compile to BigQuery's native JSON type in DDL statements, since BigQuery supports it.
Context
Discovered while setting up Alembic migrations for Metaxy's BigQuery metadata store: anam-org/metaxy#1072
Environment
sqlalchemy-bigquery==1.16.0
sqlalchemy==2.0.x
alembic==1.15.x