具有相同键的行

Rows with identical keys

当我需要创建一个 HBase 行时,我必须调用 Put(row_key) 方法。那么,如果我用相同的 row_key 值再次调用 Put() 方法会怎样?现有行会被更新还是 HBase 会创建新行?

是否可以使用相同的键创建 2 行?

行键用于在Hbase中唯一标识一行。如果您希望两行具有相同的键,那么您就错过了一些东西。请添加有关您的要求的更多信息,或重新访问 Hbase 架构的基础知识

你不能有具有相同键的行,但你可以有多个使用时间戳的 Put 版本。您可以将这些内置时间戳用于审计或时间戳。

如果多次下发Put,没有指定版本(时间戳),以最新版本的KV为准。如果您发出多个相同的显式设置时间戳,将返回其中一个值,但 HBase 不保证顺序以及哪个 KV 将在压缩(计划清理)中幸存下来。如果您插入多个带有负时间戳的 Put,这将非常糟糕。较早的 HBase 版本会产生不可预测的扫描结果,而较新的 HBase 版本会抛出异常。

您的问题还应包括列族和列限定符值。加上row key,这三个是hbase中一个值的唯一标识table。

您还可以为该列族启用版本控制,并拥有多个可以具有相同 "row key + column family + column qualifier" 值的值。在这种情况下,每个唯一版本(值)由 "rowkey+ col.fam. +col.qual. + timestamp"

定义

对于较新版本的 Hbase,只能从查询中提取最后一条记录,比如 get 'emp' ;默认情况下,版本控制保持在 1;但在 hfiles 中的其他先前版本之下,并在压缩期间刷新。

来自the documentation of the PUT operation

Put either adds new rows to a table (if the key is new) or can update existing rows (if the key already exists). Puts are executed via Table.put (non-writeBuffer) or Table.batch (non-writeBuffer) .

注意:强调我的