我使用的是impalajdbc驱动程序(或者我猜它实际上是hiveserver2jdbc驱动程序)。我在另一个数据库中创建了一个视图——我们称之为“store55”。
假设我的观点定义如下:
CREATE VIEW good_customers AS
SELECT * from customers WHERE good = true;
当我尝试按如下方式使用jdbc查询此视图时:
SELECT * FROM store55.good_customers LIMIT 10
我得到一个错误,例如:
java.sql.SQLException: AnalysisException: Table does not exist: default.customers
理想情况下,我希望将数据库名称指定在jdbc url中的某个位置或作为参数,但当我尝试使用此jdbc url时,仍然会遇到相同的错误:
jdbc:hive2://<host>:<port>/store55;auth=noSasl
hive2jdbc驱动程序是否忽略了url的数据库部分,并假设所有查询都是针对默认数据库执行的?
使查询返回的唯一方法是更改视图定义本身以包含数据库名称:
CREATE VIEW good_customers AS
SELECT * from store55.customers WHERE good = true;
但是,我希望视图定义中没有数据库名称。
谢谢!
2条答案
按热度按时间liwlm1x91#
您可能需要在jdbc中指定“使用数据库xx;”声明。
另外,如果您已经在使用数据库,请尝试“invalidatemetadata”语句。
db2dz4w82#
url为jdbc:hive2://:/55;auth=NOSSL正确
您能否运行一些诊断程序,例如:
show tables-确保在store55中创建视图
您是否在ddl中使用use database命令