Я пробовал разные подходы, например отражение (похоже, это не работает, поскольку существующие таблицы не имеют первичных ключей). Прямо сейчас я пытаюсь создать объект таблицы локально с помощью autoload_with=my_engine. Кажется, что таблица создается локально (со схемой, установленной на «Нет»), но когда я пытаюсь выполнить для нее select(), я получаю ошибку разрешения: {PermissionDenied}PermissionDenied («запрос не выполнен: у пользователя нет «bigquery.readsessions.create»» разрешение для «projects/my-project-name». Оно выдается при вызове create_read_session в big_query_read/client.py (модуль в big_query_storage).
Согласно документации:

Я заметил, что мне нужно иметь это разрешение, чтобы взаимодействовать с данными через ORM, но я могу успешно выполнить необработанный SQL Таким образом, я могу взаимодействовать с той же таблицей через SQL и не нуждаюсь в разрешении на создание сеанса чтения.
По сути, это возвращает ожидаемый результат без разрешения:
Код: Выделить всё
from sqlalchemy import text
conn.execute(text("SELECT * FROM MYTABLE;"))
conn.execute(MyTable.select())
Я не могу ничего изменить в GCP, в том числе права пользователя.
Не знаю, проясняет ли это что-нибудь, но я получаю такую таблицу:
table = Table('project.dataset.table', метаданные, autoload_with=engine) --> и созданная таблица имеет ReadOnlyColumnCollection со всеми столбцами.
Я был бы признателен за намек на обходной путь, потому что я не хотел бы использовать необработанные SQL-запросы

Подробнее здесь: https://stackoverflow.com/questions/791 ... sqlalchemy