hive建立内部表映射hbase_一个简单的测试:HBase-Hive 映射表

首先建立一张HBase测试表,如下:

hbase(main):031:0> create 'test:table1',{NAME => 'f',COMPRESSION => 'SNAPPY',DATA_BLOCK_ENCODING => 'FAST_DIFF',VERSIONS=> 1}

然后从命令行写入一行数据,如下:

hbase(main):032:0> put 'test:table1','r1','f:c1','v1'

hbase(main):033:0> put 'test:table1','r1','f:c2','v2'

我们看一下数据,如下:

hbase(main):034:0> scan 'test:table1'

ROW COLUMN+CELL

r1 column=f:c1, timestamp=1547545470139, value=v1

r1 column=f:c2, timestamp=1548315629301, value=v2

然后我们基于此HBase表建立三张Hive映射表,建表语句分别如下:

test_hbase_3 :

CREATE EXTERNAL TABLE data_tmp.test_hbase_1 (

id STRING,

c1 STRING)

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES (

'hbase.table.name'='test:table1',

'hbase.mapred.output.outputtable'='test:table1',

'hbase.columns.mapping'=':key,

f:c1')

test_hbase_2:

CREATE EXTERNAL TABLE data_tmp.test_hbase_2 (

id STRING,

c2 STRING)

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES (

'hbase.table.name'='test:table1',

'hbase.mapred.output.outputtable'='test:table1',

'hbase.columns.mapping'=':key,

f:c2')

test_hbase_3:

CREATE EXTERNAL TABLE data_tmp.test_hbase_3 (

id STRING,

c1 STRING,

c2 STRING)

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES (

'hbase.table.name'='test:table1',

'hbase.mapred.output.outputtable'='test:table1',

'hbase.columns.mapping'=':key,

f:c1,

f:c2')

我们分别查询一下这三张表,如下:

test-hbase-hive-table-1

test-hbase-hive-table-2

test-hbase-hive-table-3

可以看到,同一张HBase表可以映射多张Hive外部表,并且查询列互不影响。

下面做一个小实验,通过Hive端向HBase三张映射表中分别插入同一行不同列数据,是否会相互影响呢?

一. 测试 insert into 语法

向表 test_hbase_3 中新插入一行数据,如下:

多添加一个字段会怎样?

可见,列的数量是严格要求的,下面我们正常插入,如下:

insert into table data_tmp.test_hbase_3 select 'r2','v1','v2';

我们分别查询下三表数据,如下:

向表 test_hbase_1 中新插入一行数据,id 也为 r1 ,如下:

insert into table data_tmp.test_hbase_1 select 'r1','v1-1';

结论:可见向不同Hive外部表中插入数据是不会影响HBase其他列的。

二. 测试 insert overwrite 语法

覆盖写表test_hbase_1, id = r1,我们观察下test_hbase_2 c2 列会不会被清空。

insert overwrite table data_tmp.test_hbase_1 select 'r1','v1-2';

我们查询下表 test_hbase_3,如下:

我们发现数据已更新,下面我们分别查询下表 test_hbase_1和表 test_hbase_2,如下:

结论:insert into 与 insert overwrite 操作HBase-Hive映射外部表结果是一样的,且均是基于Hive表所属列进行更新,不会影响其他列的值。

下面我们将此三张表删除掉,执行如下语句:

drop table test_hbase_1 ;

drop table test_hbase_2 ;

drop table test_hbase_3 ;

现在,我们查看下HBase表数据,如下:

hbase(main):035:0> scan 'test:table1'

ROW COLUMN+CELL

r1 column=f:c1, timestamp=1548317635798, value=v1-2

r1 column=f:c2, timestamp=1548315629301, value=v2

r2 column=f:c1, timestamp=1548317046763, value=v1

r2 column=f:c2, timestamp=1548317046763, value=v2

2 row(s) in 0.0200 seconds

结论: 删除Hive-HBase映射外部表不会删除HBase数据。

既然这样,那就大胆放心操作吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值