This is an automated email from the ASF dual-hosted git repository.
riemer pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git
The following commit(s) were added to refs/heads/dev by this push:
new f06b3e422 [hotfix] Extract interface from data explorer query builder
f06b3e422 is described below
commit f06b3e422ba07c142699feaaf2a53f4b7a99e6e2
Author: Dominik Riemer <[email protected]>
AuthorDate: Sat Feb 25 14:55:58 2023 +0100
[hotfix] Extract interface from data explorer query builder
---
.../dataexplorer/sdk/DataLakeQueryBuilder.java | 42 ++++++++++--
.../dataexplorer/sdk/IDataLakeQueryBuilder.java | 74 ++++++++++++++++++++++
2 files changed, 110 insertions(+), 6 deletions(-)
diff --git
a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/DataLakeQueryBuilder.java
b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/DataLakeQueryBuilder.java
index 71c091348..42f5126e7 100644
---
a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/DataLakeQueryBuilder.java
+++
b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/DataLakeQueryBuilder.java
@@ -25,6 +25,7 @@ import
org.apache.streampipes.dataexplorer.v4.params.ColumnFunction;
import org.influxdb.dto.Query;
import org.influxdb.querybuilder.Ordering;
import org.influxdb.querybuilder.SelectionQueryImpl;
+import org.influxdb.querybuilder.clauses.AndConjunction;
import org.influxdb.querybuilder.clauses.Clause;
import org.influxdb.querybuilder.clauses.ConjunctionClause;
import org.influxdb.querybuilder.clauses.NestedClause;
@@ -39,7 +40,7 @@ import static
org.influxdb.querybuilder.BuiltQuery.QueryBuilder.asc;
import static org.influxdb.querybuilder.BuiltQuery.QueryBuilder.desc;
import static org.influxdb.querybuilder.BuiltQuery.QueryBuilder.select;
-public class DataLakeQueryBuilder {
+public class DataLakeQueryBuilder implements IDataLakeQueryBuilder<Query> {
private final String measurementId;
private final SelectionQueryImpl selectionQuery;
@@ -63,18 +64,21 @@ public class DataLakeQueryBuilder {
return new DataLakeQueryBuilder(measurementId);
}
+ @Override
public DataLakeQueryBuilder withSimpleColumn(String columnName) {
this.selectionQuery.column(columnName);
return this;
}
+ @Override
public DataLakeQueryBuilder withSimpleColumns(List<String> columnNames) {
columnNames.forEach(this.selectionQuery::column);
return this;
}
+ @Override
public DataLakeQueryBuilder withAggregatedColumn(String columnName,
ColumnFunction
columnFunction,
String targetName) {
@@ -97,16 +101,19 @@ public class DataLakeQueryBuilder {
return this;
}
+ @Override
public DataLakeQueryBuilder withStartTime(long startTime) {
this.whereClauses.add(new SimpleClause("time", ">=", startTime * 1000000));
return this;
}
+ @Override
public DataLakeQueryBuilder withEndTime(long endTime) {
return withEndTime(endTime, true);
}
+ @Override
public DataLakeQueryBuilder withEndTime(long endTime,
boolean includeEndTime) {
String operator = includeEndTime ? "<=" : "<";
@@ -114,6 +121,7 @@ public class DataLakeQueryBuilder {
return this;
}
+ @Override
public DataLakeQueryBuilder withTimeBoundary(long startTime,
long endTime) {
this.withStartTime(startTime);
@@ -122,6 +130,7 @@ public class DataLakeQueryBuilder {
return this;
}
+ @Override
public DataLakeQueryBuilder withFilter(String field,
String operator,
Object value) {
@@ -129,26 +138,36 @@ public class DataLakeQueryBuilder {
return this;
}
+ @Override
public DataLakeQueryBuilder withExclusiveFilter(String field,
String operator,
List<?> values) {
List<ConjunctionClause> or = new ArrayList<>();
- values.forEach(value -> {
- or.add(new OrConjunction(new SimpleClause(field, operator, value)));
- });
+ values.forEach(value -> or.add(new OrConjunction(new SimpleClause(field,
operator, value))));
- NestedClause nestedClause = new NestedClause(or);
- this.whereClauses.add(nestedClause);
+ addNestedWhereClause(or);
+ return this;
+ }
+ @Override
+ public DataLakeQueryBuilder withInclusiveFilter(String field,
+ String operator,
+ List<?> values) {
+ List<ConjunctionClause> and = new ArrayList<>();
+ values.forEach(value -> and.add(new AndConjunction(new SimpleClause(field,
operator, value))));
+
+ addNestedWhereClause(and);
return this;
}
+ @Override
public DataLakeQueryBuilder withFilter(NestedClause clause) {
this.whereClauses.add(clause);
return this;
}
+ @Override
public DataLakeQueryBuilder withGroupByTime(String timeInterval) {
this.groupByClauses.add(new RawTextClause("time(" + timeInterval + ")"));
@@ -156,6 +175,7 @@ public class DataLakeQueryBuilder {
return this;
}
+ @Override
public DataLakeQueryBuilder withGroupByTime(String timeInterval,
String offsetInterval) {
@@ -168,6 +188,7 @@ public class DataLakeQueryBuilder {
return this;
}
+ @Override
public DataLakeQueryBuilder withGroupBy(String column) {
this.groupByClauses.add(new RawTextClause(column));
@@ -175,6 +196,7 @@ public class DataLakeQueryBuilder {
return this;
}
+ @Override
public DataLakeQueryBuilder withOrderBy(DataLakeQueryOrdering ordering) {
if (DataLakeQueryOrdering.ASC.equals(ordering)) {
this.ordering = asc();
@@ -185,18 +207,21 @@ public class DataLakeQueryBuilder {
return this;
}
+ @Override
public DataLakeQueryBuilder withLimit(int limit) {
this.limit = limit;
return this;
}
+ @Override
public DataLakeQueryBuilder withOffset(int offset) {
this.offset = offset;
return this;
}
+ @Override
public Query build() {
var selectQuery =
this.selectionQuery.from(env.getTsStorageBucket().getValueOrDefault(),
"\"" + measurementId + "\"");
@@ -220,4 +245,9 @@ public class DataLakeQueryBuilder {
return selectQuery;
}
+
+ private void addNestedWhereClause(List<ConjunctionClause> clauses) {
+ NestedClause nestedClause = new NestedClause(clauses);
+ this.whereClauses.add(nestedClause);
+ }
}
diff --git
a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/IDataLakeQueryBuilder.java
b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/IDataLakeQueryBuilder.java
new file mode 100644
index 000000000..2bc70df16
--- /dev/null
+++
b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/IDataLakeQueryBuilder.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.dataexplorer.sdk;
+
+import org.apache.streampipes.dataexplorer.v4.params.ColumnFunction;
+
+import org.influxdb.querybuilder.clauses.NestedClause;
+
+import java.util.List;
+
+public interface IDataLakeQueryBuilder<T> {
+ IDataLakeQueryBuilder withSimpleColumn(String columnName);
+
+ IDataLakeQueryBuilder withSimpleColumns(List<String> columnNames);
+
+ IDataLakeQueryBuilder withAggregatedColumn(String columnName,
+ ColumnFunction columnFunction,
+ String targetName);
+
+ IDataLakeQueryBuilder withStartTime(long startTime);
+
+ IDataLakeQueryBuilder withEndTime(long endTime);
+
+ IDataLakeQueryBuilder withEndTime(long endTime,
+ boolean includeEndTime);
+
+ IDataLakeQueryBuilder withTimeBoundary(long startTime,
+ long endTime);
+
+ IDataLakeQueryBuilder withFilter(String field,
+ String operator,
+ Object value);
+
+ IDataLakeQueryBuilder withExclusiveFilter(String field,
+ String operator,
+ List<?> values);
+
+ IDataLakeQueryBuilder withInclusiveFilter(String field,
+ String operator,
+ List<?> values);
+
+ IDataLakeQueryBuilder withFilter(NestedClause clause);
+
+ IDataLakeQueryBuilder withGroupByTime(String timeInterval);
+
+ IDataLakeQueryBuilder withGroupByTime(String timeInterval,
+ String offsetInterval);
+
+ IDataLakeQueryBuilder withGroupBy(String column);
+
+ IDataLakeQueryBuilder withOrderBy(DataLakeQueryOrdering ordering);
+
+ IDataLakeQueryBuilder withLimit(int limit);
+
+ IDataLakeQueryBuilder withOffset(int offset);
+
+ T build();
+}