#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 МБ в память.