Dynamic Sc​​hema Discovery 在 Drill-Hive 的情况下没有完成

Dynamic Schema Discovery is not done in case of Drill- Hive

我正在使用 hive 和 drill。

存储插件信息:

{
  "type": "hive",
  "enabled": true,
  "configProps": {
    "hive.metastore.uris": "",
    "javax.jdo.option.ConnectionURL": "jdbc:mysql://localhost:3306/metastore_hive",
    "javax.jdo.option.ConnectionDriverName": "com.mysql.jdbc.Driver",
    "javax.jdo.option.ConnectionUserName": "root",
    "javax.jdo.option.ConnectionPassword": "root",
    "hive.metastore.warehouse.dir": "/user/hive/warehouse",
    "fs.default.name": "file:///",
    "hive.metastore.sasl.enabled": "false"
  }
}

查询和所有工作正常。

然后我想检查它是否自动发现配置单元中新创建的tables。

我开始在嵌入式模式下进行钻取,并在 hive 中使用了一个特定的数据库

use hive.testDB;

这里 testDB 是 Hive 中的一个数据库 tables t1 & t2。然后我查询:

show tables;

它给了我 table 个名字

t1 
t2

我在 hive 中创建了一个 table t3,然后在 Drill 中再次触发 show tables;。 它仍然显示 t1 t2。 5-10 分钟后,我再次发射 show tables;,它显示 t1 t2 t3

我认为在 hive 中添加 t3 后应该立即显示 t3

What can be reason for this behavior and how drill is handling it internally?

我在 Drill 的社区上问了同样的问题并找到了解决方案:

Drill 在其 HiveMetaStoreClient 中使用缓存,以减少 访问 HiveMetaStore 的开销。默认情况下,cache TTL 为 60 秒。

此问题已解决。这个问题包含在 Drill 1.5 中。缓存TTL可以通过配置hive存储插件来缩短。

如果你想让缓存的TTL更短,你可以配置hive 存储插件。

示例配置单元插件缓存 ttl 5 秒):

"configProps": {
  "hive.metastore.uris": "thrift://hive.ip.address.com:9083",
  ... // other setting, 

  "hive.metastore.cache-ttl-seconds": "5",
  "hive.metastore.cache-expire-after": "access"
}

查看更多详情here