sql-server - 如何在 HBase 中查看 3 版本的数据

标签 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}

它恰好运行成功,现在“describe”命令为 VERSION 显示的更改值是 2。

3) 现在为 HBase 行 ID 111_emp1 保留 2 个版本的 f_name 和 l_name,我更新了 row_id 111 的 SQL Server 表两次,并重新读取它,但我只能看到更新后的值,我没有看到它们的当前和过去版本,下面是“get”输出”

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”作为我的输出。因为按照我的“改变”命令,HBase 应该将它们放在一起,但它没有发生。

我错过了什么?

最佳答案

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

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

关于sql-server - 如何在 HBase 中查看 3 版本的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44525613/

相关文章:

sql-server - 在 SQL Server 2012 中获取总计数和分页的更好方法

c# - 如何在 C# 中读取 sql_variant 数据库类型

scala - 在Hive表中加载 Parquet 文件将返回所有NULL

hadoop - HBase 中的压缩

hadoop - 在 Hbase 表上插入后重新计算某些列

java - Apache Phoenix : Values in UPSERT must evaluate to a constant. java.sql.SQLException:错误 204 (22008)

sql-server - 如何在 SQL Server 中编写 foreach?

Java NIO 与 sql 数据库

hadoop - 通过使用Hive将2个表连接到C中来存储最新的tweet

r - 初始化 sparkR : JVM is not ready after 10 seconds 时出错