如何在 HBase 中查看 3 版本的数据
how to see 3 version of Data in HBase
我有一个 SQL table 有 6 列,"row_id","customer_id","f_name","l_name","location","last_update_date".
1) 上面SQLtable我通过SQOOP创建了一个HBasetable,下面是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 "scan" 输出
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) 当我 "describe 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}
这发生在 运行 成功,"describe" 命令现在显示的更改值是 VERSION 的 2。
3) 现在要保留 f_name 的 2 个版本,以及 HBase 行 ID 111_emp1 的 l_name,我更新了 SQL 服务器 table 对于 row_id 111 两次,并重新扫描它,但我只能看到更新的值,我看不到它们的当前和过去版本,下面是 "get" 输出"= 15=]
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 应该将它们放在一起,但它没有发生。
我错过了什么?
是VERSIONS => 2
。获得多个版本的正确语法是
get 'xxx', '111_emp1',{COLUMN=> 'amitesh:f_name',VERSIONS=>2}
我有一个 SQL table 有 6 列,"row_id","customer_id","f_name","l_name","location","last_update_date".
1) 上面SQLtable我通过SQOOP创建了一个HBasetable,下面是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 "scan" 输出
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) 当我 "describe 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}
这发生在 运行 成功,"describe" 命令现在显示的更改值是 VERSION 的 2。
3) 现在要保留 f_name 的 2 个版本,以及 HBase 行 ID 111_emp1 的 l_name,我更新了 SQL 服务器 table 对于 row_id 111 两次,并重新扫描它,但我只能看到更新的值,我看不到它们的当前和过去版本,下面是 "get" 输出"= 15=]
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 应该将它们放在一起,但它没有发生。
我错过了什么?
是VERSIONS => 2
。获得多个版本的正确语法是
get 'xxx', '111_emp1',{COLUMN=> 'amitesh:f_name',VERSIONS=>2}