HBase 在 Scala/Java API 中存储具有相同行键的 2 个或更多值的特定列的数据
HBase storing data for a particular column with 2 or more values for the same row-key in Scala/Java API
我有一个包含以下内容的文件:
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 应该根据时间戳为特定列存储多个值。
无论如何,我可以为特定用户 ID 存储两个电子邮件地址吗?
您需要指定 "cf" 列族的版本数。默认情况下,版本数为 1。
在 HBase shell 中执行以下操作以修改现有 table:
alter 'table', {NAME => 'cf', VERSIONS => 2147483647}
阅读有关 HBase 版本的更多信息 here。
您可能想仔细看看 the HBase documentation on versions。特别注意它说
的地方
By default, i.e. if you specify no explicit version, when doing a get
, the cell whose version has the largest value is returned
但我不会追求使用多个版本以这种方式存储多个值。您必须明确指定版本的最大数量,它将应用于该系列中的每一列。我会更倾向于使用不同的列名(例如 Email1
、Email2
、...)
我有一个包含以下内容的文件:
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 应该根据时间戳为特定列存储多个值。 无论如何,我可以为特定用户 ID 存储两个电子邮件地址吗?
您需要指定 "cf" 列族的版本数。默认情况下,版本数为 1。 在 HBase shell 中执行以下操作以修改现有 table:
alter 'table', {NAME => 'cf', VERSIONS => 2147483647}
阅读有关 HBase 版本的更多信息 here。
您可能想仔细看看 the HBase documentation on versions。特别注意它说
的地方By default, i.e. if you specify no explicit version, when doing a
get
, the cell whose version has the largest value is returned
但我不会追求使用多个版本以这种方式存储多个值。您必须明确指定版本的最大数量,它将应用于该系列中的每一列。我会更倾向于使用不同的列名(例如 Email1
、Email2
、...)