Вам придется использовать RowFilter с регулярным выражением. Ниже приведен фрагмент Java, который получает только те ключи строк, которые соответствуют моему входу. В этом случае структура ключа строки состоит из 5 цифр, за которыми следует строка. Вы можете изменить шаблон регулярного выражения в соответствии с вашими требованиями.
String name = String.format("^\\d{5}%s$", INPUT);
RegexStringComparator keyRegEx = new RegexStringComparator(name);
RowFilter rowFilter = new RowFilter(CompareOp.EQUAL, keyRegEx);
Scan rowScan = new Scan();
rowScan.setFilter(rowFilter);
List<String> children = getHbaseTemplate().find(TABLE_NAME,
rowScan, new ResultsExtractor<List>String>>() {
@Override
public List<String> extractData(ResultScanner rs)
throws Exception {
List<String> children = new ArrayList<String>();
Result result = rs.next();
String key = Bytes.toString(result.getRow());
children.add(key);
}
}
Тем не менее, дизайн ключа строки в Hbase является важным аспектом, который необходимо учитывать. Вы не должны создавать ключ строки, который вы не можете легко получить, особенно ключи строки с добавленной к ним датой. Вы можете добавить дату или метку времени в конце строк, чтобы вы могли использовать встроенные PrefixFilter
или фильтры с STARTROW
и ENDROW
для эффективного получения результатов.