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