对于包含数千个单元格的行的表,这是必需的。
假设我们有一个以deviceid为键的deviceevents表,每个事件都存储为一个新列,其名称类似于“event\u xpgsgr”、“event\u whatever”。
要求检索“最新事件”,即具有最新时间戳的单元(或可能根据单元格内容进行过滤)
使用columnrangefilter,我们可以筛选只检索以“event”开头的列,客户端可以查找具有max(timestamp)的事件,但这意味着在每次调用中都要将所有事件复制到客户端,这是不可接受的。
在hbase中没有进行此列筛选的方法吗?
谢谢!
1条答案
按热度按时间2lpgd9681#
不。
一开始我想说的是编写自己的
Filter
执行此操作的接口。但是,如果您查看hbase的filtercell接口,就会发现您不能。原因是你必须知道当你看一个给定的细胞,如果你想保留或不。您的查询依赖于扫描所有数据以了解最新信息。要实现您的愿望,可能需要一个特殊的模式设计。例如,无论何时编写列,都可以将列写入两次,一次写入列的列名,另一次写入“latest”(如果是latest)。这将允许对“最新”进行固定时间的查找。折衷的办法是,您必须计算最新的写入时间,因此,您没有使用二次读取,而是使用二次写入(假设您必须与所有现有值进行比较)。