HBASE AggregationClient среднее из конкретного столбцаJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 HBASE AggregationClient среднее из конкретного столбца

Сообщение Anonymous »

Описание схемы
Я имею таблицу 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();
Однако AggregationClient генерирует исключение IOException, указывающее, что при сканировании не может быть более одного столбца при вызове aggregationClient.avg(). Мне нужно среднее значение для столбца measurement:1, но я также должен включить в сканирование инструмент, чтобы фильтровать строки на основе значения инструмента: столбец status_1. В документации AggregationClient указано следующее:

Семейство столбцов не может иметь значение null. В случае, если указано несколько семейств, будет выдано исключение IOException. Также можно определить необязательный квалификатор столбца.

Есть ли обходной путь или способ сообщить AggregationClient, какой столбец при сканировании он должен использовать? среднее значение?

Подробнее здесь: https://stackoverflow.com/questions/793 ... fic-column
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»