database - HiveQL到HBase

标签 database hadoop hive hbase hiveql

我正在使用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/

相关文章:

sql - 什么是 SQL/PSM?它与其他版本的 SQL(如 T-SQL)有何不同?

database - 如何在sqlplus中打开已经创建的数据库

hadoop - 为什么不推荐使用 TableOutputForma?

java - apache spark 与 kafka 和 hive 集成的 Spark 流

hadoop - 使用Sqoop将列子集从RDBMS导入到Hive表

database - 何时使用嵌入式数据库

mysql - 导入MySQL中的csv

hadoop - 未建立连接

scala - 在Apache Spark中读取包含分隔符的CSV文件

hadoop - Hive 中的多个 SLF4J 绑定(bind) - Hortonworks 沙箱