В чем разница между Statement.setMaxRows и Statement.setFetchsize в Hive
Я запускаю запросы против Hive. Те же запросы должны работать с другими драйверами JDBC, то есть с другими реляционными базами данных.
Я не могу использовать метод Statement.setFetchSize, потому что он не поддерживается в Hive JDBC 0.13.0.
Я пытаюсь обойти это, поэтому я пришел к другому подобному методу: Statement.setMaxRows
В каких случаях я должен использовать Statement.setMaxRows против Statement.setFetchsize?
Можно ли использовать их взаимозаменяемо?
Благодарю.
1 ответ
Нет, вы не можете использовать их взаимозаменяемо. Они делают разные вещи. SetMaxRows = количество строк, которые могут быть возвращены в целом. setFetchSize = число, которое будет возвращаться в каждом цикле базы данных, т.е.
setFetchSize Дает драйверу JDBC подсказку о количестве строк, которые должны быть извлечены из базы данных, когда требуется больше строк для объектов ResultSet, генерируемых этим оператором.
setMaxRows Устанавливает ограничение на максимальное количество строк, которое любой объект ResultSet, сгенерированный этим объектом Statement, может содержать для данного числа.
Фактически, так как setFetchSize является подсказкой, драйвер может игнорировать это и делать то, что считает нужным. Так что не беспокойтесь, что Hive JDBC не поддерживает это.
Обратите внимание, что все, что делает setMaxRows, это
уменьшение размера объекта ResultSet. Это не повлияет на скорость запроса. setMaxRows не меняет фактический SQL - например, используя top/limit/rownum - поэтому он не меняет работу, выполняемую БД. Запрос вернет больше результатов, чем ваш лимит, если будет больше результатов для возврата, а затем обрежьте их, чтобы они соответствовали вашему ResultSet.
Этот ответ хорошо объясняет, как важен setFetchSize:
очень важно для производительности и управления памятью в JVM, поскольку оно контролирует количество сетевых вызовов от JVM к базе данных и, соответственно, объем оперативной памяти, используемой для обработки ResultSet.
Кстати, setFetchSize может быть установлен на java.sql.Statement, а также java.sql.ResultSet. Значение по умолчанию устанавливается объектом Statement, который создал набор результатов. Размер выборки может быть изменен в любое время. И у Hive JDBC есть собственный HiveQueryResultSet с методом setFetchSize.