storm hbase trident-同时查询多个列

vlju58qv  于 2021-06-10  发布在  Hbase
关注(0)|答案(1)|浏览(366)

我正在构建一个查询hbastate的三叉戟拓扑。我正在使用org.apache.storm.hbase包。
我的理解是(如果我错了,请纠正我)hbasequery读取给定rowkey的所有列值(或projectioncriteria中指定的列值),并使用字段(“columnname”、“columnvalue”)分别输出每一列。
例如,如果我有一个pets表,rowkey是pet名称,一列表示“type”,一列表示“age”,statequery将接收带有一个值(“fido”)的输入元组,并输出两个单独的元组,其中:
值(“fido”、“type”、“dog”)
价值观(“fido”,“年龄”,11)
一些问题:
有没有一种方法可以在一个查询中从多个列中获取值?意思是,我能得到一个带有字段(“name”,“column1value”,“column2value”)的输出吗?
如果有一种方法可以将多列中的值放入一个元组,那么如果它们是不同类型的(例如,一个是字符串,一个是整数),是否仍然可以这样做?
最终,我的目标是能够获取包含字段(“name”)的输入元组,并获取包含字段(“name”、“type”、“age”)的单个输出元组,例如值(“fido”、“dog”,11)和值(“mr.kibbles”、“cat”,4)。如果不能使用上述方法,怎么可能?
谢谢你的帮助!

svgewumm

svgewumm1#

我自己解决了这个问题,在这里为后人发帖:
我遇到困难的原因是我在构建wordcountvaluemapper时没有真正理解它是如何被使用的。更深入地研究一下结果课程会有所帮助。
下面是我现在如何实现它:

public static class MyValueMapper implements HBaseValueMapper {
  @Override
  public List<Values> toValues(ITuple tuple, Result result) throws Exception {
    List<Values> values = new ArrayList<Values>();
    Cell[] cells = result.rawCells();

    values.add(new Values(Bytes.toString(CellUtil.cloneValue(cells[0])), Bytes.toInt(CellUtil.cloneValue(cells[1]))));
    return values;
  }
  @Override
  public void declareOutputFields(OutputFieldsDeclarer declarer) {
    declarer.declare(new Fields("type","age"));
  }
}

在wordcountvaluemapper中,它们遍历结果中的每个单元格,这相当于遍历每个列。取而代之的是,我取下整个单元格数组,然后取出值。没什么聪明的,我只是以前不懂。

相关问题