我正在使用Hive 0.14和Hbase 0.98.8
我想使用HiveQL访问HBase“表”。
我用复杂的复合行键创建了一个表:
CREATE EXTERNAL TABLE db.hive_hbase (rowkey struct<p1:string, p2:string, p3:string>, column1 string, column2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY ';'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" =
":key,cf:c1,cf:c2")
TBLPROPERTIES("hbase.table.name"="hbase_table");
该表已成功创建,但是HiveQL永远需要:
SELECT * from db.hive_hbase WHERE rowkey.p1 = 'xyz';
不使用rowkey的查询就很好,并且将hbase shell与过滤器一起使用也可以正常工作。
我没有在日志中找到任何内容,但是我认为复杂的组合键和性能可能会出现问题。
有人遇到过同样的问题吗?解决的提示?其他想法,我可以尝试什么?
谢谢
更新16.07.15:
我将log4j属性更改为“DEBUG”,并发现了一些有趣的信息:
它说:
2015-07-15 15:56:41,232 INFO ppd.OpProcFactory (OpProcFactory.java:logExpr(823)) - Pushdown Predicates of FIL For Alias : hive_hbase
2015-07-15 15:56:41,232 INFO ppd.OpProcFactory (OpProcFactory.java:logExpr(826)) - (rowkey.p1 = 'xyz')
但是稍后几行:
2015-07-15 15:56:41,430 DEBUG ppd.OpProcFactory (OpProcFactory.java:pushFilterToStorageHandler(1051)) - No pushdown possible for predicate: (rowkey.p1 = 'xyz')
所以我的猜测是:基于HBase的HiveQL不会在Hbase中进行任何谓词下推,而是启动MapReduce作业。
谓词下推可能存在错误吗?
最佳答案
我使用Hive 0.13尝试了类似的情况,并且工作正常。我得到了结果。您正在使用哪个版本的 hive ?
关于database - HiveQL到HBase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31334237/