如何使用hbasetemplate“findallby{column}”?

iyr7buue  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(470)

我一直在利用spring和hbase等技术开发我的第一台restful服务器。 Message 下面是我的服务器的核心模型;

  1. @AllArgsConstructor
  2. @Getter
  3. public class Message {
  4. private final String from;
  5. private final String to;
  6. private final long when;
  7. }

我的服务器应该在hbase中保存和查找邮件。
我已经研究并阅读了以下文档:https://docs.spring.io/spring-hadoop/docs/2.5.0.release/reference/html/springandhadoop-hbase.html#data-访问对象dao支持
然而,这还不够。本教程没有公开如何按特定列查找。
能否提供一个代码段,根据以下查询从hbase检索消息?

  1. SELECT from, to, when FROM Message WHERE to = {userId} OR from = {userId}
fbcarpbf

fbcarpbf1#

下面给出了一个基于列的查询示例:

  1. Scan scan = new Scan();
  2. scan.addColumn(HbaseJsonEventSerializer.COLUMFAMILY_FILTERS_BYTES,
  3. Bytes.toBytes(columnName));
  4. Filter filter = new SingleColumnValueFilter(HbaseJsonEventSerializer.COLUMFAMILY_FILTERS_BYTES,
  5. Bytes.toBytes(columnName), CompareOp.EQUAL, Bytes.toBytes(columnValue));
  6. scan.setFilter(filter);
  7. List<String> rows =
  8. hbaseTemplate.find("searchclicks", scan, new RowMapper<String>() {
  9. @Override
  10. public String mapRow(Result result, int rowNum) throws Exception {
  11. byte[] value = result.getValue(
  12. HbaseJsonEventSerializer.COLUMFAMILY_FILTERS_BYTES,
  13. Bytes.toBytes(columnName));
  14. if (value != null) {
  15. String facetValue = new String(value);
  16. LOG.debug("Facet field: {} and Facet Value: {}",
  17. new Object[] { columnName, facetValue });
  18. }
  19. return facetValue;
  20. }
  21. });

有关更多示例,请参阅:
https://www.programcreek.com/java-api-examples/?code=jaibeermalik/searchanalytics-bigdata/searchanalytics bigdata master/src/main/java/org/jai/hbase/hbaserviceimpl.java

展开查看全部

相关问题