很多人可能不知道Hive怎么映射hbase的timestamp的问题,因为WIKI中有一句LIMITATION:
https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration
there is currently no way to access the HBase timestamp attribute, and queries always access data with the latest timestamp.
其实,或许说这是一个经验,本人经过查询这句LIMITATION,找到了一个已经解决的ISSUE:https://issues.apache.org/jira/browse/HIVE-2828 这个问题其实已经得到很多解决方案。如是可以使用下面的建表语句来对应TIMESTAMP。
CREATE TABLE hbase_table (key int, value string, time bigint) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:string,:timestamp")
查询增量数据,只需要限定time的范围即可,这个time会以hbase中某列最后更新的时间为准。
注意:
1、使用Hive查询hbase中的数据时,默认是不走MR的,会启动localTASK,会非常慢。
可以使用:set hive.fetch.task.conversion=minimal; 来强制使用MR查询
2、使用Hive表中time字段只能用between and来过滤一个闭区间时间段。可以分开用>和<来过滤一个半边区间或两边区间。>和<同时使用则获取闭区间得到的是全集。