如何将HBase行键拆分为Hive表中的两列

问题描述

HBase表
rowkey:2020-02-02 ^ ghfgewr3434555,cf:1 timestamp = 1604405829275,value = true
rowkey:2020-02-02 ^ ghfgewr3434555,cf:2 timestamp = 1604405829275,value = true
rowkey:2020-02-02 ^ ghfgewr3434555,cf:3 timestamp = 1604405829275,value = false
rowkey:2020-02-02 ^ ghfgewr3434555,cf:4 timestamp = 1604405829275,value = false

将HBase数据传输到Hive表中,如下所示

蜂巢表
日期========= ID ======== cf:no ==布尔值
2020-02-02 ==== ghfgewr3434555 == 1 ======= true
2020-02-02 ==== ghfgewr3434555 == 2 ======= true
2020-02-02 ==== ghfgewr3434555 == 3 =======假
2020-02-02 ==== ghfgewr3434555 == 4 =======假

解决方法

如果您打算仅将其转移以进行查询,则实际上可以在蜂巢中创建到该表的连接,并指定属性

CREATE TABLE foo(rowkey STRING,a STRING,b STRING)
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
WITH SERDEPROPERTIES (‘hbase.columns.mapping’ = ‘:key,f:c1,f:c2’)
TBLPROPERTIES (‘hbase.table.name’ = ‘bar’);

此处的正确文档: https://blog.cloudera.com/hbase-via-hive-part-1/

,

我已经使用2个表格/视图解决了这个问题。前一个只是处理HBase表中的数据,第二个表/视图将行键分为两列。

Hive中的第一个表查询

创建外部表hbase_hive_table(键字符串,t1布尔值,t2布尔值)由org.apache.hadoop.hive.hbase.HBaseStorageHandler'与SERDEPROPERTIES(“ hbase.columns.mapping” =“ cf:1#b, cf:2#b)TBLPROPERTIES(“ hbase.table.name” =“ hbase_table”);

Hive中的第一个表/视图查询

如果不存在,则创建视图hbase_hive_view为 SELECT CONCTNS.rowkey [0] AS date,CONCTNS.rowkey [1] AS req_id,t1,t2 FROM(SELECT split(key,'\ ^')AS rowkey,t1,t2 FROM hbase_hive_table)CONCTNS;