gpt4 book ai didi

java - 从 HBase 中检索除特定列族的值之外的所有内容

转载 作者:行者123 更新时间:2023-12-01 04:42:23 24 4
gpt4 key购买 nike

我正在编写一个 Java 应用程序,用于从 HBase 数据库检索和显示数据。

在编写用于检索行的 Get 方法时,我想获取该行的所有数据,但排除特定列族(“大”列族)的值。注意:我需要检索该系列中的列名称(限定符?),因为它们包含有值(value)的信息。

是否可以为此编写一个过滤器?

我有两个解决方案。第一个不起作用,第二个则很慢。

第一个解决方案(使用复合过滤器):

HTable table = getTable();
Get get = new Get(row);
FilterList filter = new FilterList(FilterList.Operator.MUST_PASS_ONE);

FilterList subFilterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
subFilterList.addFilter(new KeyOnlyFilter());
subFilterList.addFilter(new FamilyFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("big"))));

filter.addFilter(subFilterList);
filter.addFilter(new FamilyFilter(CompareOp.NOT_EQUAL, new BinaryComparator(Bytes.toBytes("big"))));

get.setFilter(filter);
retrieveAndUseResult(table, get);

这个解决方案在概念上和实践中都不起作用 - 但也许我使用复合 FilterList 走在正确的轨道上?

第二种解决方案(使用两次获取):

HTable table = getTable();
Get get = new Get(row);
// exclude the entire "big" column family
get.setFilter(new FamilyFilter(CompareOp.NOT_EQUAL, new BinaryComparator(Bytes.toBytes("big"))));
retrieveAndUseResult(table, get);

Get get2 = new Get(row);
// include the "big" column family, but only retrieve the key
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
filterList.addFilter(new KeyOnlyFilter());
filterList.addFilter(new FamilyFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("big"))));
get2.setFilter(filterList);
retrieveAndUseResult(table, get2);

这可行,但我宁愿只做一次获取。

最佳答案

我最终使用了第二种解决方案的变体 - 使用两次获取。但我使用了批量获取列表来加快速度。

代码:

HTable table = getTable();

Get get = new Get(row);
// exclude the entire "big" column family
get.setFilter(new FamilyFilter(CompareOp.NOT_EQUAL, new BinaryComparator(Bytes.toBytes("big"))));

Get get2 = new Get(row);
// include the "big" column family, but only retrieve the key
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
filterList.addFilter(new KeyOnlyFilter());
filterList.addFilter(new FamilyFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("big"))));
get2.setFilter(filterList);

List<Get> getList = new ArrayList<Get>();
getList.add(get);
getList.add(get2);
retrieveAndUseResults(table, getList);

关于java - 从 HBase 中检索除特定列族的值之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16316344/

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