gpt4 book ai didi

java - 在 HBase 中使用带有开始行、结束行和过滤器的扫描

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:32:36 24 4
gpt4 key购买 nike

我需要在 HBase 中使用 Scan 来扫描满足特定条件的所有行:这就是我将使用过滤器(实际上是一个包含两个 SingleColumnValueFilter 的复合过滤器列表)的原因。现在,我的 rowKeys 结构是这样的:

a.b.x|1|1252525  
a.b.x|1|2373273
a.b.x|1|2999238
...
a.b.x|2|3000320
a.b.x|2|4000023
...
a.b.y|1|1202002
a.b.y|1|1778949
a.b.y|1|2738273

作为附加要求,我只需要迭代那些具有以“a.b.x|1”开头的 rowKey 的行

现在,问题

  1. 如果我在过滤器列表中使用额外的 PrefixFilter,扫描器是否总是扫描所有行(并在每一行上应用过滤器)?
  2. 如果我通过 startRow(前缀)和过滤器列表(没有 PrefixFilter)实例化扫描,我知道扫描从给定的行前缀开始。所以,假设我使用的是“a.b.x”。作为 startRow,扫描是否也会扫描 a.b.y?
  3. 如果我使用 new Scan(startRow, endRow) 然后使用 setFilter,会有什么行为?换句话说:缺少的构造函数 Scan(byte [] start, byte [] end, Filter filter) 怎么办?

提前致谢
安德烈亚

最佳答案

行键在 hbase 中按词法排序。因此,所有“a.b.x|1”都会出现在“a.b.x|2”之前,依此类推。由于行键存储为字节数组并按字典顺序排序,因此在使用非固定长度的行键以及混合不同的字符类时要小心。但是根据您的要求,这条线上的一些东西应该可以工作:

Scan scan = new Scan(Bytes.toBytes("a.b.x|1"),Bytes.toBytes("a.b.x|2"); //creating a scan object with start and stop row keys

scan.setFilter(colFilter);//set the Column filters you have to this scan object.

//And then you can get a scanner object and iterate through your results
ResultScanner scanner = table.getScanner(scan);
for (Result result = scanner.next(); result != null; result = scanner.next())
{
//Use the result object
}

更新:ToBytes 应该是 toBytes

关于java - 在 HBase 中使用带有开始行、结束行和过滤器的扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12087090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com