hbase shell:如何基于特定的多列值扫描行

beq87vna  于 2021-06-09  发布在  Hbase
关注(0)|答案(2)|浏览(431)

hbase新手,未配置Hive或 Impala 。:-(现在我想基于多个列值扫描一个表的行,比如说让表a有4列aa、ab、ac、ad。我想要表中满足ab列和ad列值条件的所有行。
另一个查询是如何查询多个表,假设表中存在外部键。

a14dhokn

a14dhokn1#

只是重申一下您的场景:一个名为a的hbase表,一个列族cf1,其中有四个列限定符,即aa、ab、ac、ad
您的要求是获得满足两列限定符ab&ad条件的行
这种实现的方法是使用singlecolumnvaluefilter。创建筛选器列表,根据需要创建多个(在您的情况下有两个筛选器列表),并按相关顺序添加筛选器
如果您有两个不同的列族(a&b),那么扫描'a',{columns=>['a:aa','b:ab']}
在你的第二个问题中,你所说的外键是什么意思?如果您引用的是一个唯一的复合键标识符,那么请浏览辅助索引。

jecbmhm3

jecbmhm32#

要扫描单个hbase表中多列上的行,可以使用hbase api,下面的java代码可能会解决您的问题。

SingleColumnValueFilter f1 = new SingleColumnValueFilter(Bytes.toBytes("0"), Bytes.toBytes("EMP_KEY"), CompareFilter.CompareOp.LESS_OR_EQUAL, Bytes.toBytes(500));
  SingleColumnValueFilter f2 = new SingleColumnValueFilter(Bytes.toBytes("0"), Bytes.toBytes("DEPT_KEY"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes(204));

  FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL); //could be FilterList.Operator.MUST_PASS_ALL instead
  filterList.addFilter(f1);
  filterList.addFilter(f2);

  Scan scan = new Scan();
  scan.setFilter(filterList);

相关问题