如何在 Hive 中将 HBase 行键拆分为 2 列 table
How to split HBase row key into 2 columns in Hive table
HBase Table
行键:2020-02-02^ghfgewr3434555,cf:1 时间戳=1604405829275,值=true
行键:2020-02-02^ghfgewr3434555,cf:2 时间戳=1604405829275,值=true
行键:2020-02-02^ghfgewr3434555,cf:3 时间戳=1604405829275,值=false
行键:2020-02-02^ghfgewr3434555,cf:4 时间戳=1604405829275,值=false
将 HBase 数据传输到 Hive table 如下所示
蜂巢table
日期 ========= ID ======== cf:no == boolean
2020-02-02 ==== ghfgewr3434555 == 1 ======= 真
2020-02-02 ==== ghfgewr3434555 == 2 ======= 真
2020-02-02 ==== ghfgewr3434555 == 3 ======= false
2020-02-02 ==== ghfgewr3434555 == 4 ======= false
如果您只想传输它以供查询,您实际上可以在配置单元中创建一个连接到那个 table 指定属性
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’);
我已经使用 2 table/View 解决了这个问题。第一个 1 只是处理来自 HBase table 的数据,第二个 table/view 将 rowkey 分成两列。
Hive 中的第一个 Table 查询
CREATE EXTERNAL TABLE hbase_hive_table(
key string,
t1 boolean,
t2 boolean
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH
SERDEPROPERTIES ("hbase.columns.mapping" = "cf:1#b,cf:2#b)
TBLPROPERTIES ("hbase.table.name" = "hbase_table");
Hive 中的第一个 Table/View 查询
CREATE VIEW IF NOT EXISTS hbase_hive_view
AS 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;
HBase Table
行键:2020-02-02^ghfgewr3434555,cf:1 时间戳=1604405829275,值=true
行键:2020-02-02^ghfgewr3434555,cf:2 时间戳=1604405829275,值=true
行键:2020-02-02^ghfgewr3434555,cf:3 时间戳=1604405829275,值=false
行键:2020-02-02^ghfgewr3434555,cf:4 时间戳=1604405829275,值=false
将 HBase 数据传输到 Hive table 如下所示
蜂巢table
日期 ========= ID ======== cf:no == boolean
2020-02-02 ==== ghfgewr3434555 == 1 ======= 真
2020-02-02 ==== ghfgewr3434555 == 2 ======= 真
2020-02-02 ==== ghfgewr3434555 == 3 ======= false
2020-02-02 ==== ghfgewr3434555 == 4 ======= false
如果您只想传输它以供查询,您实际上可以在配置单元中创建一个连接到那个 table 指定属性
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’);
我已经使用 2 table/View 解决了这个问题。第一个 1 只是处理来自 HBase table 的数据,第二个 table/view 将 rowkey 分成两列。
Hive 中的第一个 Table 查询
CREATE EXTERNAL TABLE hbase_hive_table(
key string,
t1 boolean,
t2 boolean
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH
SERDEPROPERTIES ("hbase.columns.mapping" = "cf:1#b,cf:2#b)
TBLPROPERTIES ("hbase.table.name" = "hbase_table");
Hive 中的第一个 Table/View 查询
CREATE VIEW IF NOT EXISTS hbase_hive_view
AS 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;