Storm-HBase Trident - 同时查询多列
Storm-HBase Trident - Query Multiple columns simultaneously
我正在构建一个查询 HBaseState 的 Trident 拓扑。我正在使用 org.apache.storm.hbase 包。
我的理解(如果我错了请纠正我)是 HBaseQuery 读取给定 rowKey 的所有列值(或 projectionCriteria 中指定的值)并使用 Fields("columnName","columnValue").
例如,如果我有 table 只宠物,其中 rowKey 是宠物名称,一列用于 "type",一列用于 "age",stateQuery 将接收输入元组使用 Values("Fido") 并输出两个 separate 元组:
值("Fido","Type","Dog")
值("Fido","Age",11)
一些问题:
有没有办法在一个查询中从多个列中获取值?意思是,我可以得到带有 Fields("Name","column1Value","column2Value") 的 single 输出吗?
如果有一种方法可以将多列的值放入一个元组中,如果它们属于不同类型(例如,一个是字符串,一个是整数),是否仍然可以这样做?
最终,我的目标是能够使用 Fields("Name") 获取输入元组并使用 Fields("Name","Type","Age"),例如 Values("Fido","Dog",11) 和 Values("Mr. Kibbles","Cat",4)。如果无法使用上述方法,那怎么可能?
TIA 寻求帮助!
我自己解决了这个问题,在这里发帖供后人参考:
我遇到困难的原因是因为我在构建 WordCountValueMapper 的时候并没有真正理解它是如何使用的。更深入地研究结果 class 有所帮助。
下面是我现在的实现方式:
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 中,他们遍历了结果中的每个单元格,相当于遍历了每一列。相反,我获取了整个单元格数组并提取了值。没什么高明的,只是之前没看懂
我正在构建一个查询 HBaseState 的 Trident 拓扑。我正在使用 org.apache.storm.hbase 包。
我的理解(如果我错了请纠正我)是 HBaseQuery 读取给定 rowKey 的所有列值(或 projectionCriteria 中指定的值)并使用 Fields("columnName","columnValue").
例如,如果我有 table 只宠物,其中 rowKey 是宠物名称,一列用于 "type",一列用于 "age",stateQuery 将接收输入元组使用 Values("Fido") 并输出两个 separate 元组:
值("Fido","Type","Dog")
值("Fido","Age",11)
一些问题:
有没有办法在一个查询中从多个列中获取值?意思是,我可以得到带有 Fields("Name","column1Value","column2Value") 的 single 输出吗?
如果有一种方法可以将多列的值放入一个元组中,如果它们属于不同类型(例如,一个是字符串,一个是整数),是否仍然可以这样做?
最终,我的目标是能够使用 Fields("Name") 获取输入元组并使用 Fields("Name","Type","Age"),例如 Values("Fido","Dog",11) 和 Values("Mr. Kibbles","Cat",4)。如果无法使用上述方法,那怎么可能?
TIA 寻求帮助!
我自己解决了这个问题,在这里发帖供后人参考:
我遇到困难的原因是因为我在构建 WordCountValueMapper 的时候并没有真正理解它是如何使用的。更深入地研究结果 class 有所帮助。
下面是我现在的实现方式:
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 中,他们遍历了结果中的每个单元格,相当于遍历了每一列。相反,我获取了整个单元格数组并提取了值。没什么高明的,只是之前没看懂