如何在HBase中查看3个版本的数据

时间:2017-06-13 15:21:50

标签: sql-server hadoop hbase sqoop

我有一个包含6列的SQL表,“row_id”,“customer_id”,“f_name”,“l_name”,“location”,“last_update_date”。

1)我已经通过SQOOP为上面的SQL表创建了一个HBase表,下面是sqoop语法

sqoop import --connect "jdbc:sqlserver://server:port;databaseName=db" --username xxx --password xxx --table xxx --hbase-table xxx --column-family amitesh --hbase-row-key row_id,customer_id --hbase-create-table -m 1

在上面的sqooping中,我通过连接2列创建了一个hbase行键,并且它的工作正常,到目前为止一直很好。以下是Hbase“扫描”输出

hbase(main):036:0> scan 'xxx'
ROW                                          COLUMN+CELL
 111_emp1                                    column=amitesh:f_name, timestamp=1497365606380, value=dev
 111_emp1                                    column=amitesh:l_name, timestamp=1497365606380, value=saha
 111_emp1                                    column=amitesh:last_update_date, timestamp=1497365606380, value=2017-06-12
 111_emp1                                    column=amitesh:location, timestamp=1497365606380, value=hyd
 112_emp1                                    column=amitesh:f_name, timestamp=1497365606380, value=hari
 112_emp1                                    column=amitesh:l_name, timestamp=1497365606380, value=sri
 112_emp1                                    column=amitesh:last_update_date, timestamp=1497365606380, value=2017-06-13
 112_emp1                                    column=amitesh:location, timestamp=1497365606380, value=bng

2)当我“描述hbase_tbl”时,我发现“VERSIONS => 1”的值,如您所见:

hbase(main):025:0> describe 'xxx'
Table HBASE_SQOOP is ENABLED
HBASE_SQOOP
COLUMN FAMILIES DESCRIPTION
{NAME => 'amitesh', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION
 => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}

因此,为了将值更改为2版本,我执行了HBase命令。

alter 'xxx', {NAME => 'amitesh', VERSIONS => 2}

成功运行的情况,现在由VERSION的“describe”命令显示的更改值为2.

3)现在要保留2个版本的f_name和l_name用于HBase行id 111_emp1,我将row_id 111的SQL Server表更新两次,然后重新设置它,但我只能看到更新后的值,我没有看到它们的当前版本和过去版本,下面是“获取”输出“

hbase(main):038:0> get 'xxx', '111_emp1',{COLUMN=> 'amitesh:f_name',VERSION=>2}
COLUMN                                       CELL
 amitesh:f_name                              timestamp=1497365606380, value=dev
1 row(s) in 0.0040 seconds


hbase(main):047:0> get 'xx', '111_emp1',{COLUMN=> 'amitesh:f_name',VERSION=>2}
COLUMN                                       CELL
 amitesh:f_name                              timestamp=1497365863181, value=Raj
1 row(s) in 0.0110 seconds

正如你在上面看到的2“get”输出,在第一个“get”中,f_name的值是“dev”,而对于第二个“get”,值是“raj”。但我希望看到“dev”和“raj”作为我的输出。因为根据我的“alter”命令,HBase应该将它们保持在一起,但它不会发生。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

VERSIONS => 2。获得多个版本的正确语法是

get 'xxx', '111_emp1',{COLUMN=> 'amitesh:f_name',VERSIONS=>2}