Я имею таблицу Hbase, называемую измерениями , которые имеют два семейства столбцов: Измерение и прибор. в семействе измерения есть столбцы Измерение: 1 , Измерение: 2 и т. Д. Для каждого типа измеряемого вещества (1 , 2,3 являются идентификаторами вещества), в то время как в инструменте столбцы являются инструментом: status_1 , инструмент: status_2 и т. Д. и соответствуют правильной инструмента для конкретного вещества во время измерения. Ключи строк - это объединение даты, времени и идентификатора станции, где было проведено измерение, например: < /p>
Код: Выделить всё
ROW COLUMN+CELL
2017-01-01 00:00+101 column=measurement:1, timestamp=2025-01-26T12:46:42.021, value=?pbM\xD2\xF1\xA9\xFC
2017-01-01 00:00+101 column=instrument:status_1, timestamp=2025-01-26T12:46:42.025, value=0
< /code>
Query < /h3>
Я хочу найти среднее измеренное значение вещества с идентификатором 1 на всех станциях за 2018-12-05 с учетом Только строки, где инструмент: status_1 имеет значение 0 (не включать ошибочные результаты в среднем). Я хочу сделать средний расчет на стороне сервера, то есть иметь только полученное значение, предоставленное моему клиенту вместо тысяч строк. Итак, я попробовал следующее: < /p>
Scan scan = new Scan();
scan.setFilter(new PrefixFilter(Bytes.toBytes("2018-12-05")));
scan.addColumn(Bytes.toBytes("measurement"), Bytes.toBytes("1"));
scan.addColumn(Bytes.toBytes("instrument"), Bytes.toBytes("status_1"));
// include only rows where status_1 is "0"
scan.setFilter(new SingleColumnValueFilter(
Bytes.toBytes("instrument"),
Bytes.toBytes("status_1"),
CompareOperator.EQUAL,
Bytes.toBytes("0")
));
AggregationClient aggregationClient = new AggregationClient(connection.getConfiguration());
// values of measurement column are stored as bytes that are interpreted as double
ColumnInterpreter columnInterpreter = new DoubleColumnInterpreter();
double avg = aggregationClient.avg(TableName.valueOf("measurements"), columnInterpreter, scan);
aggregationClient.close();
Семейство столбцов не может иметь значение null. В случае, если указано несколько семейств, будет выдано исключение IOException. Также можно определить необязательный квалификатор столбца.
Есть ли обходной путь или способ сообщить AggregationClient, какой столбец при сканировании он должен использовать? среднее значение?
Подробнее здесь: https://stackoverflow.com/questions/793 ... fic-column