hbase在scala/javaapi中用同一行键的2个或更多值存储特定列的数据

vuv7lop3  于 2021-06-10  发布在  Hbase
关注(0)|答案(2)|浏览(336)

我有一个包含以下内容的文件:

UserID   Email             
1001     abc@yahoo.com     
1001     def@gmail.com     
1002     gft@gmail.com
1002     rtf@yahoo.com

我想这样存储数据:

ROW          COLUMN+CELL                                                                                   
1001         column=cf:Email, timestamp=1487917201278, value=abc@yahoo.com 
1001         column=cf:Email, timestamp=1487917201279, value=def@gmail.com                                                                                                
1002         column=cf:Email, timestamp=1487917201286, value=gft@gmail.com
1002         column=cf:Email, timestamp=1487917201287, value=rtf@yahoo.com

我正在使用 Put 例如: put 'table', '1001', 'cf:Email', 'def@gmail.com' 但它给了我

ROW          COLUMN+CELL                                                                                    
1001         column=cf:Email, timestamp=1487917201279, value=def@gmail.com                                                                                                
1002         column=cf:Email, timestamp=1487917201286, value=rtf@yahoo.com

它正在覆盖上一个值。但是hbase应该基于时间戳为特定列存储多个值。我是否可以为特定的userid存储两个电子邮件地址?

oxalkeyp

oxalkeyp1#

您需要指定“cf”列族的版本数。默认情况下,版本数为1。在hbase shell中执行以下操作以修改现有表:
alter'table',{name=>'cf',versions=>2147483647}
在这里阅读更多关于hbase版本的信息。

oo7oh9g9

oo7oh9g92#

您可能需要仔细查看有关版本的hbase文档。特别注意上面写的地方
默认情况下,即在执行 get ,返回版本值最大的单元格
但我不会追求使用多个版本以这种方式存储多个值。您必须明确指定最大版本数,它将应用于该族中的每一列。我更倾向于使用不同的列名(例如 Email1 , Email2 , ...)

相关问题