现象
改了Hive表名后查询不了任何数据。
重现方式
开启两个hive命令行,
先在第一个hive查询一条语句:select * from logs1;
然后在第二个hive把表名更改:alter table logs1 rename to logs2;
再在第一个hive查询:select * from logs2;//这时查询成功,但没有数据
调试
想到可能是缓存或者事务的原因。。虽然发现查询条件没有错,但返回结果的预期不一样
public void getMetaData(QB qb) throws SemanticException {
tab = db.getTable(tab_name); // 这里返回了上一次的结果
}
代码太多了。。最终还是没搞懂哪里缓存了。。实际上跟踪调试是经过了mysql-connector的查询,中间结果返回了JDBCResult,但是二进制的结果,看不出什么东西,不知道为什么最后返回的结果却是缓存的。只能随便试试看DataNucleus有那些缓存的参数了,死马当活马医。
找到有以下参数:
datanucleus.query.compilation.cached
datanucleus.query.results.cached
datanucleus.cache.level2.type
最终试了datanucleus.cache.level2.type可行。。
解决方法
在hive-site.xml加上这个参数
<property>
<name>datanucleus.cache.level2.type</name>
<value>none</value>
</property>