У меня есть некоторые конкретные данные в таблице HBase
, которая содержит большое количество данных и 1000 регионов.
Когда я запрашиваю эти данные из оболочки, при обычном сканировании по имени столбца требуется 175 секунд. Но то же самое, что я пытался получить, используя префиксный фильтр в своем Java-коде, я получаю ошибку тайм-аута.
Может кто-нибудь иметь представление, почему это произошло и как я могу получить данные из моей базовой таблицы?
Пожалуйста, найдите код, который я использую
@Override
public Scan getScanForRowRange(List rowKeys, List columnList) {
try {
List rowrangeList = new ArrayList<>();
for (String rowKey : rowKeys) {
byte[] startRow = Bytes.toBytes(rowKey);
byte[] endRow = new byte[startRow.length + 1];
System.arraycopy(startRow, 0, endRow, 0, startRow.length);
endRow[startRow.length] = (byte) 255;
RowRange rowRange = new RowRange(startRow, true, endRow, false);
rowrangeList.add(rowRange);
}
logger.info("row range size" + rowrangeList.size());
Scan scan = new Scan();
for (String columnName : columnList) {
if (columnName.contains(ForesightConstants.COLON)) {
String cellValues[] = columnName.split(ForesightConstants.COLON);
scan.addColumn(Bytes.toBytes(cellValues[ForesightConstants.ZERO]), Bytes.toBytes(cellValues[ForesightConstants.ONE]));
}
}
scan.setFilter(new MultiRowRangeFilter(rowrangeList));
scan.setCacheBlocks(true);
scan.setCaching(10);
return scan;
} catch (IOException e) {
logger.info("Exception Inside @Method getScanForRowRange }", Utils.getStackTrace(e));
}
return null;
}