2017-02-24 40 views
1

我有以下内容的文件:HBase的存储数据有2个或多个值的特定列在斯卡拉/ Java API的同一行键

UserID Email    
1001  [email protected]  
1001  [email protected]  
1002  [email protected] 
1002  [email protected] 

我想存储这样的数据:

ROW   COLUMN+CELL                     
1001   column=cf:Email, timestamp=1487917201278, [email protected] 
1001   column=cf:Email, timestamp=1487917201279, [email protected]                         
1002   column=cf:Email, timestamp=1487917201286, [email protected] 
1002   column=cf:Email, timestamp=1487917201287, [email protected] 

我使用Put例如:put 'table', '1001', 'cf:Email', '[email protected]'但它给我

ROW   COLUMN+CELL                      
1001   column=cf:Email, timestamp=1487917201279, [email protected]                         
1002   column=cf:Email, timestamp=1487917201286, [email protected] 

它覆盖了以前的值。但HBase应该根据时间戳存储特定列的多个值。 无论如何,我可以存储两个电子邮件地址的特定用户ID?

回答

1

您可能想仔细看看the HBase documentation on versions。特别要注意的地方说

默认情况下,即如果没有指定明确的版本,做一个get,其版本有返回

最大的价值,但使用我不会追求的小区时多个版本以这种方式存储多个值。您必须明确指定版本的最大数量,并将应用于该系列中的每一列。我会更倾向于使用不同的列名(例如Email1,Email2,...)

+0

感谢乔的信息。 –

1

您需要指定“cf”列族的版本数。缺省情况下,版本数为1 执行以下操作中的HBase壳修改现有的表:

ALTER '表',{NAME => 'CF',VERSIONS => 2147483647}

了解更多关于HBase here版本的信息。

+0

感谢Ashu的信息。 –

相关问题