Как "найти AllBy{Column}" с помощью HbaseTemplate?
Я разрабатывал свой первый сервер RESTful, используя такие технологии, как Spring и HBase.
Message
ниже приведена базовая модель моего сервера;
@AllArgsConstructor
@Getter
public class Message {
private final String from;
private final String to;
private final long when;
}
Мой сервер должен сохранять и находить сообщения в HBase.
Я уже провел исследование и прочитал эту документацию: https://docs.spring.io/spring-hadoop/docs/2.5.0.RELEASE/reference/html/springandhadoop-hbase.html
Однако этого недостаточно. Учебник не раскрывает, как найти по конкретному столбцу.
Не могли бы вы предоставить фрагмент кода, который извлекает сообщение из HBase на основе следующего запроса?
SELECT from, to, when FROM Message WHERE to = {userId} OR from = {userId}
1 ответ
Ниже приведен пример выполнения запроса на основе столбцов:
Scan scan = new Scan();
scan.addColumn(HbaseJsonEventSerializer.COLUMFAMILY_FILTERS_BYTES,
Bytes.toBytes(columnName));
Filter filter = new SingleColumnValueFilter(HbaseJsonEventSerializer.COLUMFAMILY_FILTERS_BYTES,
Bytes.toBytes(columnName), CompareOp.EQUAL, Bytes.toBytes(columnValue));
scan.setFilter(filter);
List<String> rows =
hbaseTemplate.find("searchclicks", scan, new RowMapper<String>() {
@Override
public String mapRow(Result result, int rowNum) throws Exception {
byte[] value = result.getValue(
HbaseJsonEventSerializer.COLUMFAMILY_FILTERS_BYTES,
Bytes.toBytes(columnName));
if (value != null) {
String facetValue = new String(value);
LOG.debug("Facet field: {} and Facet Value: {}",
new Object[] { columnName, facetValue });
}
return facetValue;
}
});
Вы можете сослаться на это для большего количества примеров:
https://www.programcreek.com/java-api-examples/?code=jaibeermalik/searchanalytics-bigdata/searchanalytics-bigdata-master/src/main/java/org/jai/hbase/HbaseServiceImpl.java