我需要使用线程执行Hive sql或MySQL sql。
但是我不知道sql结果大小。昨天,有人执行了像
这样的SQLselect column1 from table1 where id = 1
和column1返回一个250M+的结果,这会导致内存泄漏。
那么,在获取SQL结果集之前,是否有方法可以确定它的大小呢?
我可以得到sql连接套接字fd,并计算这个链接上的数据量吗?
单独设置fetchSize可能不足以让MySQL驱动程序开始从DB流式传输数据,而不是一次加载所有数据。你可以试试
stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);stmt.setFetchSize (Integer.MIN_VALUE);
还有两个选项
- 使用row_number函数并限制读取块中的数据
var a = SELECT count(*) FROM表1Var i= a/100000
而i> 0
SELECT column from ()SELECT Column1, row_number() over(order by Column1) rwn FROM Table1)T1 where rwn between i and 100000*i我张=
选项2将结果存储到临时表或CSV文件中,并使用临时表或CSV文件