我已经创建了自定义的Hive Metastore过滤器挂钩,并已在hive-site.xml
中配置了Hive Metastore,Hiveserver2和Drill Hive存储插件。
{
"type": "hive",
"enabled": true,
"configProps": {
"hive.metastore.uris": "thrift://x.x.x.x:9083",
"hive.metastore.warehouse.dir": "/user/hive/warehouse",
"hive.metastore.filter.hook": "com.hive.MyHiveMetaStoreFilterHook",
"hive.security.authorization.enabled": "true",
"datanucleus.schema.autoCreateAll": "true"
}
}
当从show databases
,show schemas
,Drill Web UI
和hive
执行beeline
或SQLLine
时,挂钩确实起作用。它根据我们的逻辑进行过滤。无法正常执行的唯一执行是通过JDBC/ODBC
客户端,例如Drill Explorer,SQuirrel或DBeaver
问题是当我们尝试通过JDBC/ODBC Client
进行连接时,似乎未触发该挂钩并且它显示了所有数据库。仅当我们从JDBC/ODBC Client
,Drill Web UI
,hive
或beeline
运行命令后,SQLLine
才起作用。我想这取决于哪个执行在第一次运行时就填满了缓存。如果我运行了Drill WebUI
或SQLLine
,则Drill Metastore缓存将填充正确的结果,因此,来自JDBC/ODBC Client
的后续请求将返回预期的结果。但是,如果我们首先运行JDBC/ODBC Client
,它将在缓存中填充错误的结果,因此,无论我们在何处执行,它将始终返回错误的结果。
这是Drill或JDBC / ODBC Client中的错误还是预期的行为?
是否有一种简单的方法可以重新实现DrillHiveMetaStoreClient代码,而无需重新编译整个Drill源代码? Hive中的hive.metastore.client.impl
之类的东西?
与Drill Web UI / CLI(例如蜂巢,beeline或sqlline)相比,通过JDBC / ODBC Client执行时,行为或结果不一致是很奇怪的