Статьи

Руководство по части InfluxDBMapper и QueryBuilder для Java: порядок и порядок

Ранее мы широко использовали оператор group by для выполнения сложных запросов агрегации.

В этом уроке мы рассмотрим операторы «into» и «order by» close.

Помимо вставки или выбора данных, мы также можем сохранить результаты одного запроса в другой таблице. Использование чего-то подобного может варьироваться. Например, у вас может быть сложная операция, которая не может быть выполнена в одном запросе.

Прежде чем мы продолжим, убедитесь, что у вас запущен и работает экземпляр infxdb.

Наиболее распространенным действием в запросе на заполнение будет заполнение измерения результатами предыдущего запроса.

Давайте скопируем базу данных.

1
2
3
4
Query query = select()
                .into("\"copy_NOAA_water_database\".\"autogen\".:MEASUREMENT")
                .from(DATABASE, "\"NOAA_water_database\".\"autogen\"./.*/")
                .groupBy(new RawText("*"));

Результатом этого запроса будет копирование результатов в измерение h2o_feet_copy_1.

1
SELECT * INTO "copy_NOAA_water_database"."autogen".:MEASUREMENT FROM "NOAA_water_database"."autogen"./.*/ GROUP BY *;

Теперь давайте просто скопируем столбец в другую таблицу.

1
2
3
4
Query query = select().column("water_level")
                               .into("h2o_feet_copy_1")
                               .from(DATABASE,"h2o_feet")
                               .where(eq("location","coyote_creek"));

Ниже приведен запрос, который будет выполнен.

1
SELECT water_level INTO h2o_feet_copy_1 FROM h2o_feet WHERE location = 'coyote_creek';

Также мы можем сделать то же самое с агрегатами.

01
02
03
04
05
06
07
08
09
10
Query query = select()
                .mean("water_level")
                .into("all_my_averages")
                .from(DATABASE,"h2o_feet")
                .where(eq("location","coyote_creek"))
                .and(gte("time","2015-08-18T00:00:00Z"))
                .and(lte("time","2015-08-18T00:30:00Z"))
                .groupBy(time(12l,MINUTE));
        LOGGER.info("Executing query "+query.getCommand());
        QueryResult queryResult = influxDB.query(query);

И сгенерируйте запрос, который сохранит результат агрегации в таблицу.

1
SELECT MEAN(water_level) INTO all_my_averages FROM h2o_feet WHERE location = 'coyote_creek' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m);

Условия заказа

Influxdb обеспечивает порядок, однако он ограничен только датами.
Поэтому мы выполним запрос в порядке возрастания.

1
2
3
Query query = select().from(DATABASE, "h2o_feet")
                               .where(eq("location","santa_monica"))
                               .orderBy(asc());

И мы получаем восходящий порядок, как и ожидалось.

1
SELECT * FROM h2o_feet WHERE location = 'santa_monica' ORDER BY time ASC;

И тот же запрос мы выполним в порядке убывания.

1
2
3
Query query = select().from(DATABASE, "h2o_feet")
                               .where(eq("location","santa_monica"))
                               .orderBy(desc());
1
SELECT * FROM h2o_feet WHERE location = 'santa_monica' ORDER BY time DESC;

Это оно! Мы только что создали несколько новых баз данных и измерений, просто используя существующие данные в нашей базе данных. Мы также выполнили несколько заявлений, в которых мы указали время заказа.
Вы можете найти исходный код в github .

Опубликовано на Java Code Geeks с разрешения Эммануила Гкациоураса, партнера нашей программы JCG. См. Оригинальную статью здесь: Руководство по InfluxDBMapper и QueryBuilder для Java. Часть: Into and Order

Мнения, высказанные участниками Java Code Geeks, являются их собственными.