SQLAlchemy PyHive ограничивает размер результата запроса в МБ

#python #hive #sqlalchemy #presto #pyhive

Вопрос:

Я использую PyHive с SQLAlchemy DB-API (асинхронный). В моей таблице Hive миллионы записей, если я выполню:

 SELECT * FROM table
 

Он загружает миллионы записей в память. Есть ли способ ограничить размер результата запроса определенным размером, скажем, 5 МБ?

Я отбрасываю все результаты размером более 5 МБ. Миллионы записей могут составлять 100 МБ, но я действительно хочу загрузить столько данных в свой код Python.

Например, если:

 SELECT * FROM table
 

1000 строк = 5 МБ для таблицы, SQLAlchemy вернет мне только 1000 строк.

Для другого запроса, например:

 SELECT * FROM table2
 

здесь 100 000 строк = 5 МБ для таблицы 2, SQLAlchemy вернет 100 000 строк.

Таким образом, у меня не заканчивается память на моем клиенте. Примеры просты, но могут быть сложные SQL-соединения, и я хочу ограничить размер результата запроса на основе МБ данных.

Есть ли способ добиться этого с помощью SQLAlchemy или нужно изменить сервер Hive amp; Presto для достижения такого поведения?

Комментарии:

1. Вы можете ограничить количество строк, возвращаемых в запросе: SELECT * FROM table1 LIMIT 1000 . Запросы SQLAlchemy имеют соответствующий limit() метод.

2. @snakecharmerb Я знаю предложение limit, но мой вопрос заключается в том, чтобы динамически добавлять ограничение в зависимости от размера результата запроса. Я не хочу каждый раз обязательно ограничивать его определенным количеством строк. Если я могу загрузить миллионы строк в пределах 5 МБ, я тоже могу загрузить миллионы строк. Я просто не хочу загружать > X МБ в память.