在 HBase 中,是否可以过滤特定行内的列?
In HBase, is it possible to filter for columns INSIDE a specifc row?
这对于 table 行有数千个单元格是必需的。
假设我们有 table 个以 deviceID 作为键的 deviceEvents,每个事件都存储为一个新列,名称类似于 "event_XPGSGR"、"event_whatever".
要求是检索"latest event",即。具有最新时间戳的单元格。 (或者可能根据单元格的内容进行过滤)
使用 ColumnRangeFilter,我们可以过滤以仅检索以 "event" 开头的列,并且客户端可以查找具有 max(timestamp) 的事件,但这意味着将所有事件复制到客户端呼叫,这不是 acceptable.
有没有办法在 HBase 中进行此列过滤?
谢谢!
没有
起初我想说的是编写您自己的 Filter
接口实现来执行此操作。但是,如果您查看 HBase 的接口
filterCell ,你会发现你不能。原因是您在查看给定单元格时必须知道是否要保留它。您的查询取决于扫描所有数据以了解最新信息。
要实现您的愿望,可能需要特殊的模式设计。例如,无论何时编写一列,都可以将该列写入两次,一次写入其列名,一次写入 'latest'(如果它是最新的)。这将允许 'latest' 的恒定时间查找。权衡是你必须计算最新的写入,所以你有二次写入而不是二次读取(假设你必须与所有现有值进行比较)。
这对于 table 行有数千个单元格是必需的。
假设我们有 table 个以 deviceID 作为键的 deviceEvents,每个事件都存储为一个新列,名称类似于 "event_XPGSGR"、"event_whatever".
要求是检索"latest event",即。具有最新时间戳的单元格。 (或者可能根据单元格的内容进行过滤)
使用 ColumnRangeFilter,我们可以过滤以仅检索以 "event" 开头的列,并且客户端可以查找具有 max(timestamp) 的事件,但这意味着将所有事件复制到客户端呼叫,这不是 acceptable.
有没有办法在 HBase 中进行此列过滤?
谢谢!
没有
起初我想说的是编写您自己的 Filter
接口实现来执行此操作。但是,如果您查看 HBase 的接口
filterCell ,你会发现你不能。原因是您在查看给定单元格时必须知道是否要保留它。您的查询取决于扫描所有数据以了解最新信息。
要实现您的愿望,可能需要特殊的模式设计。例如,无论何时编写一列,都可以将该列写入两次,一次写入其列名,一次写入 'latest'(如果它是最新的)。这将允许 'latest' 的恒定时间查找。权衡是你必须计算最新的写入,所以你有二次写入而不是二次读取(假设你必须与所有现有值进行比较)。