在清空Phoenix表的时候,发现报异常信息:MutationState size of 512000 isbigger than max allowed size of 500000
上面这句话的意思,就是说删除的数据量超过50万,太大,不允许删除,而这边使用Phoenix表,目的就是存放大数据表,如果不能删除超过50万的数据,将导致使用极其不方便,这里就具体讲解解决方案。
之所以有这个报错,是因为我们采用了Phoenix的轻量级客户端queryserver,删除的操作是在queryserver上执行的,有缓存大小限制。
下面语句可以设置删除的最大条数,可以解决该问题:
val connectionProperties = new Properties()
//默认的500000,改成最大删除2千万
connectionProperties.setProperty("phoenix.mutate.maxSize", "20000000")
connection = PhoenixThinClientUtil.getConnection(connectionProperties)
不过,实际上设置条数太大,删除时超过缓存限制,仍然会报错,另外,非常严重的问题是,删除动作非常缓慢,1千万的记录要删除好久。还有,Phoenix还有限制,可能无法完成删除干净,留下少量数据是可能的。
由于我的表是每天都要情况,重新刷一般数据,所以在代码中先drop表,然后重新create表,速度要快很多,运行几个月,都非常稳定。
drop表语句如下,注意要加上 IF EXISTS,避免表不存在时抛异常:
drop table IF EXISTS t_test