Hive改表名后查询不了数据(DataNucleus缓存问题)

现象

改了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>



fatkun

419条评论


You can leave the first : )



发表评论

电子邮件地址不会被公开。